【Leetcode】移除元素
阿新 • • 發佈:2018-11-27
Leetcode
題目要求
給定一個數組nums和一個值val,你需要原地移除所有數值等於val的元素,返回移除後陣列的新長度,不要使用額外的陣列空間,你必須在原地修改陣列並在O(1)額外空間的條件下完成,元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。
示例1.
給定 nums = [3,2,2,3] ,val = 3
則函式應該返回新的長度為2,並且nums中的前兩個元素均為2
不需要考慮陣列中超出新長度後面的元素
示例2.
給定 nums = [0,1,2,2,3,0,4,2],val = 2
則函式應該返回新的長度為5,並且nums中前五個元素為0,1,3,0,4,2
注意這五個元素可為任意順序
不需要考慮陣列中超出新長度後面的元素
核心思想
採用雙指標的方法,很有代表性。
將值為val的資料全部移到陣列右邊,並用count記錄移動次數。
具體程式碼實現如下
public class Solution {
public int removeElement(int[] nums,int val){
int begin = 0;
int end = nums.length-1;
int count = 0;
while(begin <= end){
while(nums[begin] != val && begin < nums.length) {
begin++;
}
while(nums[end] == val && end >= 0){
end--;
count++;
}
if(begin >= end){
break;
}
//交換元素
int temp = nums[begin];
nums[begin] = nums[end];
nums[end] = temp;
}
//返回剔除val的元素個數
return nums.length - count;
}
public static void main(String[] args) {
Solution sl = new Solution();
int nums[] = {0,1,2,2,3,0,4,2};
System.out.println(sl.removeElement(nums,2));
}
}