关注
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-30 17:58
Conservatoire National Supérieur Musique et Dance de Lyon Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 26年哪些行业会变好/更差 #
8183次浏览 127人参与
# 实习,不懂就问 #
147281次浏览 1324人参与
# 去年的flag与今年的小目标 #
4000次浏览 120人参与
# 卷__卷不过你们,只能卷__了 #
2690次浏览 78人参与
# 有深度的简历长什么样? #
9096次浏览 183人参与
# 哪些公司在招寒假实习? #
3930次浏览 49人参与
# 入职第一天 #
5545次浏览 98人参与
# 你都用AI做什么 #
3390次浏览 94人参与
# 写论文的崩溃时刻 #
1901次浏览 58人参与
# 你不能接受的企业文化有哪些 #
4549次浏览 82人参与
# 一人分享一道面试手撕题 #
11713次浏览 575人参与
# 实习学到最有价值的工作习惯 #
54252次浏览 433人参与
# 你最满意的offer薪资是哪家公司? #
64215次浏览 320人参与
# 应届生应该先就业还是先择业 #
161949次浏览 821人参与
# 外包能不能当跳板? #
55980次浏览 261人参与
# 滴滴求职进展汇总 #
292740次浏览 2415人参与
# 你的实习什么时候入职 #
333256次浏览 2235人参与
# 帆软软件工作体验 #
8711次浏览 36人参与
# 校招第一份工作你干了多久? #
132776次浏览 586人参与
# 秋招你被哪家公司挂了? #
1003106次浏览 7716人参与
查看1道真题和解析