关注
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 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 实习的你做了哪些离谱的工作 #
8374次浏览 114人参与
# 工作压力大,你会干什么? #
12497次浏览 298人参与
# 为了入行xx岗,我学了__ #
5293次浏览 99人参与
# 找实习记录 #
26804次浏览 466人参与
# 简历第一个项目做什么 #
6575次浏览 107人参与
# 如果不上班,你会去做什么 #
6271次浏览 250人参与
# Prompt分享 #
2080次浏览 65人参与
# 你都见过什么样的草台班子? #
5201次浏览 54人参与
# AI让你的思考变深了还是变浅了? #
4191次浏览 125人参与
# 被说“做题家”,你的反应是_____? #
1668次浏览 58人参与
# 邪修省钱套路 #
6886次浏览 227人参与
# 我的付费上班经历 #
12864次浏览 194人参与
# 机械人,秋招第一次笔试的企业是哪家? #
86144次浏览 621人参与
# 参加哪些竞赛对找工作有帮助? #
7163次浏览 127人参与
# 小厂实习有必要去吗 #
78013次浏览 369人参与
# 如果让你发明个APP,你会想做什么 #
1868次浏览 49人参与
# 转正答辩报告怎么写 #
51029次浏览 800人参与
# 秋招我要惩罚这些公司 #
8567次浏览 36人参与
# 大家实习每天都在干啥 #
112675次浏览 608人参与
# 查收我的offer竞争力报告 #
268551次浏览 1659人参与

查看11道真题和解析