众所周知的问题:
给出n范围从1到n的数组数。对原位O(1)空间进行排序。
Input: [3, 1, 5, 4, 2]
Output: [1, 2, 3, 4, 5]
我的解决方法是
public static void sort(int[] nums) {
int n = nums.length;
for(int i = 0; i < n; i++){
if(nums[nums[i] -1] != nums[i]){ // if I use while here it works.
int j = nums[i] -1;
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
}
}
但是此错误如下。
Input: [1, 5, 6, 4, 3, 2]
Wrong output: [1, 3, 2, 4, 5, 6]
如果我在for循环中使用while
(而不是if
),则可以使用。不知道如果我在if
循环中使用for
语句,为什么会有bug。
有人可以澄清原因吗?
Arrays.sort(nums)
,这应该可以工作>int[] nums= new int[]{ 1, 5, 6, 4, 3, 2 };
int n = nums.length;
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length; j++) {
if (nums[i] < nums[j]) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
for (int i = 0; i < n; i++){
System.out.println(nums[i]);
}
输出
[1, 2, 3, 4, 5, 6]