思考1
冒泡排序,每次把0推到后面
时间太长报错
for(int i=0; i<nums.size()-2; i++) {
for(int j=i; j<nums.size()-1; j++) {
if(nums[i] == 0) {
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
}
}
思考2
从后往前加零,想法有误,因为顺序会变
for(int i=nums.size()-1; i>0; i--) {
if(nums[i] != 0) {
continue;
}
j=i-1;
while()
}
思考3
从头扫描数组,找到为 0 的下标 i , 在找到 nums[i] 右边第一个不为零的下标 j ,交换二者。直到某一次循环, 某一个 i 的右边没有一个不为零的元素(j == nums.size()) 。
下述代码运行成功。
int j;
for(int i=0; i<nums.size(); i++) {
if(nums[i] != 0) continue;
j=i;
while(j<nums.size() && nums[j] == 0) {
j++;
}
if(j == nums.size()) break;
int temp = nums[j];
nums[j]=nums[i];
nums[i] =temp;
}
思考4
一定要反过来想,不要只盯着0,可以设置一个指针,就是专业收集不是零的数 收集一遍后,后面的一定是0,就再将空出来的位置设置为0,就解决问题了
下述代码运行成功。
int i=0,k;
for(k=0; k<nums.size(); k++) {
if(nums[k] != 0){
nums[i] = nums[k];
i++;
}
}
for(; i<nums.size(); i++) {
nums[i] = 0;
}
}