【LittleDuck_LeetCodeNote】27 - Remove Element

更新 發佈閱讀 9 分鐘

【Instagram】 / 【巴哈姆特小屋】 / 【Vocus方格子】 / 【Medium】
喜歡的話就按個愛心或贊助ㄅ。


raw-image

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
留言分享你的想法!
avatar-img
Steven SHIH的沙龍
7會員
36內容數
以英文和日文歌的翻譯為主,並從「歌曲裡的故事」這個角度去翻譯。畢竟自己只有中文算好而已 :D
Steven SHIH的沙龍的其他內容
2023/07/10
Find the Index of the First Occurrence in a String : 找出haystack在字串中第一次出現的index.
Thumbnail
2023/07/10
Find the Index of the First Occurrence in a String : 找出haystack在字串中第一次出現的index.
Thumbnail
2023/07/10
Remove Duplicates from Sorted Array : 將陣列中的重複值移除,並回傳陣列裡的元素總數。
Thumbnail
2023/07/10
Remove Duplicates from Sorted Array : 將陣列中的重複值移除,並回傳陣列裡的元素總數。
Thumbnail
2023/07/09
Merge Two Sorted Lists : 將兩個LinkedList合併成一個新的陣列,並將內容由小到大排序。
Thumbnail
2023/07/09
Merge Two Sorted Lists : 將兩個LinkedList合併成一個新的陣列,並將內容由小到大排序。
Thumbnail
看更多
你可能也想看
Thumbnail
週末午後,是我難得可以覓得的安靜時光,兩個孩子的午睡時段,換得一個能令人安心的專屬空間,一切吵雜拋於腦後,珍惜這個專注眼前的獨處時間。 準備好“繪製”的小物件”—選了一顆小番茄,回到書桌前,打開色鉛筆盒、攤好畫紙,展開午後畫畫的小旅程(也為自己的獨享時光沖一杯熱美式咖啡)
Thumbnail
週末午後,是我難得可以覓得的安靜時光,兩個孩子的午睡時段,換得一個能令人安心的專屬空間,一切吵雜拋於腦後,珍惜這個專注眼前的獨處時間。 準備好“繪製”的小物件”—選了一顆小番茄,回到書桌前,打開色鉛筆盒、攤好畫紙,展開午後畫畫的小旅程(也為自己的獨享時光沖一杯熱美式咖啡)
Thumbnail
嗨!大家好,我是順勢流・SHUNFOX,算是喜歡打扮成自己獨特的樣子、偶爾重保養, 也喜歡購買一些實用好物的人! 蝦皮雙12狂歡生日慶購物節就快到了,想趁這個機會回購好物一番, 順便跟大家分享我買過、想買哪些物品~不藏私,好東西值得跟大家共享❤️ 🌊順の雙12必買清單公開! 🌹
Thumbnail
嗨!大家好,我是順勢流・SHUNFOX,算是喜歡打扮成自己獨特的樣子、偶爾重保養, 也喜歡購買一些實用好物的人! 蝦皮雙12狂歡生日慶購物節就快到了,想趁這個機會回購好物一番, 順便跟大家分享我買過、想買哪些物品~不藏私,好東西值得跟大家共享❤️ 🌊順の雙12必買清單公開! 🌹
Thumbnail
題目敘述 題目會給我們一個輸入整數陣列arr,和一個初始化的刪除次數k? 我們可以任意選擇從arr中刪除k個陣列元素,請問最後留下來的數字,最少會有幾個不同的數字? 註: 最後不同的數字越少越好。 題目的原文敘述 測試範例 Example 1: Input: arr = [5,5
Thumbnail
題目敘述 題目會給我們一個輸入整數陣列arr,和一個初始化的刪除次數k? 我們可以任意選擇從arr中刪除k個陣列元素,請問最後留下來的數字,最少會有幾個不同的數字? 註: 最後不同的數字越少越好。 題目的原文敘述 測試範例 Example 1: Input: arr = [5,5
Thumbnail
題目 : 27. Remove Element
Thumbnail
題目 : 27. Remove Element
Thumbnail
雖然表面是一道移除元素的題目,但實際上考的還是搬移。 題目要求的是把val目標值移除,等價於 把非目標值的搬到前面,並且回傳這些剩下來的元素個數(也就是 陣列裡面,非目標值的元素總數​)。 請看下方範例,會更好理解。
Thumbnail
雖然表面是一道移除元素的題目,但實際上考的還是搬移。 題目要求的是把val目標值移除,等價於 把非目標值的搬到前面,並且回傳這些剩下來的元素個數(也就是 陣列裡面,非目標值的元素總數​)。 請看下方範例,會更好理解。
Thumbnail
這題就是經典的考排序驗算法, 不管在教科書、上機考、面試白板題都是一個很基本又滿熱門的題目。 題目會給定一個輸入陣列,要求我們實作一個排序演算法,把陣列元素從小到大排好。
Thumbnail
這題就是經典的考排序驗算法, 不管在教科書、上機考、面試白板題都是一個很基本又滿熱門的題目。 題目會給定一個輸入陣列,要求我們實作一個排序演算法,把陣列元素從小到大排好。
Thumbnail
Remove Element : 在陣列中刪除val後,回傳剩餘的元素個數。
Thumbnail
Remove Element : 在陣列中刪除val後,回傳剩餘的元素個數。
Thumbnail
Remove Duplicates from Sorted Array : 將陣列中的重複值移除,並回傳陣列裡的元素總數。
Thumbnail
Remove Duplicates from Sorted Array : 將陣列中的重複值移除,並回傳陣列裡的元素總數。
Thumbnail
Valid Parentheses : 確認input的括號是否符合成雙成對的規則,符合回傳true,否則回傳false.
Thumbnail
Valid Parentheses : 確認input的括號是否符合成雙成對的規則,符合回傳true,否則回傳false.
Thumbnail
Two Sum : 在Array中找出相加後與Target相同的兩個數字,並將他們的index存在新的陣列。
Thumbnail
Two Sum : 在Array中找出相加後與Target相同的兩個數字,並將他們的index存在新的陣列。
Thumbnail
Hi. I'm coding dog. Let's solve today's coding interview problem. Q: 給定一個整數陣列,請在線性時間和常數空間中找到第一個遺失的正整數。換句話說,找到陣列中不存在的最小正整數。陣列也可以包含重複項和負數。 A: 為了找到給定陣列中不
Thumbnail
Hi. I'm coding dog. Let's solve today's coding interview problem. Q: 給定一個整數陣列,請在線性時間和常數空間中找到第一個遺失的正整數。換句話說,找到陣列中不存在的最小正整數。陣列也可以包含重複項和負數。 A: 為了找到給定陣列中不
Thumbnail
題目要求如下: Input: nums = [0,1,0,3,12] Output: [1,3,12,0,0] 把0都搬到後面去,非0的數字移到前面,且不更改原本數字的大小順序。
Thumbnail
題目要求如下: Input: nums = [0,1,0,3,12] Output: [1,3,12,0,0] 把0都搬到後面去,非0的數字移到前面,且不更改原本數字的大小順序。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News