Leetcode33. 搜索旋转排序数组 题目:

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。

你可以假设数组中不存在重复的元素。

你的算法时间复杂度必须是 O(log n) 级别。

示例 1:

输入: nums = [4,5,6,7,0,1,2], target = 0
输出: 4

示例2:

输入: nums = [4,5,6,7,0,1,2], target = 3
输出: -1

思路(二分查找):

  1. 首先定义两个游标,分别为数组的开始start和结尾end,再定义一个游标mid为开始和结尾之和除以2;
  2. 由题可知,输入的数组在预先未知的某个点上进行了旋转,所以就会出现两种类型,即mid左侧是顺序递增的和mid右侧是顺序递增的。所以需要分两种情况进行讨论;
  3. 首先是mid左边顺序递增,此时判断给定的target处在mid的左侧还是右侧,若在左侧,则使end = mid-1,若在右侧则使start = mid+1;继续循环,直到找到target所在的位置。
  4. mid右侧顺序递增时,同第3步的操作,只是判断依据不同。
  5. 找到target所在的下标,并返回,完成输出。

Java AC代码:

public class Leetcode33 {static int search(int[] nums, int target) {if (nums.length == 0 || nums == null) {return -1;}int start = 0;int end = nums.length - 1;int mid;while (start <= end) {mid = (start + end) / 2;if (nums[mid] == target) {return mid;}if (nums[start] <= nums[mid]) {if (target >= nums[start] && target <= nums[mid]) {end = mid - 1;} else {start = mid + 1;}} else {if (target <= nums[end] && target >= nums[mid]) {start = mid + 1;} else {end = mid - 1;}}}return -1;}public static void main(String[] args) {System.out.println(search(new int[]{4, 5, 6, 7, 0, 1, 2}, 0));}
}

2020.4.27打卡

Rayman的绝顶之路——Leetcode每日一题打卡13相关推荐

  1. LeetCode每日一题打卡组队监督!刷题群!

    近 2000 人已经加入共同刷题啦! 群友每天都会在群里给大家讲解算法题 每周日「负雪明烛」组织直播讲题 我相信来看我博客的大部分人都是通过LeetCode刷题过来的.最近发现LeetCode中文网站 ...

  2. 关于LeetCode每日一题打卡失败的感悟

    背景 今年5月,报名参加了三叶姐的"五月打卡活动",押金29.9元,要求每天在力扣上每日一题打卡,完成则押金全退,完不成则押金不退. 事件 2022.5.10,LeetCode上的 ...

  3. Leetcode每日一题(914. 卡牌分组)

    914. 卡牌分组 题目: 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数 ...

  4. Leetcode每日一题2020.11.13第328题:奇偶链表

    328.奇偶链表 题目描述 思路.算法及代码实现 方法:分离节点后合并 如果链表为空,则直接返回链表. 对于原始链表,每个节点都是奇数节点或偶数节点.头节点是奇数节点,头节点的后一个节点是偶数节点,相 ...

  5. LeetCode 每日一题打卡:334.递增的三元子序列

    题目 334.递增的三元子序列 题目大意 给你一个整数数组numsnumsnums ,判断这个数组中是否存在长度为333的递增子序列. 如果存在这样的三元组下标(i,j,k)(i, j, k)(i,j ...

  6. 【Leetcode 每日一题】514. 自由之路(BFS+优先队列)

    Leetcode 每日一题 题目链接:514. 自由之路 难度: 困难 解题思路: 这道题乍一看,可以选择用动态规划或者BFS来求解.本文使用BFS来进行解答.注意到题中有一个最小的到路径.所以我们可 ...

  7. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  8. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  9. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  10. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

最新文章

  1. 扩展typeof来判断js变量的类型
  2. 局域网DVD yum源的制作
  3. html5盒子模型作业,html5 盒子模型案例
  4. 【Arduino】HX711驱动程序
  5. 深入理解数据库行锁与表锁
  6. 傅里叶变换基本概念及复数类实现
  7. GlusterFS-Kubernetes云原生存储
  8. Google的特殊功能
  9. 计算机主机拆解报告心得体会,计算机拆装实验报告心得体会(共10篇).doc
  10. 矩阵转置与矩阵对称性的关系
  11. Soul持续发力社交渠道赴港上市,“Soul式社交”凭什么火出圈?
  12. POJ 3537 Crosses and Crosses 博弈论 SG函数 记忆化搜索
  13. MeeGo的中国救亡之路:Jolla与迪信通牵手合作
  14. 大学生闲置物品交易平台UML建模
  15. FM调制的FPGA实现(三)
  16. AE+c#开发之输出地图(输出当前视图中的地图)
  17. 快速用Discuz搭建论坛网站教程
  18. trunk(中继链路)
  19. Arduino 入门篇 —— 红外遥控传感
  20. 2019-05-23 奇虎ARP防火墙

热门文章

  1. HRNet论文阅读及部分代码标注
  2. APISpace 银行卡三要素API 推荐
  3. linux目录更改权限不够,Linux中文件夹访问权限不足
  4. 正交性,从內积开始到施密特正交化
  5. 腾讯云平台WordPress建站问题记录
  6. 计算机科学之父——Alan Turing及相关电影介绍
  7. PROFINET通信技术总结
  8. Linux终端复制粘贴后前后会多出0~和~1
  9. mac系统 查找英文目录
  10. win8更改计算机锁屏时间,在win8系统中设置自动锁屏功能的方法