标题
小于n的最大数
题目描述
给定一个数你,入23121;给定一个数组A如{2,4,9},求由A中元素组成的、小于n的最大数,如小于23121的最大数是22999
思路:
1、把数组排序
2、把int转换成字节数组,从第一个开始变量(如2),从数组中和元素相同的值
如果找到了这个位就用这个值,继续设置
如果找不到用比这个值小,最接近这个值的元素替代(比如3找不到用2代替),其他的用数组最大值(9)填充
不知道对不对,以下是代码
package com.example.providerdemo;
public class Test {
public static void main(String[] args) {
int n = 23121;//{2,4,9} 22999
String str = n+"";
int[] nums = new int[]{2,4,9};
char[] charArray = str.toCharArray();
StringBuilder sb = new StringBuilder();
for(int i = 0;i<charArray.length;i++){
char c = charArray[i];
int cInt = c-'0';
int val = findValueOrLessValue(cInt,nums);
if(val==cInt){
sb.append(val);
}else{
sb.append(val);
i++;
while(i<charArray.length){
sb.append(nums[nums.length-1]);
i++;
}
}
}
System.out.println(sb.toString());
}
private static int findValueOrLessValue(int val,int[] nums) {
int left = 0;
int right = nums.length - 1;
while(left<=right){
int mid = (left + right)/2;
if(mid>val){
left = mid + 1;
}else if(mid<val){
right = mid -1;
}else{
return val;
}
}
return nums[left];
}
}