Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The relative order of the elements may be changed.
If there are k elements after removing the duplicates, then the first k elements of nums should hold the final result. It does not matter what you leave beyond the first k elements.
Return k after placing the final result in the first k slots of nums.
在特定的陣列移除val,元素的順序可改, 保留剩下數字,並放置陣列前方。
Example 1:
Input: nums = [0,1,2,2,3,0,4,2], val = 2 Output: 5, nums = [0,1,4,0,3,_,_,_]
Code 1:
var removeElement = function(nums: number[], val: number): number {
if (!nums) return 0
let k = 0
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== val) { //如果nums[i]不等於2
nums[k] = nums[i] //將原陣列的第k個的值,變更成第i個的值
k++ //k往下一位進行判斷
}
}
return k
};
FlowChart:
i = for loop
k = note
remove val = 2
step.1
i = 0
[0,1,2,2,3,0,4,2] // nums[0] = nums[0]
k = 0 // next
nums[0]
step.2
i = 1
[0,1,2,2,3,0,4,2] // nums[1] = nums[1]
k = 1 // next
nums[0,1]
step.3
i = 2
[0,1,2,2,3,0,4,2]. // remove val
k = 2 // keep k
nums[0,1]
step.4
i = 3
[0,1,2,2,3,0,4,2]. // remove val
k = 2 // keep k
nums[0,1]
step.5
i = 4
[0,1,2,2,3,0,4,2]. // nums[2] = nums[4]
k = 2 // next
nums[0,1,3]
step.6
i = 5
[0,1,2,2,3,0,4,2]. // nums[3] = nums[5]
k = 3 // next
nums[0,1,3,0]
step.7
i = 6
[0,1,2,2,3,0,4,2]. // nums[4] = nums[6]
k = 4 // next
nums[0,1,3,0,4]
step.8
i = 7
[0,1,2,2,3,0,4,2]. // remove val
k = 4 // next
nums[0,1,3,0,4]
Answer:
Output = [0,1,3,0,4]
Code 2:
var removeElement = function(nums: number[], val: number): number {
let index = nums.indexOf(val)
while (index !== -1) {
nums.splice(index, 1)
index = nums.indexOf(val)
}
return nums.length
};