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

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

leetcode704. 二分查找

代码思路

此处我们先给出左边界的索引和右边界的索引用来确定中点的索引,然后判断中点与target是否相等,如果相等,则返回该索引值,如果不相等,则左边界变为往中点左移1,或者右边界变为往中点右移1。

# 代码如下
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        length = len(nums)
        left = 0  # 初始化左边边界的坐标
        right = length - 1  # 初始化右边边界的坐标
        while left <= right:
            mid = left + (right - left + 1) // 2  # 确定中间点的坐标
            if nums[mid] == target:
                return mid
            elif nums[mid] > target:
                right = mid - 1
            else:
                left = mid + 1
        return -1

注意问题

  1. 此处用到了整除符号"//",计算结果为向下取整,例如5//2=2,1//2=0。

leetcode27. 移除元素

代码思路

非常简洁的代码哈哈。n代表处理的总次数,flag代表删除一个元素后,由于index会发生改变,即后面的元素会往前移一格。这里记录更新后下一个元素的索引。

# 代码如下
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        origin_length = len(nums)
        n = 0
        flag = 0
        while n < origin_length:
            if nums[flag] == val:
                del nums[flag]
                flag -= 1  # 删除元素后,后面的元素会往前移动一格。
            n += 1
            flag += 1
        return len(nums)

你可能感兴趣的:(算法,leetcode,职场和发展)