요소 제거

#27.요소 제거

문제 설명



정수 배열 nums 및 정수 val 가 주어지면 val 내부에서 nums 의 모든 항목을 제거합니다. 요소의 상대적인 순서는 변경될 수 있습니다.

일부 언어에서는 배열의 길이를 변경할 수 없기 때문에 결과를 배열의 첫 번째 부분에 배치해야 합니다nums. 더 공식적으로, 중복을 제거한 후 k 요소가 있는 경우 k의 첫 번째 nums 요소가 최종 결과를 보유해야 합니다. 첫 번째k 요소 외에 무엇을 남기는지는 중요하지 않습니다.

최종 결과를 k의 첫 번째k 슬롯에 배치한 후 nums를 반환합니다.

다른 어레이에 추가 공간을 할당하지 마십시오. O(1) 추가 메모리를 사용하여 입력 배열을 제자리에서 수정하여 이를 수행해야 합니다.

커스텀 심사위원:

심사위원은 다음 코드를 사용하여 솔루션을 테스트합니다.

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];
}


모든 어설션이 통과되면 솔루션이 수락됩니다.

예 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).


예 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).


설명



給定一個整數陣列 nums 和整數 val ,我們必須就地刪除在 nums 內出現的 val 元素,使得每個元素只出現一次,而元素對應的順序需保持不變,返回剩餘元素的數量(經由測試,我猜測應該是返回剩餘元素數量,如果有誤還請告知)

限制 限制 能 能 只 額外 o (1) 的 記憶體 空間 空間 空間 空間 空間 空間 另外 另外 另外 因為 某些 某些 語言 語言 宣告 陣列 後 無法 改變 其 長度 長度 長度 長度 長度 長度 所以 部分 部分 部分 部分 部分 部分 部分 部分 陣列 後 後 半段 非 結果 的 的 部分 部分 部分 段 段 段不會檢查,可任意留下任何值,題目也附上如何檢查陣列的程式碼,它僅僅只檢查到我們要返回的結果值以前的元素

해결책



只是刪除特定元素很簡單,不過題目限制只能使用 O(1) 的額外空間,不能額外建立一個陣列來儲存元素,那麼只能直接遍歷題目給的陣列,並改變其陣列內的值,建立一個res 變數來計數剩餘元素個數

使用 使用 將 將 nums[i]val 比較 值 是否 是否 相同 相同 相同 相同 相同 相同 就 將 陣列 陣列 陣列 陣列 i 索引 的 值指 值指 給 res 索引 的 位置 位置 位置 位置 位置 此 來 來 來 移動 移動 陣列內 元素 元素 相同 相同 相同 相同 相同 相同 相同 相同 相同 相同 相同則繼續迴圈,最後返回 res
public int RemoveElement(int[] nums, int val)
{
    int res = 0;

    for (int i = 0; i < nums.Length; i++)
    {
        if (nums[i] != val)
        {
            nums[res] = nums[i];
            res++;
        }
    }

    return res;
}


참조



LeetCode Solution

GitHub Repository


글 읽어주셔서 감사합니다 🌷 🌻 🌼

마음에 드셨다면 주저말고 하트 꾸욱 눌러주세요❤️
또는 내 Leetcode 솔루션에서 좋아요를 클릭하세요.
또는 내 GitHub ⭐ 팔로우
또는 커피를 사주세요 ⬇️ 감사합니다.

좋은 웹페이지 즐겨찾기