题目:
简述题目:
题目要求将nums数组中的值为val 的数去掉(也可以不去掉),然后将其余的数放在前n位(n = nums.lenth - val的个数),最终可以返回这个新的不包含val的数组
思路:
方法1:统计出现的次数,然后依次往后遍历,替换(其实这个方法很笨。)
public class removeElement27 {
public static int removeElement(int[] nums, int val) {
int count = 0;
int temp;
for(int i = 0 ; i < nums.length ; i++){
if(nums[i] == val){
count++;
}
}
for(int i = 0; i < nums.length; i++){
if(nums[i] == val){
for(int j = i+1; j < nums.length; j++){
if(nums[j] != val){
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
break;
}
}
}
}
return nums.length - count;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = {1};
int val = 1;
int len = removeElement(nums, val);
System.out.print("[");
for(int i = 0; i < len-1;i++){
System.out.print(nums[i] + ",");
}
if(len - 1 >= 0)
System.out.println(nums[len-1] + "]");
else {
System.out.println( "]");
}
}
}
方法2:
这个方法是参考了网上的代码,因为val数值的数已经不需要保留的,所以直接覆盖掉就OK了。
代码:
class Solution {
public int removeElement(int[] nums, int val) {
int remain = 0;//保留数(非val)数的下标
for(int i = 0 ; i < nums.length ; i++){
if(nums[i] != val){
nums[remain++] = nums[i];
}
}
return remain;
}
}