33. Search in Rotated Sorted Array

文章目录

  • 题目
  • 二分解题
  • 81 Search in Rotated Sorted Array II

题目

输入:一个按升序排序的数组nums,但是这个数组在某个位置被旋转了。(例如., 原始数组是[0,1,2,4,5,6,7],旋转后就变成 [4,5,6,7,0,1,2])。第二个输入是一个int target。
输出:如果target在nums中出现,则返回下标,否则返回-1。假设nums中不存在重复元素。
要求:时间复杂度是O(lgn)

示例1:
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

示例2:
Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1

二分解题

解题思路原地址
在一个有序数组中查找一个数可以用二分。旋转之后的数组只是部分有序,还可以用二分吗?
我们将数组从中间分开后一定有一边是有序的
例如:nums={4,5,6,7,0,1,2},按照6分开,左边{4,5,6},右边{7,0,1,2}。左边是有序的。按照0从中间分开,左边{4,5,6,7},右边{1,2},巧了,两边都是有序的。按照1从中间分开,左边{4,5,6,7,0},右边{2},右边是有序的。

这样的话,就将数组分为[l,mid-1]和[mid+1,r]两部分。按情况分别讨论。
如果nums[mid]=target,则返回mid。否则进入下面讨论。
如果左边是有序的,例如左边的是{4,5,6}。如果target=5,那么应该在左边[0,mid-1]中查找。如果target=2则应该在右边[mid+1,r]中查找。
也就是说如果target>nums[l] 并且 target<nums[mid],r=mid-1。如果target<nums[l],l=mid+1。
在这里插入图片描述

如果右边是有序的。例如右边的数组是{2,4,5}。如果target=4,因为nums[mid+1]<target<nums[r],所以在右侧查找。如果target=6,因为6>nums[r],所以在左侧查找。也就是说如果 nums[mid+1]<target<nums[r],则在右侧查找。否则在左侧查找。
在这里插入图片描述

