1. 程式人生 > >【Leetcode】移除元素

【Leetcode】移除元素

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)); } }