力扣算法学习计划打卡:第一天
704二分查找,278第一个错误版本,35搜索插入位置
二分查找
https://leetcode-cn.com/study-plan/algorithms/?progress=lv45wk7
顺序查找:
func search(nums []int, target int) int {for i:=0;i<len(nums);i++{if nums[i]==target {return i}}return -1
}
二分查找:
func search(nums []int, target int) int {left:=0right:=len(nums)-1mid:=(left+right)/2for left<=right {if nums[mid]==target {return mid}if nums[mid]<target {left=mid+1}else{right=mid-1}mid=(left+right)/2}return -1
}
第一个错误版本
从尽量减少API的次数,不难发现使用二分查找。考虑提供的isBadVersion(version) 函数,若返回真,则证明,参数之后的版本都是错误的,结果仍在参数或参数之前的版本(注:参数很可能就是第一个出错的版本,因此不能放弃),若返回假,则证明参数之前的版本都是正确的,结果在参数之后的版本
return返回left:当左右边界收缩到一点时,这一点为第一个错误的版本,若返回version,考虑存在示例2,这一特殊情况,因此选择返回left
func firstBadVersion(n int) int {var left,right,version intleft=1;right=nfor left<right{//此处的写法是防止计算溢出version=left+(right-left)/2if isBadVersion(version){right=version}else{left=version + 1}} return left
}
官方版本go解法,直接调用函数sort.Search
func Search(n int, f func(int) bool) int
Search函数采用二分法搜索找到[0, n)区间内最小的满足f(i)==true的值i。其中的第二个参数经常为闭包
func firstBadVersion(n int) int {return sort.Search(n, func(version int) bool { return isBadVersion(version) })
}
搜索插入位置
经典二分查找:考虑需要找到目标值,并返回索引,且若找不到,要按顺序插入,且根据示例1,知若相同,要在相同值之前,即修改后的数组中原相同值的位置。因此只需找到第一个大于或等于target的值的位置
func searchInsert(nums []int, target int) int {left, right := 0, len(nums) - 1for left <= right {//位运算,和除以2相同结果,加快运算速度mid := (right - left) >> 1 + leftif target <= nums[mid] {right = mid - 1} else {left = mid + 1}}return left
}
力扣算法学习计划打卡:第一天相关推荐
- 力扣算法学习计划打卡:第六天
3无重复字符的最长子串,567 字符串的排列 无重复字符的最长子串 滑动窗口/双指针 func max(a,b int)int{if a<b{return b}return a }func le ...
- 力扣算法学习计划打卡:第八天
617.合并二叉树,116.填充每个节点的下一个右侧节点指针 合并二叉树 深度优先搜索 /*** Definition for a binary tree node.* type TreeNode s ...
- 力扣算法学习计划打卡:第五天
876链表的中间结点,19删除链表的倒数第N个节点 链表的中间结点 用两个指针 slow 与 fast 一起遍历链表.slow 一次走一步,fast 一次走两步.那么当 fast 到达链表的末尾时,s ...
- 力扣算法学习计划打卡:第七天
733 图像渲染,695 岛屿的最大面积 图像渲染 广度优先搜索 var(dx = []int{1,0,-1,0}dy = []int{0,1,0,-1} ) func floodFill(image ...
- 力扣算法学习计划打卡:第二天
977有序数组的平方,排序算法复习,189轮转数组 https://leetcode-cn.com/study-plan/algorithms/?progress=lv45wk7 有序数组的平方 排序 ...
- 力扣算法学习计划打卡:第三天
283 移动零,167. 两数之和 II - 输入有序数组 移动零 不能复制数组,考虑计数0的个数,当前数组元素前存在counts个0元素,该数组元素向前移动counts个值,最后将counts个0放 ...
- 力扣算法学习计划打卡:第四天
344反转字符串,557. 反转字符串中的单词 III 反转字符串 双指针,分别指向字符数组的头和尾,交换后,两个指针同时向中间移动 func reverseString(s []byte) {for ...
- 力扣算法学习(十四)
最小路径和 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例 1: 输入:grid = ...
- 力扣算法学习(十二)
斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0,F(1) = 1 F(n) ...
最新文章
- 全球最大最干净的人脸公开训练集!格灵深瞳发布Glint360K
- Unity的对象复用
- 【转】mac os、linux及unix之间的关系
- 【Python】推荐6个好用到爆的Pycharm插件
- filezilla 设置服务器_java项目部署到linux服务器,微信小程序后台springboot项目部署到腾讯云服务器(图文详解)...
- 用生产者和消费者模式实现奇数偶数不同线程交替输出
- poj 1426 BFS
- java常量池方法区_Java方法区和运行时常量池溢出问题分析
- ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already
- 在CentOs6.5安装jdk
- Paxos在大型系统中常见的应用场景
- tomcat多实例的端口设置
- svn环境搭建 linux
- log(一)——MDC入门
- 逆向破解之160个CrackMe —— 023-024
- 面包板入门电子制作 学习笔记8
- ubuntu如何安装及卸载mysql服务详细教程-图文版
- linux内核开启otg,OTG驱动分析(一)
- 机器学习三剑客之Matplotlab
- SRAMRAMROM介绍