Gsupl.落浅~zbxGsupl.落浅~

01:56:05 AM

哥伦布

13°

LeetCode算法—二分查找

Gsupl.落浅·2024-09-11 17:08·12 次阅读

LeetCode算法—二分查找

一:二分查找法

1、二分法核心语句

Copy
nums=[] left,right=0,len(nums)-1 while left<=right:#根据具体题目判断是否有相等的情况 mid=(left+right)//2 if num[mid]<target: left=mid+1 elif nums[mid]>target: right=mid-1 else: return mid

二:LeetCode

35搜索插入的位置

(1)思路:定义三个指针left,right,mid;进入while:当left和right指针交换位置说明数组遍历完了;当mid索引对应的元素小于目标值;left=mid+1;反之right=mid-1;为什么这样自己好好看看数据结构

Copy
class Solution: def searchInsert(self, nums, target: int) -> int: left,right=0,len(nums)-1 while left<=right: mid=(left+right)//2 if nums[mid]==target: return mid elif nums[mid]<target: left=mid+1 elif nums[mid]>target: right=mid-1 return left

74 搜索二维矩阵

(1)思路1:将二维列表转化为1为列表;然后直接判断目标值是否在列表当中;如果在返回True,反之false

(2)思路2:将二维列表中所有元素放到新的一维列表当中;然后使用二分法进行查找(此处不考虑排序问题)

Copy
#方法1 暴力解法 class Solution: def searchMatrix(self, matrix, target: int) -> bool: list=[] for i in matrix: if target in i: return True return False #方法2 二分查找 class Solution: def searchMatrix(self, matrix, target: int) -> bool: list=[] for i in matrix: for j in i: list.append(j) left,right=0,len(list)-1 while left<=right: mid=(left+right)//2 if list[mid]<target: left=mid+1 elif list[mid]>target: right=mid-1 else: return True return False

162 寻找峰值

(1)思路1:简单的二分查找;关键要读懂题目:考验你数学的功底的时候了

(2)思路2:暴力解法通杀一切;只要不超时!

Copy
#方法1 二分查找 class Solution: def findPeakElement(self, nums) -> int: left, right = 0, len(nums) - 1 while left < right: mid = (left + right) // 2 if nums[mid] > nums[mid + 1]: # 峰值在左侧,包括mid right = mid else: # 峰值在右侧,不包括mid left = mid + 1 return left #方法2 暴力解法 def func(nums): for i in range(1,len(nums-1)): if nums[i]<nums[i-1] and nums[i]>nums[i+1]: return i #判断数组两边的元素 if nums[0]>nums[i]: return 0 if nums[-1]>nums[-2]: return len(nums)-1

704 二分查找

Copy
class Solution: def search(self, nums, target: int) -> int: left, right = 0, len(nums) - 1 while left <= right: mid = (left + right) // 2 # 计算mid的过程必须放到while循环里面;当两个指针交换位置的时候说明数组所有元素查找完毕;结束循环 if nums[mid] == target: return mid elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return -1 # 如果未找到目标值,返回 -1
posted @   Gsupl.落浅~  阅读(12)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示

目录导航

一:二分查找法
二:LeetCode