关注
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 评论
相关推荐
查看12道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的求职进度条 #
1243244次浏览 9209人参与
# 第一份工作应该选择高薪还是大平台 #
220973次浏览 1047人参与
# 华泰星战营,提前锁定校招offer #
5284次浏览 287人参与
# 你简历上最心虚的一句话 #
2824次浏览 24人参与
# 考公VS就业,你怎么选? #
100145次浏览 525人参与
# 哪些公司对双非友好 #
230262次浏览 1238人参与
# 卷__卷不过你们,只能卷__了 #
60139次浏览 758人参与
# 校招第一份工作你干了多久? #
150258次浏览 631人参与
# 商战,最累的是我们 #
31704次浏览 99人参与
# 国企/银行/研究所公司爆料 #
209391次浏览 920人参与
# 荣耀求职进展汇总 #
1176413次浏览 5674人参与
# 比特大陆工作体验 #
18755次浏览 89人参与
# 找工作的破防时刻 #
289694次浏览 2066人参与
# 小红书求职进展汇总 #
238569次浏览 1397人参与
# 面试等了一周没回复,还有戏吗 #
239870次浏览 1842人参与
# 哪些公司在招寒假实习? #
93704次浏览 765人参与
# 面试线索爆料 #
127334次浏览 699人参与
# 春节前,你还在投简历吗? #
43110次浏览 351人参与
# 字节7000实习来了,你投了吗? #
44608次浏览 351人参与
# 大疆求职进展汇总 #
699929次浏览 4351人参与
# 总结:offer选择,我是怎么选的 #
287537次浏览 1566人参与
