LeetCode27. 移除元素
阿新 • • 發佈:2020-12-05
一、題目描述
二、解法
思路1:與LeetCode283. 移動零思路一模一樣,相當於把所有等於val的值移到最後。(保持元素的順序不變)
思路2:每遇到一個元素等於val時,將當前元素與最後一個元素交換,並釋放最後一個元素。(元素順序改變)
分析:思路2中賦值的次數等於要刪除元素的數量,因此如果要刪除的元素很少時效率更高。
class Solution { public int removeElement(int[] nums, int val) { if (nums == null || nums.length == 0) return 0; /** * 思路1:*/ int index = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] != val) { nums[index++] = nums[i]; } } return index; /* int index = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] != val) { if (i != index) { nums[index] = nums[i]; nums[i] = val; } index++; } } return index;*/ /*int j = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] == val) { j++; }else if (j != 0) { nums[i - j] = nums[i]; nums[i] = val; } } return nums.length - j;*/ /** * 思路2:當要刪除的元素很少時*/ /* int i = 0; int n = nums.length; while (i < n) { if (nums[i] == val) { nums[i] = nums[n-1]; n--; }else { // 防止上一步賦值時,後面的元素也是val i++; } } return n; */ } }