【LeetCode笔记】33. 搜索旋转排序数组(Java、二分法)

文章目录

  • 题目描述
  • 思路 & 代码
      • 更新版

题目描述

  • 值互不相同:不用考虑重复值情况(要不然比较麻烦)
    在这里插入图片描述

思路 & 代码

  • 重点在于保证O(logn)的时间复杂度
  • 看成两个数组:前半段 & 后半段。根据两个数组的极值来判断 target 在哪个数组,再进行判断即可。
  • 先一次二分,找到前半段、后半段的分界下标。
  • 再一次二分,找到在某半段中的 target
  • 注意:要考虑极端情况:在下标0处旋转,相当于没有旋转。
class Solution {public int search(int[] nums, int target) {// 思路:一次分割点查找O(logn)。两次二分查找O(logn)int k = -1, low = 0, top = nums.length - 1;while(low <= top){k = (low + top) / 2;// 找到的情况:注意长度为1时,需要进行k + 1 == nums.length判断if(k + 1 == nums.length || nums[k] > nums[k + 1]){break;}if(nums[k] < nums[0]){top = k - 1;}else{low = k + 1;}  }// 判断选择在哪个部分进行二分if(target > nums[nums.length-1] || k == nums.length-1){return binary(nums,0,k,target);}else{return binary(nums,k+1,nums.length-1,target);}}public int binary(int[] nums,int left,int right,int target){// l = 0,r = -1的情况也要考虑if(left >= right){if(target == nums[left]){return left;}return -1;}int half = (left+right)/2;// 相等判断if(target == nums[half]){return half;}// 缩短范围,+-1去掉已判断的halfelse if(target > nums[half]){return binary(nums,half+1,right,target);}else{return binary(nums,left,half-1,target);}}
}

更新版

