LeetCode27.็งป้™คๅ…ƒ็ด ๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ็ฎ€ๅ•

้—ฎ้ข˜ๆ่ฟฐ

ๅŽŸๆ–‡้“พๆŽฅ็œ‹่ฟ™้‡Œ๏ผš27. ็งป้™คๅ…ƒ็ด 

็ป™ไฝ ไธ€ไธชๆ•ฐ็ป„ nums ๅ’Œไธ€ไธชๅ€ผ val๏ผŒไฝ ้œ€่ฆ ๅŽŸๅœฐ ็งป้™คๆ‰€ๆœ‰ๆ•ฐๅ€ผ็ญ‰ไบŽ val ็š„ๅ…ƒ็ด ๏ผŒๅนถ่ฟ”ๅ›ž็งป้™คๅŽๆ•ฐ็ป„็š„ๆ–ฐ้•ฟๅบฆใ€‚

ไธ่ฆไฝฟ็”จ้ขๅค–็š„ๆ•ฐ็ป„็ฉบ้—ด๏ผŒไฝ ๅฟ…้กปไป…ไฝฟ็”จ O(1) ้ขๅค–็ฉบ้—ดๅนถ ๅŽŸๅœฐไฟฎๆ”น่พ“ๅ…ฅๆ•ฐ็ป„ใ€‚

ๅ…ƒ็ด ็š„้กบๅบๅฏไปฅๆ”นๅ˜ใ€‚ไฝ ไธ้œ€่ฆ่€ƒ่™‘ๆ•ฐ็ป„ไธญ่ถ…ๅ‡บๆ–ฐ้•ฟๅบฆๅŽ้ข็š„ๅ…ƒ็ด ใ€‚

่ฏดๆ˜Ž:

ไธบไป€ไนˆ่ฟ”ๅ›žๆ•ฐๅ€ผๆ˜ฏๆ•ดๆ•ฐ๏ผŒไฝ†่พ“ๅ‡บ็š„็ญ”ๆกˆๆ˜ฏๆ•ฐ็ป„ๅ‘ข?

่ฏทๆณจๆ„๏ผŒ่พ“ๅ…ฅๆ•ฐ็ป„ๆ˜ฏไปฅใ€Œๅผ•็”จใ€ๆ–นๅผไผ ้€’็š„๏ผŒ่ฟ™ๆ„ๅ‘ณ็€ๅœจๅ‡ฝๆ•ฐ้‡Œไฟฎๆ”น่พ“ๅ…ฅๆ•ฐ็ป„ๅฏนไบŽ่ฐƒ็”จ่€…ๆ˜ฏๅฏ่ง็š„ใ€‚

ไฝ ๅฏไปฅๆƒณ่ฑกๅ†…้ƒจๆ“ไฝœๅฆ‚ไธ‹:

// nums ๆ˜ฏไปฅโ€œๅผ•็”จโ€ๆ–นๅผไผ ้€’็š„ใ€‚ไนŸๅฐฑๆ˜ฏ่ฏด๏ผŒไธๅฏนๅฎžๅ‚ไฝœไปปไฝ•ๆ‹ท่ด
int len = removeElement(nums, val);

// ๅœจๅ‡ฝๆ•ฐ้‡Œไฟฎๆ”น่พ“ๅ…ฅๆ•ฐ็ป„ๅฏนไบŽ่ฐƒ็”จ่€…ๆ˜ฏๅฏ่ง็š„ใ€‚
// ๆ นๆฎไฝ ็š„ๅ‡ฝๆ•ฐ่ฟ”ๅ›ž็š„้•ฟๅบฆ, ๅฎƒไผšๆ‰“ๅฐๅ‡บๆ•ฐ็ป„ไธญ ่ฏฅ้•ฟๅบฆ่Œƒๅ›ดๅ†… ็š„ๆ‰€ๆœ‰ๅ…ƒ็ด ใ€‚
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

็คบไพ‹ 1๏ผš

