【LittleDuck_LeetCodeNote】26 - Remove Duplicates from Sorted

更新於 2023/07/10閱讀時間約 9 分鐘

A realistic, brightly colored interior home-style drawing in blue tones of a software engineer. - Leonardo.ai

Question and Hints

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. Then return the number of unique elements in nums.
Consider the number of unique elements of nums to be k, to get accepted, you need to do the following things:
  • Change the array nums such that the first k elements of nums contain the unique elements in the order they were present in nums initially. The remaining elements of nums are not important as well as the size of nums.
  • Return k.
Custom Judge:
The judge will test your solution with the following code:
int[] nums = [...]; // Input array
int[] expectedNums = [...]; // The expected answer with correct length

int k = removeDuplicates(nums); // Calls your implementation

assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
assert nums[i] == expectedNums[i];
}
If all assertions pass, then your solution will be accepted.
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).
Constraints:
  • 1 <= nums.length <= 3 * 104
  • 100 <= nums[i] <= 100
  • nums is sorted in non-decreasing order.

First Solution

💡 先確認好,我們的目標是要回傳k,即”有幾個不重複的數字” ,
以及在nums搜尋前k個數字時,可以得到不重複的結果。

我的思路是,用k去當作陣列尾的索引,
一旦遇到不重複的數字,就把他丟到陣列尾,
並且k最後的索引,即為整個不重複值陣列的長度。

陣列的第一個數字已經擺好了,所以不用管它,
我們要看第二個數字應該擺誰,
因此k從1開始,不斷和下一個值進行比較。

最後就能得到排列好的nums,以及不重複值的總數k。
class Solution {
public int removeDuplicates(int[] nums) {
int k = 1;

for(int i=0; i<nums.length-1; i++){
if(nums[i] != nums[i+1]){
nums[k++] = nums[i+1];
}
}

return k;
}
}
⏰ Runtime: 1 ms (99.95 %)
📦 Memory: 44.4 MB (28.90 %)

Upgrade Solution

clean up memory space.
💡 邏輯一樣,只是多了一個System.gc()的方法去回收沒有用到的陣列空間,
所以多了一點時間去清理記憶體,但占用的空間變小了。
class Solution {
public int removeDuplicates(int[] nums) {
int nextIndex = 1;

for(int i = 0; i<nums.length - 1; i++){
if(nums[i] < nums[i+1]){
nums[nextIndex] = nums[i+1];
nextIndex++;
}
}
System.gc();
return nextIndex;
}
}
⏰ Runtime: 6 ms (7.93 %)
📦 Memory: 42.3 MB (99.98 %)

Upgrade Solution 2

Use Hash’s feature : the same value across the same hash function, it will return the same result.
💡 LinkedHashSet 是Java一種陣列的儲存方式,
會將要輸入的值先透過Hash function轉換後,再存進陣列,
並且它不會儲存相同的內容,
所以將值存進LinkedHashSet ,就是在自動篩選掉重複的內容,
因此最後再將LinkedHashSet 的內容依序塞回nums,
回傳LinkedHashSet 的長度就好。

此方法由於使用的是LinkedHashSet,是一種LinkedList,
所以在操作元素時,不用像Array需要複製陣列再進行操作,
所以占用的空間會比較小。
class Solution {
public int removeDuplicates(int[] nums) {

//Insert all array element in the Set.
//Set does not allow duplicates and sets like LinkedHashSet maintains the order of insertion so it will remove duplicates and elements will be printed in the same order in which it is inserted

LinkedHashSet<Integer> set = new LinkedHashSet<>();

for(int i = 0; i < nums.length; i++){
set.add(nums[i]);
}
//copy unique element back to array
int i = 0;

for(int ele:set){
nums[i++] = ele;
}
return set.size();
}
}
⏰ Runtime: 4 ms (10.61 %)
📦 Memory: 43.4 MB (98.88 %)

