[Leedcode][JAVA][第33题][搜索旋转排序数组]

【问题描述】[33. 搜索旋转排序数组] [中等]

假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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

【解答思路】

1. 暴力法 (不符合题意)

时间复杂度:O(N) 空间复杂度:O(1)

public class Solution {public int search(int[] nums, int target) {int len = nums.length;for (int i = 0; i < len; i++) {if (nums[i] == target) {return i;}}return -1;}
}
2. 二分查找 修改版

时间复杂度:O(logN) 空间复杂度:O(1)

  public int search(int[] nums, int target) {int left= 0;int right =  nums.length-1;while(left <=right){int mid =  (right - left ) /2 +left;if(target == nums[mid] ){return mid;}先根据 nums[mid] 与 nums[lo] 的关系判断 mid 是在左段还是右段 if(nums[mid] <nums[right]){if (nums[mid] <= target && target <= nums[right]) {// 下一轮搜索区间是 [mid+1, right]left = mid+1;} else {// 只要上面对了,这个区间是上面区间的反面区间,下一轮搜索区间是 [left, mid - 1]right = mid - 1;}}else{
// [left, mid] 有序,但是为了和上一个 if 有同样的收缩行为,// 当区间只有 2 个元素的时候 int mid = (left + right + 1) >>> 1; 一定会取到右边// 此时 mid - 1 不会越界,就是这么刚刚好if (nums[left] <= target && target <= nums[mid]) {/// 下一轮搜索区间是 [left, mid - 1]right = mid-1;} else {// 下一轮搜索区间是 [mid+1, right]left = mid+1;}}}return -1 ;}
3. 有序数组查找目标值 + 二分查找

class Solution {public int search(int[] nums, int target) {int lo = 0, hi = nums.length - 1;while (lo <= hi) {int mid = lo + (hi - lo) / 2;if (nums[mid] == target) {return mid;}// 先根据 nums[0] 与 target 的关系判断目标值是在左半段还是右半段if (target >= nums[0]) {// 目标值在左半段时,若 mid 在右半段,则将 mid 索引的值改成 infif (nums[mid] < nums[0]) {nums[mid] = Integer.MAX_VALUE;}} else {// 目标值在右半段时,若 mid 在左半段,则将 mid 索引的值改成 -infif (nums[mid] >= nums[0]) {nums[mid] = Integer.MIN_VALUE;}}if (nums[mid] < target) {lo = mid + 1;} else {hi = mid - 1;}}return -1;}
}

【总结】

1. 二分查找模板[详解链接]
int binary_search(int[] nums, int target) {int left = 0, right = nums.length - 1; 
//  <=while(left <= right) {int mid = left + (right - left) / 2;//防止大数溢出if (nums[mid] < target) {left = mid + 1;} else if (nums[mid] > target) {right = mid - 1; } else if(nums[mid] == target) {// 直接返回return mid;}}// 直接返回return -1;
}
2. 排除法找规律分析 不要想着一蹴而就
  • 有序增长的部分分开思考 一蹴而就
  • if -else 好想的条件放进if 其余else
3. 该有的模板初期要不断总结 根据模板发散思考 切忌想当然

小萝莉的猴神大叔.jpg

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

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

相关文章

001. Ansible简介

一 简介 Ansible是一款极其简单的自动化运维工具, 基于Python开发, 集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点。 实现了批量系统配置, 批量程序部署, 批量运行命令等功能。 Ansible是基于模块工作的, 本身没有批量部署的能力。真正具有批量部署的是ansi…

mongo:(2)mongoDB简介

什么是MongoDB ? MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个…

linux分割图片软件,桌面应用|5 种拆分 Linux 终端的方法

本文介绍了 Linux 提供的拆分终端的方法&#xff0c;它能够帮助你完成多任务工作。那么&#xff0c;你最喜欢哪一款终端复用工具呢&#xff1f;没有什么问题是不能用一个 Linux 终端解决的&#xff0c;如果不行&#xff0c;那就用两个。很早以前&#xff0c;终端其实是一个物理…

[剑指offer][JAVA][面试题56 - I][第260题][位运算][HashSet]

【问题描述】 [面试题56 - I] [数组中数字出现的次数] 一个整型数组 nums 里除两个数字之外&#xff0c;其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)&#xff0c;空间复杂度是O(1)。示例 1&#xff1a;输入&#xff1a;nums [4,1,4,6] …

mongo:(3)windows上mongoDB安装

1打开程序 2下一步 3下一步 4custom自定义 5取消勾选&#xff0c;安装 6安装完成以后 在bin目录下建文件夹 7创建结束&#xff0c;将mongo.conf放在根目录下 8管理员运行 Cd D:\Program Files\MongoDB\Server\3.6\bin 然后 9 >mongod --config D:\mongo\mongo.conf --i…

LOJ10121 与众不同

题目描述 A 是某公司的 CEO&#xff0c;每个月都会有员工把公司的盈利数据送给 A&#xff0c;A 是个与众不同的怪人&#xff0c;A 不注重盈利还是亏本&#xff0c;而是喜欢研究「完美序列」&#xff1a;一段连续的序列满足序列中的数互不相同。 A 想知道区间 [L,R] 之间最长的完…

[计算机网络][总结][常见问题][TCP][三次握手][四次挥手]

TCP三次握手 四次挥手 三次握手 目的&#xff1a;保证传输的可靠性,为了防止已失效的连接请求报文段突然又传送到了服务端&#xff0c;因而产生错误。主要防止资源的浪费。 具体过程&#xff1a;当客户端发出第一个连接请求报文段时并没有丢失&#xff0c;而是在某个网络节点…

第二十二期:淘宝技术架构分享

一&#xff0c;淘宝技术架构 1.UIC: 用户中心(User Interface Center),提供所有用户信息相关的读写服务&#xff0c;如基本信息&#xff0c;扩展信息&#xff0c;社区信息&#xff0c;买卖家信用等级等等。 淘宝现在有两类卖家B 和C&#xff0c;这是通过在用户身上打不同的标签…

Linux启动过程以及初始化

Linux系统启动 POST加电自检–> 硬件检查 引导加载程序BIOS(Boot Sequence)–> 找到主引导记录&#xff08;MBR&#xff09;&#xff0c;引导加载程序检查分区表并找到一个可引导的分区 加载对应引导上的MBR(bootloader)–> 引导加载程序将所选操作系统的内核加…

Deep learning with Python 学习笔记(9)

神经网络模型的优化 使用 Keras 回调函数 使用 model.fit()或 model.fit_generator() 在一个大型数据集上启动数十轮的训练&#xff0c;有点类似于扔一架纸飞机&#xff0c;一开始给它一点推力&#xff0c;之后你便再也无法控制其飞行轨迹或着陆点。如果想要避免不好的结果&…

linux c 读取摄像头,Linux下onvif客户端获取ipc摄像头 获取能力:GetCapabilities

getcapabilities:获取能力,主要目的获取设备能力信息(获取媒体服务地址)鉴权&#xff1a;但是在调用获取设备能力之前是需要鉴权的。onvif协议规定&#xff0c;部分接口需要鉴权&#xff0c;部分接口不需要鉴权&#xff0c;在调用需要鉴权的接口时不使用鉴权&#xff0c;会导致…

[计算机网络][HTTP]

定义 超文本传输协议&#xff08;英文&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是互联网上应用最为广泛的一种网络协 议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由 统一资…

8次c语言上机作业答案,计算机二级C语言上机题库及答案2017

计算机二级C语言上机题库及答案2017引导语&#xff1a;我们将要迎来2017年9月份的计算机考试&#xff0c;大家准备好了吗&#xff0c;以下是百分网小编分享给大家的计算机二级C语言上机题库及答案2017&#xff0c;欢迎测试!一、填空题给定程序中已建立一个带有头结点的单向链表…

Swagger Learing - Spring Boot 整合swagger

学习了一下swagger。 这是编写的Demo 源码 https://github.com/AmberBar/Learning/tree/master/swagger-learning/swagger 需要的小伙伴可以clone直接运行 访问地址 http://localhost:9999/swagger-ui.html#/ 转载于:https://www.cnblogs.com/amberbar/p/10308256.html

[Leedcode][JAVA][第202题][快乐数]

【问题描述】 编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为&#xff1a;对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和&#xff0c;然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果 可以变为…

Java类加载机制的理解

算上大学&#xff0c;尽管接触Java已经有4年时间并对基本的API算得上熟练应用&#xff0c;但是依旧觉得自己对于Java的特性依然是一知半解。要成为优秀的Java开发人员&#xff0c;需要深入了解Java平台的工作方式&#xff0c;其中类加载机制和JVM字节码这样的核心特性。今天我将…

[剑指offer]面试题第[48]题[Leetcode][JAVA][第3题][无重复字符的最长字串][滑动窗口][HashSet/Map]

【问题描述】[第3题][无重复字符的最长字串] 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2:输入: "bb…

java学习(172): 使用class实现反射编程,创建对象

//class反射编程 //定义一个学生类 public class test124 {public String name;protected int age;double height;private double money;public test124(String name,Integer age){this.namename;this.ageage;}public test124(String name,int age,double money){this.namename…

关于mysql中GROUP_CONCAT函数的使用

偶然看到公司存储过程中有个字符串拼接的函数&#xff0c;改bug过程中使用到了&#xff0c;还挺有用的&#xff0c;于是记录下来方便记忆&#xff0c;帮助有需要的人。 这是我需要整理的串&#xff0c;他是调用了一个存储过程&#xff0c;传入组织机构的id和迭代层数&#xff0…

java学习(173):class反射编程方法

//class反射编程 //定义一个学生类 public class test124 {public String name;protected int age;double height;private double money;public test124(String name,Integer age){this.namename;this.ageage;}public test124(String name,int age,double money){this.namename…