关注
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 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 26届春招投递记录 #
24728次浏览 173人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
373825次浏览 2293人参与
# 我的求职总结 #
502154次浏览 7002人参与
# 腾讯工作体验 #
641861次浏览 3874人参与
# 27届实习投递记录 #
100670次浏览 1013人参与
# 摸鱼被leader发现了怎么办 #
206126次浏览 935人参与
# 实习的内耗时刻 #
239855次浏览 1655人参与
# 今年秋招哪家公司给的薪资最良心? #
486686次浏览 2596人参与
# 你后悔选择现在的专业吗 #
126365次浏览 715人参与
# 春招开局,你有保底offer吗? #
145925次浏览 696人参与
# 秋招投简历越早越好吗 #
117554次浏览 858人参与
# 你遇到过哪些神仙同事 #
146343次浏览 776人参与
# 材料专业可以靠半导体脱坑吗? #
41519次浏览 156人参与
# 金融财会交流会 #
153103次浏览 503人参与
# 如何看待应届生身份? #
257135次浏览 2361人参与
# 24届硬件人与华为的爱恨情仇 #
162508次浏览 1014人参与
# 牛客AI体验站 #
31292次浏览 444人参与
# AI岗位暴涨12倍,你会转AI赛道吗? #
25824次浏览 213人参与
# 秋招提前批启动你开冲了吗 #
194153次浏览 2260人参与
# 滴!实习打卡 #
858318次浏览 6887人参与
查看12道真题和解析