王廷瑋|數位醫療|智慧醫療: 80. Remove Duplicates from Sorted Array II WFU

2024年7月5日 星期五

80. Remove Duplicates from Sorted Array II

80. Remove Duplicates from Sorted Array II


給定一個按非遞減順序排序的整數數組 nums,原地移除一些重複元素,使得每個唯一元素最多出現兩次。元素的相對順序應保持不變。

由於在某些語言中無法改變數組的長度,因此必須將結果放置在數組 nums 的前部分。更正式地說,如果在移除重複元素後有 k 個元素,則 nums 的前 k 個元素應包含最終結果。在前 k 個元素之後的部分不重要。

返回 k,表示最終結果佔據了 nums 的前 k 個位置。

不要為另一個數組分配額外的空間。必須通過就地修改輸入數組來完成這項操作,並且使用 O(1) 的額外內存。

自定義判斷:

判斷將使用以下代碼測試你的解決方案:

int[] nums = [...]; // 輸入數組

int[] expectedNums = [...]; // 預期答案及其正確長度

int k = removeDuplicates(nums); // 調用你的實現

assert k == expectedNums.length;

for (int i = 0; i < k; i++) {

assert nums[i] == expectedNums[i];

}

如果所有斷言都通過,則你的解決方案將被接受。

範例 1:

輸入:nums = [1,1,1,2,2,3] 輸出:5, nums = [1,1,2,2,3,_] 解釋:你的函數應返回 k = 5,其中 nums 的前五個元素分別是 1、1、2、2 和 3。 在返回的 k 之後的部分不重要(因此用下劃線表示)。


Python


from typing import List

class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if len(nums) <= 2:
return len(nums)
# This is the position to place the next allowed element
insert_pos = 2
for i in range(2, len(nums)):
# If the current element is different from the element two positions
            before it
if nums[i] != nums[insert_pos - 2]:
nums[insert_pos] = nums[i]
insert_pos += 1
return insert_pos

16.48MB, 59ms


C++


#include <vector>

class Solution {
public:
int removeDuplicates(std::vector<int>& nums) {
if (nums.size() <= 2) {
return nums.size();
}
int insert_pos = 2; // Start position for placing the next allowed element
for (int i = 2; i < nums.size(); ++i) {
if (nums[i] != nums[insert_pos - 2]) {
nums[insert_pos] = nums[i];
++insert_pos;
}
}
return insert_pos;
}
};

13.56MB, 4ms


Javascript


/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
if (nums.length <= 2) {
return nums.length;
}
let insert_pos = 2; // Start position for placing the next allowed element
for (let i = 2; i < nums.length; i++) {
if (nums[i] !== nums[insert_pos - 2]) {
nums[insert_pos] = nums[i];
insert_pos++;
}
}
return insert_pos;
};

51.77MB, 63ms