无法在代码中找出问题 它说线程“ main”中的异常java.lang.ArrayIndexOutOfBoundsException:6 我已经经历了很多次,仍然无法弄清楚出了什么问题
注意:尝试对数组中的0、1进行排序
public class javaarray {
public static void main(String[] args) {
int[] arr = new int[]{1, 0, 0, 1, 1, 0};
int left = 0, right =arr.length-1;
while(left<right) {
while(arr[left]==0 && left<right) {
left++;
}
while(arr[right]==1 && left<right){
right++;
}
if(left<right) {
arr[left]=0;
arr[right]=1;
left++;
right--;
}
}
for(int i=0; i<arr.length;i++) {
System.out.print(arr[i])
}
}
}
}
答案 0 :(得分:0)
这些行
while(arr[right]==1 && left<right){
right++;
}
应该是
while(arr[right]==1 && left<right){
right--;
}
答案 1 :(得分:0)
如果它只是0-1数组,则应计算零和其中的一个,并在所有零之后打印所有的一:
int[] arr = new int[]{1,0,0,1,1,0};
int zerosCount = 0;
for (int e: arr) {
if (e == 0) {
++zerosCount;
}
}
for (int i = 0; i < zerosCount; ++i) {
System.out.print(0);
}
for (int i = zerosCount; i < arr.length; ++i) {
System.out.print(1);
}
这种方法具有线性复杂性。
答案 2 :(得分:0)
一种更有效的方法(仅适用于包含0和1的数组):
int[] arr = new int[]{1, 0, 0, 1, 1, 0};
int current = 0;
int total = 0;
while (current < arr.legth) {
total += arr[current];
current++;
}
current = 0;
int[] sortedArr = new int[arr.length];
while (current < sortedArr.legth) {
if (current < sortedArr.legth - total) {
sortedArr[current] = 0;
} else {
sortedArr[current] = 1;
}
}
for (int i = 0; i < sortedArr.length; i++) {
System.out.print(sortedArr[i])
}