关注
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 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客新年AI问运 #
6715次浏览 110人参与
# 工作中的卑微时刻 #
33471次浏览 199人参与
# 牛客AI体验站 #
16338次浏览 288人参与
# 多益网络工作体验 #
63212次浏览 306人参与
# 有必要和同事成为好朋友吗? #
1099次浏览 21人参与
# 正在实习的碎碎念 #
1645251次浏览 13716人参与
# 面试中的破防瞬间 #
1190430次浏览 11027人参与
# 工作一周年分享 #
52384次浏览 274人参与
# 滴!实习打卡 #
786741次浏览 6841人参与
# 秋招吐槽大会 #
304435次浏览 1523人参与
# 机械人的薪资开到多少,才适合去? #
165100次浏览 571人参与
# 你最满意的offer薪资是哪家公司? #
71435次浏览 353人参与
# 大学最后一个寒假,我想…… #
89332次浏览 809人参与
# 你怎么看待AI面试 #
146095次浏览 786人参与
# 哪些公司真双非友好? #
62951次浏览 268人参与
# OC/开奖 #
411397次浏览 2282人参与
# 为了实习逃课值吗? #
65827次浏览 526人参与
# 如果可以选,你最想从事什么工作 #
722250次浏览 4870人参与
# 重来一次,你会对开始求职的自己说 #
32909次浏览 388人参与
# 如何提高实习转正率? #
86627次浏览 505人参与
查看3道真题和解析