※ 關於Array和LinkedList的特性,我覺得這篇講得滿清楚的,可以參考看看 :D
為什麼會看到廣告
avatar-img
6會員
36內容數
以英文和日文歌的翻譯為主,並從「歌曲裡的故事」這個角度去翻譯。畢竟自己只有中文算好而已 :D
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Steven SHIH的沙龍 的其他內容
Merge Two Sorted Lists : 將兩個LinkedList合併成一個新的陣列,並將內容由小到大排序。
Valid Parentheses : 確認input的括號是否符合成雙成對的規則,符合回傳true,否則回傳false.
Longest Common Prefix : 回傳陣列中所有字串的最長共同前序(LCP),也就是從最前面開始依序算起,所有字串都擁有的字元。
Roman to Integer : 將羅馬數字轉換成阿拉伯數字。
Palindrome Number : 判斷x是否為迴文 ( 左到右,右到左,內容皆相同 ) ,若符合回傳true,不符合則回傳false。
Two Sum : 在Array中找出相加後與Target相同的兩個數字,並將他們的index存在新的陣列。
Merge Two Sorted Lists : 將兩個LinkedList合併成一個新的陣列,並將內容由小到大排序。
Valid Parentheses : 確認input的括號是否符合成雙成對的規則,符合回傳true,否則回傳false.
Longest Common Prefix : 回傳陣列中所有字串的最長共同前序(LCP),也就是從最前面開始依序算起,所有字串都擁有的字元。
Roman to Integer : 將羅馬數字轉換成阿拉伯數字。
Palindrome Number : 判斷x是否為迴文 ( 左到右,右到左,內容皆相同 ) ,若符合回傳true,不符合則回傳false。
Two Sum : 在Array中找出相加後與Target相同的兩個數字,並將他們的index存在新的陣列。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
【雙魚之論】 A book titled "People Will Never Forget: Democratic Movement Documentary of 1989," which provides a detailed chronological account of the move
Rust Remover 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https:
Thumbnail
每周與你分享更多【精選遠距職缺、Upwork Alerts、付費代言及哪家廠商正在進行贊助】的機會。
Thumbnail
在 UiPath 的學習道路上,我們常會對這些各項功能、參數感到混亂,因此 RPAI 數位優化器的系列文章將會對這些功能參數進行解說。這篇文章要介紹的是:Excel 資料處理常使用的 Remove Duplicates Range 功能,協助刪除指定區域中所有重複的列,保留最原始的一列資料!
Thumbnail
本文介紹了使用Azure Site Recovery service - Classic 在本地 VMware 和 Azure 之間部署災難恢復複製(disaster recovery replication )、故障轉移(failover)和恢復(recovery)時使用的架構和流程。
Thumbnail
疫情已經一年,在快速施打疫苗的國家,如美國已有許多企業開始討論如何讓員工慢慢回到辦公室上班或是調整為更彈性的 Hybrid 工作方式,在科技的助力之下,過去一年大家也漸漸適應了遠距辦公和各類活動,跟幾個合作過的美國顧問公司聊過對於回到實體教育訓練有什麼想法,確實他們已有些客戶開始詢問回到實體的時程,
Thumbnail
如我上一篇文章所提,遠距工作缺少上司、同事、辦公室隔間等外力約束,我們容易被懶惰的本性牽著走,能少做事就不會多做(可能我自己特別懶啦)。要想在缺少直接壓力的情況下,依然如期完成工作,就得確切掌握自己的節奏才行。
Thumbnail
隨著肺炎疫情持續延燒,周遭朋友陸續開始嘗試「Remote Work 遠距工作」,要說肺炎意外開啟「亞洲遠距工作元年」也不為過。然而剛開始嘗試遠距工作,一定會覺得很難專心吧!本文提供兩個實用技巧,幫助大家進入狀態。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
【雙魚之論】 A book titled "People Will Never Forget: Democratic Movement Documentary of 1989," which provides a detailed chronological account of the move
Rust Remover 市場の現状と将来展望に関する包括的な洞察を提供する、車速センサー市場2023年調査報告書がリリースされました。当レポートでは、業界の市場動向、成長促進要因、課題、機会などの詳細な分析に加え、競争環境と市場主要企業の市場シェア分析についても徹底検証しています。https:
Thumbnail
每周與你分享更多【精選遠距職缺、Upwork Alerts、付費代言及哪家廠商正在進行贊助】的機會。
Thumbnail
在 UiPath 的學習道路上,我們常會對這些各項功能、參數感到混亂,因此 RPAI 數位優化器的系列文章將會對這些功能參數進行解說。這篇文章要介紹的是:Excel 資料處理常使用的 Remove Duplicates Range 功能,協助刪除指定區域中所有重複的列,保留最原始的一列資料!
Thumbnail
本文介紹了使用Azure Site Recovery service - Classic 在本地 VMware 和 Azure 之間部署災難恢復複製(disaster recovery replication )、故障轉移(failover)和恢復(recovery)時使用的架構和流程。
Thumbnail
疫情已經一年,在快速施打疫苗的國家,如美國已有許多企業開始討論如何讓員工慢慢回到辦公室上班或是調整為更彈性的 Hybrid 工作方式,在科技的助力之下,過去一年大家也漸漸適應了遠距辦公和各類活動,跟幾個合作過的美國顧問公司聊過對於回到實體教育訓練有什麼想法,確實他們已有些客戶開始詢問回到實體的時程,
Thumbnail
如我上一篇文章所提,遠距工作缺少上司、同事、辦公室隔間等外力約束,我們容易被懶惰的本性牽著走,能少做事就不會多做(可能我自己特別懶啦)。要想在缺少直接壓力的情況下,依然如期完成工作,就得確切掌握自己的節奏才行。
Thumbnail
隨著肺炎疫情持續延燒,周遭朋友陸續開始嘗試「Remote Work 遠距工作」,要說肺炎意外開啟「亞洲遠距工作元年」也不為過。然而剛開始嘗試遠距工作,一定會覺得很難專心吧!本文提供兩個實用技巧,幫助大家進入狀態。