刷题日记-Day1- Leedcode-704. 二分查找,27. 移除元素-Python实现

2024-05-25 19:13:38 浏览数 (1)

704 二分查找

链接:https://leetcode.cn/problems/binary-search/description/

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

思路:二分,关键点在于边界条件处理,此处使用left<=right ,原因是我们在区间【Left,Right】之间查找,left==right是有意义的,除此之外,判断分支后直接去掉mid,变为mid-1和mid 1,同样保证左闭右闭区间。

代码语言:javascript复制
### Python实现
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left = 0
        right = len(nums) - 1
        ## 注意是小于等于
        while left <= right:
            mid = (left   right) //2  ## 整除   
            if nums[mid] < target:
                left = mid 1
            elif nums[mid] > target:
                right = mid-1
            else:
                return mid
        return -1

27 移除元素

链接:https://leetcode.cn/problems/remove-element/description/

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

思路:双指针(快慢指针)设置左指针和右指针,最开始都在初始化的0位置,其中右指针在前’‘探路’',遇到非目标值的,则将该值赋值给左指针位置,同时左右指针均右移动一位,如果遇到目标值,则右指针右移,左指针不动,最终结果是左指针左边的数字即为移除完所有目标值的数组。 Python实现:

代码语言:javascript复制
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        l ,r = 0, 0
        for r, x in enumerate(nums):
            if x != val:
                nums[l] = x
                l  = 1
        return l

0 人点赞