這是一個簡單的問題,包括:
給定一個整數數組 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中文網其他相關文章!