12354 组合的数字 找比该数据最大中的最小数字
思路:
- 从后往前遍历得到一个相邻的后面比前面大的数据索引位置
- 从当前索引到数组最大位置建立两个指针,left为当前索引值var[left],right为最大位置索引代表到值var[right],若val[right] > var[left]则交换
- 交换后继续交换当前索引到数组最大位置建立两个指针中间的值,因为当前索引后面 前面大都比后面的数大
class MinMaxLargest {
public static void main(String[] args) {
int[] arr = new int[]{1,2,4,3,1};
final int point = findPoint(arr);
if(point != -1) {
getMinMax(arr, point);
System.out.println(Arrays.toString(arr));
}
}
private static int findPoint(int[] arr) {
for(int i = arr.length - 1; i > 0;i --) {
if(arr[i] > arr[i - 1]) {
return i;
}
}
return -1;
}
private static void getMinMax(int[] arr, int index) {
int left = arr[index - 1];
for(int i = arr.length - 1; i >= index;i --) {
int right = arr[i];
if(right > left) {
int temp = arr[i];
arr[i] = arr[index - 1];
arr[index - 1] = temp;
break;
}
}
for(int i = index,j = arr.length - 1; i < j; i++,j--) {
int temp = arr[index];
arr[index] = arr[j];
arr[j] = temp;
}
}
}