代码随想录算法训练营第一天|704.二分查找,27.移除元素

#左闭右开
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        l=len(nums)
        left=0
        right=l
        if left==0 and nums[0]==target:
            return 0
        while left < right:
            middle=(left+right)//2
            if target>nums[middle]:
                left=middle+1
            elif target<nums[middle]:
                right=middle
            else:
                return middle
        return -1

和左闭右闭时不同,这里的right应该是len(nums),而不是len(nums)-1,因为在左闭右开时,左区间的右端点为右区间的左端点,而且这样能保证left<right.

#左右指针错误解法
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        l=len(nums)
        left=0
        right=l-1
        if right==0 and nums[left]==val:
            return 0
        elif right==0 and nums[left]!=val:
            return 1
        while left<right:
            while nums[right]==val:
                right -=1
                if right<left:
                    return left+1
            while nums[left]!=val:
                left+=1
            nums[left],nums[right]=nums[right],nums[left]
            left+=1
            right-=1
        return left+1
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        l=len(nums)
        left=0
        right=l-1
  
        while left<=right:
            while left<=right and nums[right]==val:
                right -=1
            while left <=right and nums[left]!=val:
                left+=1
            if left<right:
                nums[left]=nums[right]
                left+=1
                right-=1

        return left

在while中加上if判断条件是为了防止出现[2,2,2],val=2的情况.

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务