่พ“ๅ…ฅ๏ผšnums = [3,2,2,3], val = 3
่พ“ๅ‡บ๏ผš2, nums = [2,2]
่งฃ้‡Š๏ผšๅ‡ฝๆ•ฐๅบ”่ฏฅ่ฟ”ๅ›žๆ–ฐ็š„้•ฟๅบฆ 2, ๅนถไธ” nums ไธญ็š„ๅ‰ไธคไธชๅ…ƒ็ด ๅ‡ไธบ 2ใ€‚ไฝ ไธ้œ€่ฆ่€ƒ่™‘ๆ•ฐ็ป„ไธญ่ถ…ๅ‡บๆ–ฐ้•ฟๅบฆๅŽ้ข็š„ๅ…ƒ็ด ใ€‚ไพ‹ๅฆ‚๏ผŒๅ‡ฝๆ•ฐ่ฟ”ๅ›ž็š„ๆ–ฐ้•ฟๅบฆไธบ 2 ๏ผŒ่€Œ nums = [2,2,3,3] ๆˆ– nums = [2,2,0,0]๏ผŒไนŸไผš่ขซ่ง†ไฝœๆญฃ็กฎ็ญ”ๆกˆใ€‚

็คบไพ‹ 2๏ผš

่พ“ๅ…ฅ๏ผšnums = [0,1,2,2,3,0,4,2], val = 2
่พ“ๅ‡บ๏ผš5, nums = [0,1,4,0,3]
่งฃ้‡Š๏ผšๅ‡ฝๆ•ฐๅบ”่ฏฅ่ฟ”ๅ›žๆ–ฐ็š„้•ฟๅบฆ 5, ๅนถไธ” nums ไธญ็š„ๅ‰ไบ”ไธชๅ…ƒ็ด ไธบ 0, 1, 3, 0, 4ใ€‚ๆณจๆ„่ฟ™ไบ”ไธชๅ…ƒ็ด ๅฏไธบไปปๆ„้กบๅบใ€‚ไฝ ไธ้œ€่ฆ่€ƒ่™‘ๆ•ฐ็ป„ไธญ่ถ…ๅ‡บๆ–ฐ้•ฟๅบฆๅŽ้ข็š„ๅ…ƒ็ด ใ€‚

ๆ็คบ๏ผš

  • 0 <= nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= val <= 100

ไปฃ็ 

Java

    public int removeElement(int[] nums, int val) {
        if(nums == null || nums.length < 1){
            return 0;
        }
        int l = 0;
        int r = nums.length - 1;
        while(l <= r){
            if(nums[l] == val){
                //ไบคๆข
                int temp = nums[l];
                nums[l] = nums[r];
                nums[r] = temp;
                r--;
            }else{
                l++;
            }
        }
        return l;
    }

Python

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        if not nums:
            return 0
        l = 0
        r = len(nums) - 1
        while l <= r:
            if nums[l] == val:
                nums[l], nums[r] = nums[r], nums[l]
                r -= 1
            else:
                l += 1
        return l

C++

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        if(nums.empty()) return 0;  // ๅฆ‚ๆžœnumsไธบ็ฉบ๏ผŒ่ฟ”ๅ›ž0
        int l = 0;
        int r = nums.size() - 1;
        while(l <= r){
            if(nums[l] == val){
                // ไบคๆขnums[l]ๅ’Œnums[r]
                int temp = nums[l];
                nums[l] = nums[r];
                nums[r] = temp;
                r--;
            } else {
                l++;
            }
        }
        return l;
    }
};

Go

func removeElement(nums []int, val int) int {
    if nums == nil || len(nums) == 0 {
        return 0
    }
    l, r := 0, len(nums)-1
    for l <= r {
        if nums[l] == val {
            nums[l], nums[r] = nums[r], nums[l] // ไบคๆข
            r--
        } else {
            l++
        }
    }
    return l
}

ๅ‘่กจ่ฏ„่ฎบ

ๅŽๆ‰่ƒฝ่ฏ„่ฎบ