kinter1 level
获赞
38
粉丝
8
关注
17
看过 TA
105
南京大学
2023
算法工程师
IP属地:江苏
暂未填写个人简介
私信
关注
2022-05-02 16:34
已编辑
南京大学 算法工程师
nums = [5,6,8,7] target = 500 nums.sort() target = str(target) def search(nums, target):     low, high = 0, len(nums) - 1      while low < high:         mid = low + (high - low + 1) // 2         if nums[mid] <= target:             low = mid         else:             high = mid - 1     return n...
西噶: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; }
投递字节跳动等公司9个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务