leetcode-EP1

ooowl
  • 刷算法
  • leetcode
About 1 min

leetcode-EP1

leetcode-EP1

二分查找

分类

leetcode题号: 704. 二分查找 代码随想录视频链接open in new window 时间:37min

代码

Click to see more
def search(nums, target: int) -> int:  
    result = -1  
    right = len(nums) - 1  
    left = 0  
    middle = int(right / 2)  
    while True:  
        if left == right:  
            if target == nums[middle]:  
                result = middle  
            break  
        if target == nums[middle]:  
            result = middle  
            break  
        elif target > nums[middle]:  
            left = middle + 1  
            middle = int((left + right) / 2)  
        elif target < nums[middle]:  
            if middle==left: # 处理边界条件,例如两个元素,为什右边不会有这个情况  
                right = middle  
            else:  
                right = middle - 1  
            middle = int((left + right) / 2)  
    return result  
  
if __name__ == '__main__':  
    print(search([2,3,4,5,6],7))

运行结果

PASS 44ms

注意的点:

  • 注意边界条件开闭情况,一般是左闭右开或左闭右闭,在中间处理的时候也遵循这个
  • 二分要在有序序列中查找
  • 其他:None

删除元素

分类

leetcode题号:27 代码随想录视频链接open in new window 时间:45min

代码

Click to see more


    def removeElement(self, nums: List[int], val: int) -> int:  
    '''
    双指针法
    '''
        f=0
        s=0

        while (f<=len(nums)-1):
            if nums[f]==val:
                f+=1
                continue
            else:
                nums[s]=nums[f]
                f+=1
                s+=1
        return len(nums[:s])

    def removeElement(self, nums: List[int], val: int) -> int:  
    ‘‘‘
    暴力移除
    '''
        i = 0
        while (i < len(nums)):
            if nums[i] == val:
                for j in range(i, len(nums) - 1):
                    nums[j] = nums[j + 1]
                del(nums[-1])
            else:
                i += 1
        return len(nums)

运行结果

PASS

注意的点:

  • 主要就是处理边界条件,双指针fast一直拿最新的数据,slow就管着存,注意最后一个元素和重复元素的处理
  • 其他:None
Loading...