LeetCode--Search in Rotated Sorted Array
题目:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
===========================================
两种思路:
1(未思考:直接做,仔细考虑各种情况来分析)
package leetcode;
public class SearchinRotatedSortedArray {
public static int search(int[] nums, int target) {
int index = -1;
if (nums.length < 1 || nums == null)
return -1;
if (nums.length == 1) {
if (target == nums[0])
return 0;
return -1;
}
if (target == nums[0]) {
index = 0;
} else if (target == nums[nums.length - 1]) {
index = nums.length - 1;
}
if(nums[0]<nums[nums.length-1]){
index = Erfen(target,nums);
}else{
if (target < nums[0] && target > nums[nums.length - 1]) {
index = -1;
} else if (target > nums[0]) {
int i = 0;
while(nums[i]<=nums[i+1] && i < nums.length - 1){
if(nums[i]==target){
index = i;
break;
}
i++;
}if(target == nums[i]){
index=i;
}
} else if (target < nums[nums.length - 1]) {
int j = nums.length-1;
while(nums[j-1]< nums[j] && j > 0){
if(nums[j]==target){
index = j;
break;
}
j--;
}
if(target == nums[j]){
index=j;
}
}
}
return index;
}
public static int Erfen(int target, int[] array) {
int left = 0;
int right = array.length - 1;
while (left < right-1 ) {
int mid = left + (right - left) / 2;
if(target >= array[mid]){
left = mid;
}else{
right = mid;
}
}
if(target == array[left]){
return left;
}else if(target == array[right]){
return right;
}else {
return -1;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = { 3,4,5,6,7,8,9 };
System.out.println(search(array,5));
}
}
2(借鉴网络,思考后,在数组上设定左右标,利用二分法+递归)
思路:在整个数组中,先二分,找到有序的那一边然后在有序的一边判断是否含有target;如果没有,继续在无序的一半二分,在有序的一边查找
package leetcode;
public class newSearchinRotatedSortedArray {
public static int search(int[] nums, int target) {
return search(nums,0,nums.length-1,target);
}
public static int search(int[] nums, int left, int right, int target) {
// TODO Auto-generated method stub
if(left > right) return -1;
int mid = (left+right)/2;
//78123456
if(nums[mid]==target){
return mid;
}
if(nums[left]<=nums[mid]){
if(target<=nums[mid]&&target>=nums[left]) {
return search(nums,left,mid-1,target); //二分法加上“=”号!当使用二分法时,可以在每个判断大小的地方加“=”?
}else{
return search(nums,mid+1,right,target);
}
}else if(nums[mid]<=nums[nums.length-1]){
if(target>=nums[mid]&&target<=nums[right]){
return search(nums,mid+1,right,target);
}else{
return search(nums,left,mid-1,target);
}
}
return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = { 7,8,9,3,4,5,6 };
System.out.println(search(array,3));
}
}
转载于:https://www.cnblogs.com/neversayno/p/5277304.html
LeetCode--Search in Rotated Sorted Array相关推荐
- LeetCode Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...
- LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- leetcode - Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- leetcode:Search in Rotated Sorted Array
题目要求: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...
- [leetcode]Search in Rotated Sorted Array @ Python
原题地址:https://oj.leetcode.com/problems/search-in-rotated-sorted-array/ 题意: Suppose a sorted array is ...
- [leetcode]Search in Rotated Sorted Array II
这道题目仍然是二分,去掉不可能的部分.用了递归,在重复的情况下,就是有可能最左边的和最右边的相等,此时就不能直接判断出区间外的元素,左右两边同时递归.有重复元素的时候,在bad case的时候会退化为 ...
- [LeetCode] Search in Rotated Sorted Array
二分 : 判断条件 当a[left] <= a[mid]时,可以肯定a[left..mid]是升序的 循环有序 一共有以下两种情况 第一种 / / / / / / 条件: (A[mid] &g ...
- LeetCode 33. Search in Rotated Sorted Array
问题链接 LeetCode 33. Search in Rotated Sorted Array 题目解析 给定一个 "升序" 的 无重复 数组,从中寻找目标值."升序& ...
- 【leetcode】Search in Rotated Sorted Array II(middle)☆
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- leetcode 81 Search in Rotated Sorted Array II ----- java
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
最新文章
- 【the service mysql57 failed the most】
- Centos7 Kubernetes1.8+docker容器集群
- 界面 高炉系统_首钢京唐七大系统介绍
- Xshell中输入rz提示:-bash: rz: command not found
- JavaScript的作用域和上下文
- 什么是灰度发布?灰度发布方式 系统的割接 灰度部署典型的框架架构
- Python 系统管理利器Fabric
- Delphi2010正式版的代码格式化及自动完成
- Ribbon界面开发
- linux常识 菜鸟教程
- 项目保密协议书(范本)
- 周易版化学元素周期表
- JRebel出现ERROR Failed to obtain seat. Unable to connect to license server
- python提取图片中的数字_用Python-OpenCV从车牌图像中提取数字和字母
- tween.js 中文使用指南 1
- Python使用 Pyvisa库 控制 NI 设备Fluke(详细)
- 十大券商:“推土机行情”再现
- Python全栈-magedu-2018-笔记13
- CTF练习-TU-CTF-2016 pwn BBYS-first-elf-25 记录
- 数据全量、增量、比较更新
热门文章
- 坚式计算机在线,小学数学竖式计算器
- python数据组织存在维度吗_用Python将统计数据不存在的记录按维度对应指标补齐...
- centos mysql 端口_Linux CentOS Mysql修改默认端口
- 广州站 | 云原生 Serverless 技术实践营精彩回顾
- SpringBoot Admin2.0 集成 Java 诊断神器 Arthas 实践
- es6 数组找最大值_JavaScript 查找数组中最大值与最小值
- 2019年最后的一天_2019最后一天的说说 2019最后一条朋友圈再见2019
- dbeaver导出表结构和数据_Oracle 导入导出表空间跟数据表通用操作笔记
- mkfontscale没有这个命令_那些实用的小命令
- python import 原理-Python之禅-import this的实现