1. 程式人生 > 實用技巧 >LeetCode27. 移除元素

LeetCode27. 移除元素

一、題目描述

二、解法

思路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; */ } }