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; }

相关推荐

2025-12-29 21:15
门头沟学院 Java
1.&nbsp;项目你感觉你在这个过程中有哪些亮点以及能进行一下总结吗?这个项目的时候,那你有没有达到你们预期?以及有没有还能进行一些改进的点?2.&nbsp;进程中有一共有哪些状态,以及它这些状态是怎么去流转的?进程和线程有啥区别?3.&nbsp;Java数组、ArrayList和LinkedList有啥区别?HashMap的工作原理?exception&nbsp;和&nbsp;error&nbsp;它的一个区别有啥呀?throw&nbsp;和&nbsp;throws&nbsp;的区别?4.&nbsp;重定向和转发,forward和redirect两者的区别?5.&nbsp;介绍一下悲观锁和乐观锁?6.&nbsp;spring&nbsp;里面bean的生命周期是怎么去创建和消亡的呀?spring&nbsp;bean&nbsp;的自动生成的一个原理?7.&nbsp;MySQL里面的那个索引的作用是啥呀?它有什么优缺点吗?B+树索引如何实现的呢?&nbsp;left&nbsp;semi&nbsp;join和&nbsp;left&nbsp;anti&nbsp;join的区别?count(1),&nbsp;count(*)和count字段的区别?8.&nbsp;哪些场景是去使用Redis?Redis&nbsp;和&nbsp;memcache有啥区别?什么是缓存穿透?以及我们在该怎么去解决呢?&nbsp;Flink&nbsp;有用过没有?Hive会出现一些数据倾斜,有了解吗?9.&nbsp;场景题:给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url10.&nbsp;算法题:判断是否是回文整数11.&nbsp;SQL题:事件表event表有3个字段event_id:事件id,event_time:事件时间,user_id:用户id。使用SQL查询同一用户两个事件的时间间隔。输出4列:事件ID,事件时间,用户id,时间间隔
查看11道真题和解析
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务