class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length-1;while(l<=r){int mid = l + ((r-l)>>1);if(nums[mid] == target) return mid;if(nums[l]<=nums[mid]){//左侧有序,有等于号,是考虑到左侧只有nums[mid]一个元素的情况if(nums[l]<=target && target<nums[mid]){r = mid -1;}else{l = mid + 1;}}else{//右侧 有序if(nums[mid]<=target && target<=nums[r]){                    l = mid + 1;}else{r = mid - 1;}}}return -1;}
}

81 Search in Rotated Sorted Array II

与33题的区别是输入的数组中是存在重复元素的。找到target,返回true。找不到,返回false。
示例1:
Input: nums = [2,5,6,0,0,1,2], target = 0
Output: true

示例2
Input: nums = [2,5,6,0,0,1,2], target = 3
Output: false

在处理过程中可能会遇到的问题是nums[l]=nums[mid],不能判断哪边是排序号的数组。这时候只需要l=l+1,l指针右移一位即可。

class Solution {public boolean search(int[] nums, int target) {int l = 0, r = nums.length-1;while(l<=r){//System.out.println(l+" "+r);int mid = l + ((r-l)>>1);if(nums[mid] == target) return true;if(nums[l]==nums[mid]){l = l+1;}else{if(nums[l]<=nums[mid]){//左侧有序if(nums[l]<=target && target<nums[mid]){r = mid -1;}else{l = mid + 1;}}else{//右侧 有序if(nums[mid]<=target && target<=nums[r]){                    l = mid + 1;}else{r = mid - 1;}}}}return false;}
}

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

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

相关文章

第七十期:2019年度Java开发者路线图

本文将向大家展示了一张Java开发者路线图。该路线图在保持简单可行的基础上&#xff0c;介绍了各种具有业界标准、且方便多数人遵循的工具和程序库。 作者&#xff1a;陈峻 许多Java开发人员都希望通过某种Java成长路线图&#xff0c;来解答有关&#xff1a;该学习哪些技术&am…

常见的软件

重装完系统后&#xff0c;会有不少软件需要重装&#xff0c;这边简单列一下自己需要下载安装的软件。 1. 首先下载一个浏览器&#xff0c;我这边下载的是谷歌浏览器。&#xff08;不过现在的edge还是挺好用的&#xff09; 下载安装完可以修改启动时的网址和默认搜索引擎。&…

第七十一期:管理 | 技术Leader:选OKR还是KPI?

除了 KPI&#xff0c;考核员工还有什么方式?OKR 是一种简单的管理方法&#xff0c;但是对于其误解和各种疑惑却很多。 作者&#xff1a;燕标 除了 KPI&#xff0c;考核员工还有什么方式?OKR 是一种简单的管理方法&#xff0c;但是对于其误解和各种疑惑却很多。 图片来自 Pe…

153. Find Minimum in Rotated Sorted Array

文章目录1题目理解2 二分分治法2.1至少有一部分是有序的2.2 示例2.3 编码3 只有二分1题目理解 输入&#xff1a;一个按升序排序的数组nums&#xff0c;但是这个数组在某个位置被旋转了。(例如., 原始数组是[0,1,2,4,5,6,7]&#xff0c;旋转后就变成 [4,5,6,7,0,1,2])。 输出&a…

JS之onsubmit事件与组织事件外延

on是监听的意思 阻止事件发生&#xff1a;1、return false  2、e.preventDefault()适用于onsubmit outer外部  inner内部 event.stopPropagation()阻止事件向外层div传播 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&…

第七十二期:Visual Studio Online 终于公开上线了

盼望已久的 Visual Studio Online 终于上线了。今年 5 月份&#xff0c;微软在 Build 2019 开发者大会上宣布了 Web 版本的 VS Code&#xff0c;即 Visual Studio Online。当时微软释出的是 Private Preview 版本&#xff0c;仅允许开发者申请试用。 作者&#xff1a;佚名 盼望…

154. Find Minimum in Rotated Sorted Array II

文章目录题目理解二分分治只有二分154是 153的升级版本。题目理解 输入&#xff1a;一个按升序排序的数组nums&#xff0c;但是这个数组在某个位置被旋转了。(例如., 原始数组是[0,1,2,4,5,6,7]&#xff0c;旋转后就变成 [4,5,6,7,0,1,2])。注意&#xff1a;这个数组可能包含重…

@ResponseBody注解學習

轉載自https://www.cnblogs.com/qiankun-site/p/5774325.html這篇博客 本文僅是爲了自學整理知識點 ResponseBody 作用 將controller的方法返回的對象通過適當的轉換器轉換爲指定的格式之後&#xff0c;寫入到response對象的body區&#xff0c;通常用來返回JSON數據或者是XML數…

spring mvc学习(4):第一个spring mvc项目

一个Spring MVC的项目如何创建&#xff1f;请看这里。 代码编辑器&#xff1a;Intellij IDEA 请提前在电脑上配置好自己的tomcat&#xff01; 该文属于小白教程&#xff0c;适合初学者。 1 创建Spring MVC项目 第一步&#xff0c;点击新建项目。 第二步&#xff0c;选择Sp…

spring mvc学习(5):IDEA修改背景颜色大全

路径为File->settings->Editor->Color Scheme可以设置软件默认颜色&#xff0c;旁边的小齿轮添加颜色名字 IDEA设置一张背景图片,路径&#xff1a;File->Settings->Appearance&Behavior->Appearance 手动设置护眼绿的RGB颜色 路径&#xff1a;File->…

第七十三期:2019大裁员!年关将至,裁员比例竟达90%?

“现在行情不好啊&#xff0c;工作不好找&#xff0c;我都怀疑我自己了……” 如果这些话出自某个在职场混迹多年、对工作丧失激情的中年男人&#xff0c;似乎并不是难以理解。但是&#xff0c;这些话来自一批985院校毕业的学生&#xff0c;曾经的他们头顶名校光环&#xff0c;…

国际经管学院举办计量经济学术前沿研讨会

6月10日&#xff0c;由首都经济贸易大学国际经济管理学院组织的“计量经济学术前沿研讨会”在博远楼三号报告厅举办。此次研讨会汇集海内外知名学者&#xff0c;校长付志峰出席活动并致辞。 付志峰在致辞向远道而来的国内外专家学者表示欢迎。他讲到&#xff0c;首都经济贸易大…

第七十四期:国内SaaS企业终于活成了自己讨厌的样子!

总之&#xff0c;单纯的SaaS走不通了&#xff0c;为企业客户提供软件服务的这条路总是走得通的&#xff0c;反正SaaS企业就是要抢传统软件公司和软件外包公司的市场&#xff0c;换个姿势&#xff0c;继续降维打击就是了。 作者&#xff1a;佚名 SaaS&#xff0c;英文Software …

378. Kth Smallest Element in a Sorted Matrix

文章目录1题目理解2 思路分析2.1二分思路2.2计算小于等于middle值的个数3 拓展解决leetcode 6681题目理解 输入&#xff1a;一个nxn的矩阵&#xff0c;每一行从左到右按照升序排列&#xff0c;每一列从上到下按照升序排列。一个整数k。 输出&#xff1a;这个矩阵中第k小的数。…

20 年后,我们怎么看电影?

简评&#xff1a; 几十年来&#xff0c;虚拟现实一直被认为是电影业的未来所在&#xff0c;能够为观众提供比传统影视更身临其境的体验。在 1955 年的一篇题为《未来的电影》的文章中&#xff0c;电影摄影师海里戈就预言「未来的电影将会以生动活泼的形式为人们揭开新科学世界的…

第七十五期:网络 | 5G那些运营商不愿说的秘密

11月1日&#xff0c;国内几大基础运营商正式上线5G资费套餐&#xff1a;月套餐最低128元起&#xff0c;最高869元&#xff0c;这也标志着中国5G通信服务真正进入全民商用时代&#xff0c;不少急于尝鲜者还第一时间购入5G手机并办理相关套餐&#xff0c;率先体验传说中的极速5G网…

烦人的项目

最近被一些挑剔的用户搞了个半死。都要忙晕过去了。作项目真的是好累&#xff01;不知这种烦人的日子还要多久才能过去。转载于:https://www.cnblogs.com/Lancer/archive/2004/05/24/11152.html

第七十七期:可自动生成代码,5款基于AI的开发工具

如今&#xff0c;对机器学习潜力感兴趣的程序员都在讨论&#xff0c;如何使用人工智能和基于人工智能的软件开发工具构建应用程序。例如PyTorch和TensorFlow之类的解决方案。 作者&#xff1a;Sandra Parker 如今&#xff0c;对机器学习潜力感兴趣的程序员都在讨论&#xff0…

第七十八期:2019全球程序员薪酬报告:软件开发比机器学习抢手!40岁后收入下滑

Hired发布了《2019 年度薪酬状况报告》。调查显示&#xff1a;仅有23%的计算机科学相关专业硕士/博士表示高学历为其带来高薪&#xff1b;54%从业者表示不会继续深造&#xff1b;40岁后薪资呈现下降、60岁基本降到30岁水平。 作者&#xff1a;佚名 Hired发布了《2019 年度薪酬…

第七十九期:阿里程序员感慨:码农们过去暴富有多轻松,现在赚钱就有多辛苦

互联网的世界也是一座围城。有人挤破脑袋想要进去。而有人又觉得是被互联网的光鲜表象欺骗了忙着要出来&#xff0c;但最终&#xff0c;这些人都会离开。 作者&#xff1a;职场八卦 互联网的世界也是一座围城。有人挤破脑袋想要进去。而有人又觉得是被互联网的光鲜表象欺骗了…