【LittleDuck_LeetCodeNote】27 - Remove Element

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

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 and an integer val, remove all occurrences of val in nums in-place. The order of the elements may be changed. Then return the number of elements in nums which are not equal to val.
Consider the number of elements in nums which are not equal to val 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 elements which are not equal to val. 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 val = ...; // Value to remove
int[] expectedNums = [...]; // The expected answer with correct length.
// It is sorted with no values equaling val.

int k = removeElement(nums, val); // Calls your implementation

assert k == expectedNums.length;
sort(nums, 0, k); // Sort the first k elements of nums
for (int i = 0; i < actualLength; i++) {
assert nums[i] == expectedNums[i];
}
If all assertions pass, then your solution will be accepted.
Example 1:
Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 2.
It does not matter what you leave beyond the returned k (hence they are underscores).
Example 2:
Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4.
Note that the five elements can be returned in any order.
It does not matter what you leave beyond the returned k (hence they are underscores).
Constraints:
  • 0 <= nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= val <= 100

First Solution

💡 這題的思路是參考Quick Sort的作法:兩個索引 i 和 j,
i 從前面往後數尋找應該刪除的值,
j 從後面往前數尋找未被刪除的值,
將所有與val相同的值丟到陣列後面,
最後從頭檢查,直到發現val為止,
如此就能得到新的陣列與長度。
class Solution {
public int removeElement(int[] nums, int val) {
// except: nums.len<2
if(nums.length == 0 || nums.length == 1 && nums[0] == val)
return 0;

int i=0, j=nums.length-1;
int temp;

while(i < j){
if(nums[i] == val){
while(i < j && nums[j] == val){
j--;
if(i >= j)
return i;
if(j <= -1)
return 0;
}
temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
j--;
}
i++;
}

int k = 1;
for(; k<nums.length; k++){
if(nums[k] == val)
break;
}

return k;
}
}
⏰ Runtime: 0 ms (100 %)
📦 Memory: 40.7 MB (97.78 %)

Upgrade Solution

💡 思路是相似的,只是它在index的用途不同:
兩個index都是由前往後數,
i 負責尋找未被刪除的值,
j 負責尋找應該刪除的值,
然後不做交換,而是直接取代裡面的值。

可以換個角度想像兩個索引的工作:
i 往前尋找新陣列的值,
j 鎖定在新陣列的最尾端,
一旦 i 找到值,就從陣列最尾端塞進去。
class Solution {
public int removeElement(int[] nums, int val) {
int j=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=val){
nums[j++]=nums[i];
}
}
return j;
}
}
⏰ Runtime: 0 ms (100 %)
📦 Memory: 40.2 MB (100 %)
為什麼會看到廣告
avatar-img
6會員
36內容數
以英文和日文歌的翻譯為主,並從「歌曲裡的故事」這個角度去翻譯。畢竟自己只有中文算好而已 :D
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Steven SHIH的沙龍 的其他內容
Remove Duplicates from Sorted Array : 將陣列中的重複值移除,並回傳陣列裡的元素總數。
Merge Two Sorted Lists : 將兩個LinkedList合併成一個新的陣列,並將內容由小到大排序。
Valid Parentheses : 確認input的括號是否符合成雙成對的規則,符合回傳true,否則回傳false.
Longest Common Prefix : 回傳陣列中所有字串的最長共同前序(LCP),也就是從最前面開始依序算起,所有字串都擁有的字元。
Roman to Integer : 將羅馬數字轉換成阿拉伯數字。
Palindrome Number : 判斷x是否為迴文 ( 左到右,右到左,內容皆相同 ) ,若符合回傳true,不符合則回傳false。
Remove Duplicates from Sorted Array : 將陣列中的重複值移除,並回傳陣列裡的元素總數。
Merge Two Sorted Lists : 將兩個LinkedList合併成一個新的陣列,並將內容由小到大排序。
Valid Parentheses : 確認input的括號是否符合成雙成對的規則,符合回傳true,否則回傳false.
Longest Common Prefix : 回傳陣列中所有字串的最長共同前序(LCP),也就是從最前面開始依序算起,所有字串都擁有的字元。
Roman to Integer : 將羅馬數字轉換成阿拉伯數字。
Palindrome Number : 判斷x是否為迴文 ( 左到右,右到左,內容皆相同 ) ,若符合回傳true,不符合則回傳false。
你可能也想看
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 遠距工作」,要說肺炎意外開啟「亞洲遠距工作元年」也不為過。然而剛開始嘗試遠距工作,一定會覺得很難專心吧!本文提供兩個實用技巧,幫助大家進入狀態。