关注
void maxNumber(const vector<int> &;v, int num)
{
vector<int> arr, ans;
int minChoose=10, maxChoose=0;
bool exist[10];
for(int x:v)
{
exist[x]= true;
minChoose = min(minChoose, x); //可选择的最小值
maxChoose = max(maxChoose, x); //可选择的最大值
}
while(num) //将num每一位存到数组
{
arr.push_back(num%10);
num /= 10;
}
reverse(arr.begin(), arr.end());
//答案应尽可能和num位数相同,若位数相同无解,则答案减少一位且每位取最大值,如100 {2,3,4}的答案为44
for(int i=0;i<arr.size();i++)
{
//待选择的后一位大于等于可选数字的最小值时,当前为才可以选等值,否则只能选小于的值
int j = (i == arr.size() - 1 || arr[i + 1] >= minChoose ? arr[i] : arr[i] - 1);
while (j >= 0 &;&; !exist[j])
j--;
if(j<0) //同位数无解,退而求次降低解的位数
{
ans.clear();
for (int k = 0; k < arr.size() - 1; ++k)
ans.push_back(maxChoose);
break;
}
else if(j!=arr[i]) //当前位取了小于原数同位的值,则解确定,后面每一位都可以取最大值
{
ans.push_back(j);
while (ans.size()<arr.size())
ans.push_back(maxChoose);
break;
}
ans.push_back(j);
}
for(auto &;x:ans)
cout<<x;
cout << endl;
}
查看原帖
1 评论
相关推荐
03-21 17:52
门头沟学院 全栈开发 点赞 评论 收藏
分享
查看12道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试体验最好和最差的公司 #
7369次浏览 53人参与
# 如何提高实习转正率? #
99824次浏览 583人参与
# 厦门银行科技岗值不值得投 #
17248次浏览 413人参与
# 烂工作和没工作哪个更痛苦? #
7960次浏览 155人参与
# 重来一次,我还会选择这个专业吗 #
444602次浏览 3947人参与
# 给工作过的公司写一条大众点评,你会怎么写? #
3248次浏览 54人参与
# 春招至今,你收到几个面试了? #
16855次浏览 276人参与
# 现在入门AI首先要做什么? #
1658次浏览 51人参与
# AI替代不了什么? #
6871次浏览 104人参与
# 一人分享一个skill #
1330次浏览 38人参与
# 银行笔面经互助 #
190276次浏览 1313人参与
# Agent面试会问什么? #
5687次浏览 141人参与
# 总结:offer选择,我是怎么选的 #
280826次浏览 1552人参与
# 有必要和同事成为好朋友吗? #
43911次浏览 439人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
10845次浏览 56人参与
# 学历VS实习,哪个更重要? #
19314次浏览 258人参与
# 选完offer后,你后悔学本专业吗 #
68019次浏览 267人参与
# 面试线索爆料 #
123870次浏览 689人参与
# 职场吐槽大会 #
345074次浏览 2275人参与
# 如果实习可以转正,你会不会放弃秋招 #
969271次浏览 6875人参与
# 机械人,你的秋招第一份简历被谁挂了 #
261090次浏览 2435人参与
