題目描述:給你一個數組 nums 和一個值 val,你須要 原地 移除全部數值等於 val 的元素,並返回移除後數組的新長度。java
不要使用額外的數組空間,你必須僅使用 O(1) 額外空間並 原地 修改輸入數組。數組
元素的順序能夠改變。你不須要考慮數組中超出新長度後面的元素。網絡
示例說明請見LeetCode官網。code
來源:力扣(LeetCode)
連接:https://leetcode-cn.com/probl...
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。element
- 首先,若是數組爲空或者數組的長度爲0,直接返回0;
而後,若是數組不爲空,遍歷數組,count記錄和val值不相同的數目(也就是最後的返回值),index表示從0開始遍歷,reverseCount表示交換數字的次數,具體遍歷過程以下:leetcode
- 當index對應的值不等於val時,count加1,而且index加1也就是日後移一位;
- 當index對應的值等於val時,判斷index是否後面可遍歷的位數,若是是,則將index和可遍歷的最後一位交換數字,而且reverseCount+1,而後繼續遍歷;若是不是,則沒有可交換的位置,即已經遍歷完成。返回count值。
public class LeetCode_027 { public static int removeElement(int[] nums, int val) { if (nums == null || nums.length == 0) { return 0; } int count = 0; int index = 0; int reverseCount = 0; while (index < nums.length - reverseCount) { if (nums[index] != val) { index++; count++; } else { if (index < (nums.length - 1 - reverseCount)) { int temp = nums[index]; nums[index] = nums[nums.length - 1 - reverseCount]; nums[nums.length - 1 - reverseCount] = temp; reverseCount++; } else { break; } } } return count; } public static void main(String[] args) { int[] nums = new int[]{1}; System.out.println(removeElement(nums, 1)); System.out.println(); for (int num : nums) { System.out.print(num + " "); } } }
【每日寄語】 昨天是歷史,明天是謎團,只有今天是天賜的禮物。