4/29每日一題 (重複地用_代替)
給定一個按非遞減順序nums排序的整數數組,就地刪除重複項,使每個唯一元素只出現一次。元素的相對順序應該保持不變。然後返回中唯一元素的數量。nums
nums考慮to be的獨特元素的數量k,要被接受,您需要做以下事情:
- 更改數組
nums,使 的第一個k元素nums按照它們最初出現的順序包含唯一元素nums。的其餘元素nums與 的大小一樣不重要nums。 - 返回
k。
自定義法官:
法官將使用以下代碼測試您的解決方案:
int[] nums = [...]; // 輸入數組
int[] expectedNums = [...]; // 長度正確的預期答案
int k = removeDuplicates(nums); // 調用你的實現
斷言 k == expectedNums.length;
對於 (int i = 0; i < k; i++) {
斷言 nums[i] == expectedNums[i];
}
如果所有斷言都通過,那麼你的解決方案將被接受。
示例 1:
輸入: nums = [1,1,2]
輸出: 2, nums = [1,2,_]
解釋:你的函數應該返回 k = 2,nums 的前兩個元素分別為 1 和 2。
除了返回的 k(因此它們是下劃線)之外,你留下什麼並不重要。
示例 2:
輸入: nums = [0,0,1,1,1,2,2,3,3,4]
輸出: 5, nums = [0,1,2,3,4,_,_,_,_, _]
解釋:你的函數應該返回k = 5,nums的前五個元素分別是0、1、2、3和4。
除了返回的 k(因此它們是下劃線)之外,你留下什麼並不重要。
約束:
1 <= nums.length <= 3 * 104-100 <= nums[i] <= 100nums是按非降序排列的。
class Solution:
def removeDuplicates(self, nums):
n=len(nums)
k=0
#這邊使用有個陷阱 不使用for迴圈搭配remove
#因為當第一個元素被刪除後,原本該元素後面的元素會被自動往前移動一位,
#所以下一輪的迴圈中,原本在第三個位置的元素會被當成第二個元素被處理。
#因此使用for迴圈遍歷nums時只會對每個元素執行一次,即使重複也只會刪除一次
while k < n:
#檢查第1,檢查第1、第2如果重複就pop取出,不重複就在繼續檢查第1、2、3項
if nums[k] in nums[:k] :
nums.pop(k)
n -= 1
nums.append("_")
print(f'看看插在第幾項{nums.index("_")}')
print(f"現在檢查到第幾項={k},n還剩多少{n}")
else:
k += 1
return k,nums
tes=Solution()
print(tes.removeDuplicates([0,0,1,1,1,2,2,3,3,4]))
-------------
終端機
PS C:\Users\K\OneDrive\桌面\AUTOKI> & C:/Users/K/AppData/Local/Programs/Python/Python311/python.exe c:/Users/K/OneDrive/桌面/AUTOKI/tes.py ython/Python311/python.exe c:/Users/K/OneDrive/桌面/AUTOKI/tes.py
現在檢查到第幾項=1,n還剩多少9
現在檢查到第幾項=2,n還剩多少8
現在檢查到第幾項=2,n還剩多少7
現在檢查到第幾項=3,n還剩多少6
現在檢查到第幾項=4,n還剩多少5
(5, [0, 1, 2, 3, 4, '_', '_', '_', '_', '_'])
標籤: leetcode

0 個意見:
張貼留言
訂閱 張貼留言 [Atom]
<< 首頁