  • 核心在于两次二分,以及对数组性质的使用
class Solution {public int search(int[] nums, int target) {int k = -1;int left = 0, right = nums.length - 1;while(left <= right) {k = (left + right) / 2;if(k + 1 == nums.length || nums[k] > nums[k + 1]) {break;}if(nums[k] < nums[0]) {right = k - 1;}else {left = k + 1;}}if(target > nums[nums.length - 1] || k == nums.length - 1) {return binary(nums, 0, k, target);}else {return binary(nums, k + 1, nums.length - 1, target);}}public int binary(int[] nums, int left, int right, int target) {if(left > right) {return -1;}int mid = (left + right) / 2;if(target == nums[mid]) {return mid;}else if(nums[mid] > target) {return binary(nums, left, mid - 1, target);}else {return binary(nums, mid + 1, right, target);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5版微博能收到私信吗,微博私信功能说明

新浪微博上线了私信功能&#xff0c;悄悄话也可以在微博上聊&#xff01;只要对方是你的粉丝&#xff0c;你就可以发私信给他(或者她)。例如&#xff1a;这位网友是您的粉丝&#xff0c;在他的个人首页头像下方看到“发私信”链接&#xff0c;那么我可以给他发私信。如果对方不…

linux QT 结束当前进程_Linux常用使用命令梳理

一、指定运行级别运行级别0:关机1&#xff1a;单用户2&#xff1a;多用户状态没有网络服务3&#xff1a;多用户状态有网络服务4&#xff1a;系统未使用保留状态5&#xff1a;图形界面6&#xff1a;重启系统常用的运行级别是3和5&#xff0c;要想修改运行级别&#xff0c;可以修…

【LeetCode笔记】263. 丑数(Java、迭代)

文章目录题目描述思路 & 代码题目描述 打卡每日一题&#xff5e;&#xff08;当然今天比较简单才写的&#xff09;第一次写可能有点懵&#xff08;指对“丑数”这个概念不太理解&#xff09;不过写完后&#xff0c;感觉是基本上不会忘记写法的那种 思路 & 代码 对于…

html表单实验总结,HTML表单总结

一 HTML 表单标签标签描述定义供用户输入的表单定义输入域定义文本域 (一个多行的输入控件)定义了 元素的标签&#xff0c;一般为输入标题定义了一组相关的表单元素&#xff0c;并使用外框包含起来定义了 元素的标题定义了下拉选项列表定义选项组定义下拉列表中的选项定义一个…

Java 启动和停止界面_一文详解各种花里胡哨的Java调试技巧,多图预警,记得收藏...

欢迎关注专栏《Java架构筑基》——专注于Java技术的研究与分享&#xff01;Java架构筑基​zhuanlan.zhihu.comJava架构筑基——专注于Java技术的研究与分享&#xff01;后续文章将首发此专栏&#xff01;欢迎各位Java工程师朋友投稿和关注Java架构师进阶之路<常用资料分享&g…

【LeetCode笔记】279. 完全平方数(Java、动态规划)

文章目录题目描述思路 & 代码题目描述 类似找零钱&#xff0c;思路和代码框架基本上一样 思路 & 代码 考虑到这么一点&#xff1a;某完全平方数&#xff0c;肯定是由另一更小的完全平方数 一平方组成比如 16 8 4 (完全平方数82222)22(完全平方数82^2 2^2) 2^…

计算机几何学论坛,现代几何学与计算机科学-中国计算机学会.pdf

现代几何学与计算机科学-中国计算机学会CNCC 2017 特邀报告 第 13 卷  第12 期  2017 年 12月现代几何学与计算机科学丘成桐 (Shing-Tung Yau)关键词 &#xff1a;现代几何 共形映射 计算机图形学 计算机视觉 人工智能 哈佛大学我很荣幸受邀来到中国计算机大会上演…

怎么判断一个字符串的最长回文子串是否在头尾_每日一道算法题,让你的头脑更活跃(寻找最长回文子串)...

前言最近准备把算法慢慢的捡起来&#xff0c;所以准备日更一道算法题目&#xff0c;难度自然是由简入难&#xff0c;所以同学们可以每天都来看看小编的更新。日更时间定在每晚20:00&#xff0c;希望大家多多关注啦。昨天就欠更了&#xff0c;简直就是打脸。过完年刚开工&#x…

【LeetCode笔记】322. 零钱兑换(Java、动态规划)

文章目录题目描述思路 & 代码题目描述 和完全平方数基本上一样啦&#xff0c;但是我觉得这道题的判断 & 循环处理更恶心 思路 & 代码 相对于完全平方数&#xff0c;这里要考虑零钱数组无序&#xff0c;要先进行排序与此同时&#xff0c;还要考虑零钱数组的值并…

计算机主机接线视频教程,电脑主板跳线怎么接?电脑机箱与主板跳线接法图解教程...

电脑组装其实并不难&#xff0c;对于一个DIY老手三下五除二就组装好了&#xff0c;但对于新手装机来说&#xff0c;最大的难点就是主板与机箱之间的跳线的接法&#xff0c;那么电脑主板跳线怎么接&#xff1f;下面装机之家小编分享一下电脑机箱与主板跳线接法图解教程。这款机箱…

用计算机分析卫星云图 进行实时6,大学计算机应用基础期末考试试卷和答案A.doc...

大学计算机应用基础期末考试试卷和答案A试卷名称课程名称试卷(A)总 分题号一二三核分人题分7020.010复查人得分评分人得分??一、单选( 共 70分)1.“A”的ASCII码值(十进制)为65&#xff0c;则“D”的ASCII码值(十进制)为_________。A、70B、68C、62D、692.用计算机分析卫星云…

英特尔 超核芯显卡 620mac_英特尔也玩马甲?有关USB TypeC的冷知识你了解多少

文章选自公众号“电脑报”&#xff1a;英特尔也玩马甲&#xff1f;有关USB Type-C的冷知识你了解多少随着Type-C接口的不断发展&#xff0c;这个接口也成为越来越多设备的标配&#xff0c;除了出现在手机、平板电脑和笔记本电脑等移动设备上&#xff0c;显卡这样的设备也开始配…

【LeetCode笔记】394. 字符串解码(Java、递归、栈)

文章目录题目描述思路 & 代码更新版题目描述 开心&#xff01;&#xff01;独立思考字符串题&#xff0c;还AC了&#xff0c;成就感满满 XD难点应该是在于嵌套括号&#xff0c;那么这里实际上还要考虑到一个类似于括号匹配的事情谈到括号&#xff0c;那么大概率用到栈 思…

ad19pcb设置恢复默认_苹果手机便签怎么恢复系统默认的内容分割线?

苹果手机上虽然没有系统自带的便签app&#xff0c;但是可以添加使用第三方的敬业签。敬业签&#xff0c;是一款支持备忘内容云端同步并提醒的跨平台(Windows电脑﹑安卓手机﹑苹果iPhone手机﹑iPad﹑苹果电脑Mac端以及网页Web端)桌面便签软件&#xff0c;备忘效果更好&#xff0…

计算机运行卡英语怎么说,“芯片卡”英语怎么说

名词解释&#xff1a;芯片卡容量大&#xff0c;其工作原理类似于微型计算机&#xff0c;能够同时具备多种功能。芯片卡又分为纯芯片卡和磁条芯片复合卡&#xff0c;现在正以其高安全性和多功能应用已成为全球银行卡的发展趋势。你知道用英语怎么表达吗Chinese banks will promo…

【LeetCode笔记】剑指 Offer 56 . 数组中数字出现的次数(Java、位运算)

文章目录题目描述思路 & 代码题目描述 比 leetcode 136要难点注意&#xff1a;空间复杂度要求O(1)&#xff0c;否则用哈希表直接秒杀啦。昨天的笔试&#xff0c;还有刷的面经都有这道题。。。今天赶紧补补 思路 & 代码 相对于 leetcode 136&#xff0c;这边多了个分…

科学家用计算机模拟后确认 60个n原子,科学家用计算机模拟后确认,60个N原子可结合成N60分子。下列关于N60的叙述中正确的是A.N60是一种新型的化合物...

科学家用计算机模拟后确认&#xff0c;60个N原子可结合成N60分子。下列关于N60的叙述中正确的是A&#xff0e;N60是一种新型的化合物更多相关问题如图&#xff0c;已知点A是一次函数y&#xff1d;x&#xff0b;1与反比例函数图象在第一象限内的交点&#xff0c;点B在x轴的负半轴…

电脑计算器的快捷键_牛!这份金蝶财务软件使用手册+超全快捷键汇总送你,财务收好...

金蝶财务软件想要使用的好是有技巧的&#xff01;快捷键简易汇总&#xff1a;快捷键详细说明1、凭证处理①、摘要栏两种快速复制摘要的功能&#xff0c;在下一行中按“..”可复制上一条摘要&#xff0c;按“//”可复制第一条摘要。同时&#xff0c;系统还设计了摘要库&#xff…

【LeetCode笔记】415. 字符串相加(Java、字符串)

题目描述 不能直接把字符串转换成整数&#xff08;会溢出&#xff09;面试被问过&#xff0c;今天刷面经又刷到。。那就索性水一篇文吧&#xff01;更新&#xff1a;原题就是 leetcode 415 思路 & 代码 只要理好字符串s、字符串t、答案字符串的对应位关系就好啦&#x…

html表白earth,表白很感动的英语句子

表白很感动的英语句子13、在这快乐分享的时刻&#xff0c;思念好友的时刻&#xff0c;美梦成真的时刻&#xff0c;祝你—新年快乐&#xff0c;佳节如意!Wish you a happy new year and a good fortune in the coming year when we will share our happiness, think of our good…