要求輸入:給定數組nums[],數字val
要求輸出:數組中不等於val的元素個數n,同時要求不等於數字val的n個元素放置在數組的前n個位置(不要求順序)
例子
Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.
這道題只關注最後數組的前n個元素。因此很容易想到咱們遍歷整個數組,每當遇到不等於val的值的時候,咱們將計數的i值加一。同時咱們將這個元素賦值給nums[i],這樣就能夠保證,不等於val的n個元素完美佔據數組的前n個位置。
public int removeElement(int[] nums, int val) { int i = 0; for (int j = 0; j < nums.length; j++) { if (nums[j] != val) { nums[i] = nums[j]; i++; } } return i; }
當咱們遇到和等於val值的元素的時候,咱們將數組尾端的元素和此元素交換位置。以後減小一位遍歷長度。同時在下次遍歷中,咱們會從新檢查新swap過來的元素。數組
public int removeElement(int[] nums, int val) { int i = 0; int n = nums.length; while (i < n) { if (nums[i] == val) { nums[i] = nums[n - 1]; // reduce array size by one n--; } else { i++; } } return n; }