难度中
分析:
例如 nums = [1,5,4,3,2], 最终结果应该是:[2,1,3,4,5]
错误的结果: [5,1,4,3,2], 因为题目意义是让你找比 nums=[1,5,4,3,2]稍大一点点的排列。
解题思路:
1.从最后一个元素 i 向前开始比,找到 nums[i] > nums[i-1]
2.把nums[i]——最后从小到大排序 sort一下
现在结果:[1,2,3,4,5]
3.从 i 坐标开始,向后找,找到第一个 > i-1的,将 然后 swap(nums[i],nums[i-1]) 结束算法,即可得到答案
for (int i = nums.length - 1; i > 0; i--) {
if (nums[i] > nums[i - 1]) {
sort(nums, i, nums.length - 1);//将这个大数开始和后面的数字排序
for (int j = i; j < nums.length; j++) {//找到第一个比小的数稍大的数,和它进行交换
if (nums[j] > nums[i - 1]) {
int temp = nums[j];
nums[j] = nums[i - 1];
nums[i - 1] = temp;
return;
}
}
}
}
sort(nums,0,length-1);
//排序函数
public static void sort(int[] nums, int i, int j) {
while (i <= j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
i++;
j--;
}
}
再例如: nums[1,2,3,4,6,5] => [1,2,3,4,5,6] =>[1,2,3,5,4,6]