秋招算法备战第1天 | 数组理论基础、704. 二分查找、27. 移除元素

前言

之前曾报名过“代码随想录算法训练营十一期”,总共60天,坚持到第30天,基本涉及到了大部分的题型,包括数组、链表、哈希表、字符串、栈与队列、二叉树和回溯算法。动态规划自己之前单独刷过专题,也算了解基本的方法。贪心算法和单调栈了解的不多,这次补上。

现在马上要面临秋招,又重新报名了卡哥的代码随想录算法训练营,没想到都开到第十七期了。希望跟着这次算法训练营的进度,复习之前刷过的内容,查漏补缺,备战秋招!

代码随想录

主要是两个重点:

  1. 数组下标都是从0开始的
  2. 数组内存空间的地址是连续的

704. 二分查找 - 力扣(LeetCode)

一次AC,整体还是比较顺畅的,主要是明确自己用的是“左闭右开”还是“左闭右闭”

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        l = 0
        r = len(nums)
        index = -1

        # 左闭右开写法
        while l < r:
            mid = (l+r) // 2
            if nums[mid] == target:
                index = mid
                break
            elif nums[mid] > target:
                r = mid
            else:
                l = mid + 1
        
        return index

27. 移除元素 - 力扣(LeetCode)

使用快慢指针一次AC

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        slow = 0

        for fast in range(len(nums)):
            if nums[fast] != val:
                nums[slow] = nums[fast]
                slow += 1
        
        return slow

总结

  1. 万事开头难,打好了头阵,后面继续加油
  2. 二分法和快慢指针基本还记得,夸夸自己
  3. 乘以二以及除以二可以用位移运算,乘以二是<<1,除以二是>>1

附录

代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素_小蛙先森的博客-CSDN博客

你可能感兴趣的:(算法)