Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same.
Return k after placing the final result in the first k slots of nums.
Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.
給予一個nums(整數陣列)按照非遞減排序(小到大),移除nums中重複的數值且每個數值僅出現一次,然而nums的數值排序不變。 將結果放入nums的前方,並回傳nums的數量 不使用額外的陣列空間,且必須在原陣列中計算。
Example 1:
Input: nums = [1,1,2] Output: 2, nums = [1,2,_] Explanation: Your function should return k = 2, with the first two elements of nums being 1 and 2 respectively. It does not matter what you leave beyond the returned k (hence they are underscores).
Example 2:
Input: nums = [0,0,1,1,1,2,2,3,3,4] Output: 5, nums = [0,1,2,3,4,_,_,_,_,_] Explanation: Your function should return k = 5, with the first five elements of nums being 0, 1, 2, 3, and 4 respectively. It does not matter what you leave beyond the returned k (hence they are underscores).
Solution:
1. 如果nums為無效或空值,則為傳0。
2. 宣告count為確認次數=字串長度。
3. 「For迴圈」進行陣列中數值倆倆比對。
count = 0, i = 1 [ 0, 1, 2] nums[0] nums[1] nums[0] nums[2]
4. 「if條件」
不相同時count+=1,且變更原陣列的數值。
相同時count不變,且依序往後比較數值。
5. 完成「for回圈」,return count+1的數值。
box = [1, 2, 3] Array = 0 1 2 box.length = Array + 1
Code 1: BigO(n)
var removeDuplicates = function (nums: number[]): number { if (nums === null || nums.length === 0) return 0 let count = 0 for (let i = 1; i < nums.length; i++) { if (nums[count] !== nums[i]) { count++ nums[count] = nums[i] } } return count + 1 };
FlowChart:
Example 1
step.1 nums = [ 1, 1, 2] nums[0] nums[1] count = 0 step.2 nums = [ 1, 1, 2] nums[0] nums[2] count => 0 + 1 = 1 nums[1] = nums[2] =>nums [ 1, 2, 2] step.3 return count++ => 1 + 1 = 2
Example 2
step.1 nums = [ 0, 0, 1, 1, 1, 2, 2, 3, 3, 4] nums[0] nums[1] count = 0 step.2 nums = [ 0, 0, 1, 1, 1, 2, 2, 3, 3, 4] nums[0] nums[2] count => 0 + 1 = 1 nums[1] = nums[2] => nums = [ 0, 1, 1, 1, 1, 2, 2, 3, 3, 4] step.3 nums = [ 0, 1, 1, 1, 1, 2, 2, 3, 3, 4] nums[1] nums[3] count = 1 step.4 nums = [ 0, 1, 1, 1, 1, 2, 2, 3, 3, 4] nums[1] nums[4] count = 1 step.5 nums = [ 0, 1, 1, 1, 1, 2, 2, 3, 3, 4] nums[1] nums[5] count => 1 + 1 = 2 nums[1] = nums[5] => nums = [ 0, 1, 2, 1, 1, 2, 2, 3, 3, 4] step.6 nums = [ 0, 1, 2, 1, 1, 2, 2, 3, 3, 4] nums[2] nums[6] count = 2 step.7 nums = [ 0, 1, 2, 1, 1, 2, 2, 3, 3, 4] nums[2] nums[7] count => 2 + 1 = 3 nums[3] = nums[7] => nums = [ 0, 1, 2, 3, 1, 2, 2, 3, 3, 4] step.8 nums = [ 0, 1, 2, 3, 1, 2, 2, 3, 3, 4] nums[3] nums[8] count = 3 step.9 nums = [ 0, 1, 2, 3, 1, 2, 2, 3, 3, 4] nums[3] nums[9] count => 3 + 1 = 4 nums[4] = nums[9] => nums = [ 0, 1, 2, 3, 4, 2, 2, 3, 3, 4] return count++ => 4 + 1 = 5
Code 2: BigO(n)
var removeDuplicates = function (nums: number[]): number { const uniq = new Set(nums); const num = Array.from(uniq) for (let i = 0; i < nums.length; i++) { nums[i] = num[i]; } return num.length };