关注
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 评论
相关推荐
05-11 15:26
武汉大学 Java 点赞 评论 收藏
分享
浅白lw:兄弟们 大概率是去网易一个子公司做agent了,大厂真的是伤身又伤心
查看13道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 要毕业了,再不说就来不及了 #
27155次浏览 348人参与
# 我的租房踩坑经历 #
226723次浏览 1193人参与
# 第3届现代汽车Code Faster急速编程挑战赛 #
3867次浏览 194人参与
# 蔚来工作体验 #
35703次浏览 94人参与
# 你觉得什么岗位会被AI替代 #
67925次浏览 393人参与
# 国企/银行/研究所公司爆料 #
221238次浏览 940人参与
# 你都用AI做什么 #
56885次浏览 536人参与
# 0offer是寒冬太冷还是我太菜 #
1819324次浏览 10765人参与
# 体制内上岸心路历程 #
41387次浏览 243人参与
# 春招/暑实第一面是哪家? #
115581次浏览 1212人参与
# 求职遇到的搞笑事件 #
206254次浏览 1070人参与
# 春招你拿到offer了吗 #
939578次浏览 10328人参与
# 你是怎么和mt相处的? #
112585次浏览 588人参与
# 找工作时遇到的神仙HR #
1256904次浏览 5963人参与
# 牛友の3月总结 #
59244次浏览 287人参与
# 你都收到了哪些公司的感谢信? #
5519406次浏览 36250人参与
# xxx岗位的一天 #
58151次浏览 290人参与
# 我的第一份实习怎么找的 #
294430次浏览 2122人参与
# 第一次面试 #
1157678次浏览 13954人参与
# 数据人offer决赛圈怎么选 #
383148次浏览 2985人参与
# 比亚迪求职进展汇总 #
946749次浏览 3168人参与