首頁  >  文章  >  Java  >  Leetcode — 頂尖訪談 — 刪除元素

Leetcode — 頂尖訪談 — 刪除元素

DDD
DDD原創
2024-11-03 17:36:30277瀏覽

Leetcode — Top Interview  — Remove Element

這是一個簡單的問題,包括:

給定一個整數數組 nums 和一個整數 val,就地刪除 nums 中所有出現的 val。元素的順序可以改變。然後傳回nums中不等於val的元素個數。
考慮 nums 中不等於 val 的元素數量為 k,要被接受,您需要執行以下操作:

改變陣列 nums,使 nums 的前 k 個元素包含不等於 val 的元素。 nums 的其餘元素以及 nums 的大小並不重要。
返回 k.

自訂法官:

法官將使用以下程式碼測試您的解決方案:

int[] nums = [...]; // 輸入陣列
int val = ...; // 要刪除的值
int[] 預期數量 = [...]; // 具有正確長度的預期答案。
// 排序後沒有值等於 val.
int k = removeElement(nums, val); // 呼叫您的實作
斷言 k == ExpectedNums.length;
排序(數字,0,k); // 對 nums
的前 k 個元素進行排序 for (int i = 0; i 斷言 nums[i] == ExpectedNums[i];
}

如果所有斷言都通過,那麼您的解決方案將被接受。

範例1:
輸入:nums = [3,2,2,3], val = 3
輸出:2,nums = [2,2,,]
說明:您的函數應傳回 k = 2,且 nums 的前兩個元素為 2。
除了返回的 k 之外,留下什麼並不重要(因此它們是下劃線)。

範例2:
輸入:nums = [0,1,2,2,3,0,4,2], val = 2
輸出:5,nums = [0,1,4,0​​,3,,,_]
說明:您的函數應傳回 k = 5,其中 nums 的前五個元素包含 0、0、1、3 和 4。
請注意,這五個元素可以按任意順序返回。
除了返回的 k 之外,留下什麼並不重要(因此它們是下劃線)。

限制:
0 0 0

在這個問題中,你必須迭代數組並識別值,並將其從 nums 中刪除。

乍一看你可能會認為另一個數組可以解決這個問題,但後來你將不得不進行另一次迭代來設置值(直接設置是行不通的,因為java不會更新方法變量引用,這意味著在方法內部看起來像是發生了變化,但一旦超出方法,它就會保留舊的引用),這會導致效能不佳。

由於除了不同的值之外,最終結果不依賴任何其他操作,因此可以簡單地保留索引並更新值,因為您發現它們與var 不同,並且也使用與解決方案相同的解決方案:

class Solution {
    public int removeElement(int[] nums, int val) {
        int diffIndex = 0;
        for(int i=0;i<nums.length;i++) {
            if(nums[i] != val)  {
                nums[diffIndex] = nums[i];
                diffIndex++;
            }
        }
        return diffIndex;
    }
}

運行時間:0 毫秒,比 100.00% Java 線上提交的移除元素快。
記憶體使用量:42 MB,低於 Java 線上提交的移除元素的 31.68%。

就是這樣!如果還有什麼要討論的,請隨時發表評論,如果我錯過了任何內容,請告訴我,以便我進行相應更新。

直到下一篇文章! :)

以上是Leetcode — 頂尖訪談 — 刪除元素的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn