第81题:搜索旋转排序数组II
时间:2019-10-23
本文章向大家介绍第81题:搜索旋转排序数组II,主要包括第81题:搜索旋转排序数组II使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一. 问题描述
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。
编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。
示例 1:
输入: nums = [2,5,6,0,0,1,2], target = 0
输出: true
示例 2:
输入: nums = [2,5,6,0,0,1,2], target = 3
输出: false
进阶:
这是 搜索旋转排序数组 的延伸题目,本题中的 nums 可能包含重复元素。
这会影响到程序的时间复杂度吗?会有怎样的影响,为什么?
二. 解题思路
解题思路:本题首先找到旋转点point,然后再进行二分查找。
步骤一:通过遍历数组找到旋转点point,判断target在point点左边还是右边。
步骤二:如果point在左边,则对左边进行二分查找。否则对右边进行二分查找。
注意:这一题的关键点是各种特殊情况需要考虑到.
三. 执行结果
执行用时 :1 ms, 在所有 java 提交中击败了99.84%的用户
内存消耗 :39.8 MB, 在所有 java 提交中击败了10.42%的用户
四. Java代码
class Solution { public boolean search(int[] nums, int target) { if(nums.length<=0||nums==null) { return false; } int point=0; for(int i=0;i<nums.length-1;i++) { if(nums[i]>nums[i+1]) { point=i+1; break; } } //利用二分查找,找值 int first=0; int second=nums.length-1; if(point>0) { if(target<=nums[point-1]&&target>=nums[0]) { second=point-1; }else if(target<=nums[0]&&target>=nums[point]) { first=point; }else { return false; } } //二分查找代码 do{ if(target==nums[first]||target==nums[second]) { return true; } int m=(first+second)/2; if(nums[m]==target) { return true; }else { if(nums[m]>target&&m>0) { second=m-1; }else { first=m+1; } } }while(second>first); return false; } }
原文地址:https://www.cnblogs.com/xiaobaidashu/p/11725400.html
- HDU 3595 GG and MM(Every-SG)
- CSS布局(四) float详解
- php http_build_query 拼接数组 可以用这个函数
- 神器Pytorch(1)
- PHP中的Array2String & String2Array
- CSS布局(五) 网页布局方式
- CSS布局(六) 对齐方式
- css渲染(一) 字体
- css渲染(二) 文本
- BZOJ 2463: [中山市选2009]谁能赢呢?(智商)
- excel导入与导出
- 【LeetCode 204】关关的刷题日记40 Number of Boomerangs
- 洛谷P1339 [USACO09OCT]热浪Heat Wave(最短路)
- excel导出类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 机器学习(八)—Apriori算法
- 机器学习(九)—FP-growth算法
- LeetCode — (1)
- Django初体验——搭建简易blog
- Python开发简单记事本
- 在stm32开发可以调用c标准库的排序和查找 qsort bsearch
- Python解析excel文件并存入sqlite数据库
- python学习总结
- C语言calloc()函数:分配内存空间并初始化——stm32中的应用
- 提升代码的运算速度——代码优化的方法总结
- 自己实现sizeof+大小端测试
- 写一个程序检查一个整数是2的幂
- 持续部署入门:基于 Kubernetes 实现滚动发布
- Python源码分析(一)
- Learning Scrapy(一)