leetcode二分法
文章平均质量分 58
岗岗ganggang
这个作者很懒,什么都没留下…
展开
-
leetcode 26. 删除有序数组中的重复项 python
题目描述:题解一:采用双指针方法:1.left初始化为0,right初始化为1。2.依次判断nums[left]与nums[right]是否相等,如果相等则移除nums[right]。3.left=right right=left进入下一组判断。class Solution(object): def removeDuplicates(self, nums): left = 0 right = left+1 while r.原创 2021-09-29 11:19:53 · 141 阅读 · 0 评论 -
leetcode 278. 第一个错误的版本 python
题目描述:题解:还是典型二分需要注意的是,题目中的bool isBadVersion(version)返回的true和false不代表当前版本version是否正确,恰好相反,返回true表示当前版本错误,返回false表示当前版本正确。因此,第一个错误版本i应该满足:<1>isBadVersion(i)==true<2>isBadVersion(i-1)==falseisBadVersion(i)==true且isBadVersion(i-1)==t..原创 2021-09-26 17:18:26 · 145 阅读 · 0 评论 -
leetcode 704. 二分查找 python
题目描述:题解:典型的二分法~class Solution(object): def search(self, nums, target): left = 0 right = len(nums)-1 if len(nums)==0: return -1 if len(nums)==1: if nums[0]==target:return 0 else:原创 2021-09-26 16:51:23 · 61 阅读 · 0 评论 -
leetcode 162. 寻找峰值 python
题目描述:题解一:题目规定对于所有有效的i都有nums[i] != nums[i + 1],即所有相邻的元素都不会相等,因此nums数组中的最大值必然为峰值,返回最大值的下标。class Solution(object): def findPeakElement(self, nums): nums2 = sorted(nums) return nums.index(nums2[-1])题解二:二分法一个有极大值点的函数图像如下,如果...原创 2021-09-26 16:39:29 · 542 阅读 · 0 评论 -
leetcode33. 搜索旋转排序数组
题目描述:题解:1.根据时间复杂度要求确定采用二分法。2.首先应该确定旋转点位置,旋转点之前和之后的两段数组均有序。3.找到旋转点之后,在前后两端分别再用二分法查找target。更简单的方法是:先判断target会出现在旋转点之前还是之后的数组,只在一段数组内进行二分查找。class Solution(object): def search(self, nums, target): if len(nums)==1: if nums[0原创 2021-07-22 11:26:45 · 65 阅读 · 0 评论 -
leetcode34. 在排序数组中查找元素的第一个和最后一个位置
题目描述:题解:1.用一个list保存最终返回结果,res1记录target出现的第一个位置,res2记录最后一个位置。2.先采用二分法寻找target所在位置记录为pos。3.将pos赋值给res1 res2,res1不断左移,寻找target第一个出现的位置,res2右移,找到最后一个target位置。class Solution(object): def searchRange(self, nums, target): if len(nums)==0.原创 2021-07-21 20:30:32 · 72 阅读 · 0 评论 -
leetcode69. x 的平方根
题目描述:题解:1.采用二分法,x的平方根除1和0外,在[1,x/2]之间。2.首先考虑x=0和1的特殊情况。3.对其他x的取值,初始化left=1,right=x//2,然后不断二分,mid=(left+right)//2,首先判断left right mid三个取值的平方是否等于x,等于则直接返回。否则判断mid的平方与x的关系,如果大于x,则取小的区间,right=mid-1,否则取较大的区间left=mid+1。4.因为需要直接舍弃小数字段,对最后的mid进行判断,如果mid原创 2021-07-21 16:21:31 · 114 阅读 · 0 评论 -
leetcode35. 搜索插入位置
题目描述:题解:根据时间复杂度要求采用二分法1.初始left=0 right=len(nums)-12.因为要确定target是否存在在nums,若存在则返回其下标,否则返回插入位置。nums为有序序列,若target<nums[0]即target需要插入在nums最前面位置,若target>nums[right],则target插入位置为最后一个。3.while left<=right: 判断target是否与nums[left] nums[right]相..原创 2021-07-20 21:38:56 · 112 阅读 · 0 评论