关注
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 评论
相关推荐
2025-12-27 14:38
华南农业大学 前端工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 上班以后,你还有哪些坚持的爱好? #
3436次浏览 100人参与
# 拼多多工作体验 #
42612次浏览 275人参与
# 你最近因为什么迷茫? #
20938次浏览 289人参与
# 你有哪些缓解焦虑的方法? #
47453次浏览 892人参与
# 你都在哪些场所面过试? #
8647次浏览 137人参与
# 记录实习开销 #
176681次浏览 677人参与
# 当你面对裁员会如何? #
355885次浏览 2878人参与
# 你认为小厂实习有用吗? #
114881次浏览 677人参与
# 实习离职怎么跟领导说 #
74757次浏览 412人参与
# 工作一周年分享 #
49238次浏览 243人参与
# AI coding的好用工具分享 #
8592次浏览 193人参与
# 工作压力大怎么缓解 #
133420次浏览 1163人参与
# 实习怎么做才有更好的产出 #
5428次浏览 128人参与
# 一起聊字节 #
241351次浏览 1018人参与
# 实习生工资多少才算正常? #
6779次浏览 128人参与
# 找工作以来,你最看不惯__ #
5223次浏览 136人参与
# 你给AI提过哪些离谱的需求? #
3030次浏览 106人参与
# 26届秋招投递记录 #
112216次浏览 661人参与
# 领导做过最不靠谱的事 #
7009次浏览 131人参与
# 上班到公司第一件事做什么? #
134394次浏览 938人参与
查看16道真题和解析