day01

leetcode704.

二分法:在一个数组里找到一个target,判断其在不在数组里,如果在,返回该target所在的数组元素的下标,若没找到返回-1

#左闭右闭
class Solution: ## 定义了一个名为solution类(即描述一个对象的规则)
     def search(self, nums: List[int], target: int) -> int: 
# 该代码要实现一个名为search的方法,这个方法接受两个参数,nums和target,并返回一个整数值(->)
# nums 是一个整数列表(List[int] 是 Python 的类型提示语法,表示列表中应包含整数)。
# target 是一个整数,我们在这个方法中尝试在 nums 列表中查找它。
        left,right = 0,len(nums) - 1
# 这行代码是在定义两个变量,分别为left和right;这两个变量被分别初始化为0和len(nums) - 1。
# 这里的len(nums) - 1是在计算列表nums的长度(即其中的元素数量),然后减去1,以获取列表的最后一个元素的索引。因为在Python中,列表的索引是从0开始的,所以最后一个元素的索引会是总长度减1。
# 这行代码的含义是:初始化左边界为0,右边界为列表最后一个元素的索引。在二分查找等算法中,我们常常会使用这样的策略来设定查找的范围。
        where left <= right:
            middle = (left+right)//2
# 先初始化左右边界(left 和 right),然后通过不断地将搜索范围一分为二来查找目标元素。
# where left <= right是一个循环条件,它确保了只要左边界不大于右边界,循环就会继续执行。一旦左边界大于右边界,就意味着搜索范围已经缩小到了无法再缩小,此时可以返回 -1 表示没有找到目标元素。
            if nums[middle] < target:
                left = middle + 1
            elif nums[middle] > target:
                right = middle - 1
            else:
                return middle
        return -1
# 左闭右开
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left,right  =0, len(nums)
        while left < right:
            mid = (left + right) // 2
            if nums[mid] < target:
                left = mid+1
            elif nums[mid] > target:
                right = mid
            else:
                return mid
        return -1

leetcode 27.

# 双指针法

class Solution:
# 定义一个名为solution的类
    def removeElement(self, nums: List[int], val: int) -> int:
# 在solution类中定义一个名为removeelement
# 这个函数的目标是从一个整数列表nums中移除所有等于val的元素,并返回移除后的列表长度。
          fast = 0 # 快指针
          slow = 0 # 慢指针
# 分别定义两个指针,初始值都为0。fast用于遍历列表,slow用于收集不等于val的元素。
          size = len(nums)
# 获取nums列表的长度,并将其存储在变量size中。
        while fast < size:
# 使用while循环遍历列表。循环条件是fast小于size
            if nums[fast]!= val:
# 在循环内,检查当前fast指向的元素是否等于val。如果不等于,执行下一行代码。
                nums[slow] = nums[fast]
# 将当前fast指向的元素复制到slow的位置。
                slow += 1
# 将slow指针向前移动一位,以收集下一个不等于val的元素。
            fast += 1
# 将fast指针向前移动一位,以继续检查下一个元素。
        return slow
# 返回移除后的列表长度
# 暴力解题法

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        i, l = 0, len(nums)
        while i < l:
            if nums[i] == val: # 找到等于目标值的节点
                for j in range(i+1, l): # 移除该元素,并将后面元素向前平移
                    nums[j - 1] = nums[j]
                l -= 1
                i -= 1
            i += 1
        return l

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值