前言
我們社區(qū)陸續(xù)會(huì)將顧毅(Netflix 增長黑客藏畅,《iOS 面試之道》作者挟阻,ACE 職業(yè)健身教練。微博:@故胤道長)的 Swift 算法題題解整理為文字版以方便大家學(xué)習(xí)與閱讀。
LeetCode 算法到目前我們已經(jīng)更新了 25 期驻民,我們會(huì)保持更新時(shí)間和進(jìn)度(周一翻具、周三、周五早上 9:00 發(fā)布)回还,每期的內(nèi)容不多裆泳,我們希望大家可以在上班路上閱讀,長久積累會(huì)有很大提升柠硕。
不積跬步工禾,無以至千里;不積小流蝗柔,無以成江海闻葵,Swift社區(qū) 伴你前行。如果大家有建議和意見歡迎在文末留言癣丧,我們會(huì)盡力滿足大家的需求槽畔。
難度水平:簡單
1. 描述
給你一個(gè) 升序排列 的數(shù)組 nums
,請你 原地
刪除重復(fù)出現(xiàn)的元素胁编,使每個(gè)元素 只出現(xiàn)一次 厢钧,返回刪除后數(shù)組的新長度。元素的 相對(duì)順序 應(yīng)該保持 一致 嬉橙。
由于在某些語言中不能改變數(shù)組的長度早直,所以必須將結(jié)果放在數(shù)組 nums 的第一部分。更規(guī)范地說憎夷,如果在刪除重復(fù)項(xiàng)之后有 k
個(gè)元素莽鸿,那么 nums
的前 k
個(gè)元素應(yīng)該保存最終結(jié)果。
將最終結(jié)果插入 nums
的前 k
個(gè)位置后返回 k
拾给。
不要使用額外的空間祥得,你必須在 原地
修改輸入數(shù)組 并在使用 O(1) 額外空間的條件下完成。
判題標(biāo)準(zhǔn):
系統(tǒng)會(huì)用下面的代碼來測試你的題解:
int[] nums = [...]; // 輸入數(shù)組
int[] expectedNums = [...]; // 長度正確的期望答案
int k = removeDuplicates(nums); // 調(diào)用
assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
assert nums[i] == expectedNums[i];
}
如果所有斷言都通過蒋得,那么您的題解將被 通過级及。
2. 示例
示例 1
輸入:nums = [1,1,2]
輸出:2, nums = [1,2,_]
解釋:函數(shù)應(yīng)該返回新的長度 2 ,并且原數(shù)組 nums 的前兩個(gè)元素被修改為 1, 2 额衙。不需要考慮數(shù)組中超出新長度后面的元素饮焦。
示例 2
輸入:nums = [0,0,1,1,1,2,2,3,3,4]
輸出:5, nums = [0,1,2,3,4]
解釋:函數(shù)應(yīng)該返回新的長度 5 , 并且原數(shù)組 nums 的前五個(gè)元素被修改為 0, 1, 2, 3, 4 窍侧。不需要考慮數(shù)組中超出新長度后面的元素县踢。
約束條件:
0 <= nums.length <= 3 * 10^4
-10^4 <= nums[i] <= 10^4
-
nums
已按 升序 排列
3. 答案
class RemoveDuplicatesFromSortedArray {
func removeDuplicates(inout nums: [Int]) -> Int {
guard nums.count > 0 else {
return 0
}
var index = 0
for num in nums where num != nums[index] {
index += 1
nums[index] = num
}
return index + 1
}
}
- 主要思想:保留一個(gè)索引,將該索引處的元素與前面的元素進(jìn)行比較伟件。
- 時(shí)間復(fù)雜度: O(n)
- 空間復(fù)雜度: O(1)
該算法題解的倉庫:LeetCode-Swift
點(diǎn)擊前往 LeetCode 練習(xí)
關(guān)于我們
我們是由 Swift 愛好者共同維護(hù)硼啤,我們會(huì)分享以 Swift 實(shí)戰(zhàn)、SwiftUI斧账、Swift 基礎(chǔ)為核心的技術(shù)內(nèi)容谴返,也整理收集優(yōu)秀的學(xué)習(xí)資料煞肾。
后續(xù)還會(huì)翻譯大量資料到我們公眾號(hào),有感興趣的朋友嗓袱,可以加入我們籍救。