33.Search in sorted Array
/*
* 33.Search in sorted Array
* 2016-4-19 by Mingyang
* 我自己写的代码,开始没有考虑[3,1]取1得情况,所以现在需要额外的加一个部分来
* 判断只有2个数的时候
*/
public static int search1(int[] nums, int target) {
int len = nums.length;
if (len == 0 || nums == null)
return -1;
return searchHelper(nums, target, 0, len - 1);
}
public static int searchHelper(int[] nums, int target, int start, int end) {
if (start > end)
return -1;
int mid = (start + end) / 2;
//这就是多加的部分
if(mid==start||mid==end){
if(nums[start]==target)
return start;
if(nums[end]==target)
return end;
return -1;
}
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > nums[start]) {
if (target >= nums[start] && target <= nums[mid]) {
return searchHelper(nums, target, start, mid - 1);
} else {
return searchHelper(nums, target, mid + 1, end);
}
} else {
if (target >= nums[mid] && target <= nums[end]) {
return searchHelper(nums, target, mid + 1, end);
} else {
return searchHelper(nums, target, start, mid - 1);
}
}
}
/*
* 下面是网上的代码,一样的复杂度,可能更具有延展性
* 如果target比A[mid]值要小------------------------------
* 如果A[mid]右边有序(A[mid]<A[high]) 那么target肯定不在右边(target比右边的都得小),在左边找
* 如果A[mid]左边有序,那么比较target和A[low],如果target比A[low]还要小,
*证明target不在这一区,去右边找;反之,左边找。
* 如果target比A[mid]值要大-------------------------------
* 如果A[mid]左边有序(A[mid]>A[low])
* 那么target肯定不在左边(target比左边的都得大),在右边找 如果A[mid]右边有序
* 那么比较target和A[high],如果target比A[high]还要大,证明target不在这一区,去左边找;反之,右边找。
*/
public int search(int[] A, int target) {
if (A == null || A.length == 0)
return -1;
int low = 0;
int high = A.length - 1;
while (low <= high) { //这里是小于等于哦!!!!!!!!!!!!!----?
int mid = (low + high) / 2;
if (target < A[mid]) {
if (A[mid] < A[high])// right side is sorted
high = mid - 1;// target must in left side
else
if (target < A[low])
// target<A[mid]&&target<A[low]==>means,target cannot be in [low,mid] since this side is sorted
low = mid + 1;
else
high = mid - 1;
} else if (target > A[mid]) {
if (A[low] < A[mid])// left side is sorted
low = mid + 1;// target must in right side
else
if (target > A[high])
// right side is sorted. If target>A[high] means target is not in this side
high = mid - 1;
else
low = mid + 1;
} else
return mid;
}
return -1;
}
33.Search in sorted Array的更多相关文章
- Search in Sorted Array,Search in Rotated Sorted Array,Search in Rotated Sorted ArrayII
一:Search in Sorted Array 二分查找,可有重复元素,返回target所在的位置,只需返回其中一个位置,代码中的查找范围为[low,high),左闭右开,否则容易照成死循环. 代码 ...
- [LeetCode] Search in Rotated Sorted Array I (33) && II (81) 解题思路
33. Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you be ...
- [Leetcode][Python]33: Search in Rotated Sorted Array
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Arrayhttps ...
- [array] leetcode - 33. Search in Rotated Sorted Array - Medium
leetcode - 33. Search in Rotated Sorted Array - Medium descrition Suppose an array sorted in ascendi ...
- LeetCode 33 Search in Rotated Sorted Array [binary search] <c++>
LeetCode 33 Search in Rotated Sorted Array [binary search] <c++> 给出排序好的一维无重复元素的数组,随机取一个位置断开,把前 ...
- LeetCode题解33.Search in Rotated Sorted Array
33. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some piv ...
- leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search
这4个题都是针对旋转的排序数组.其中153.154是在旋转的排序数组中找最小值,33.81是在旋转的排序数组中找一个固定的值.且153和33都是没有重复数值的数组,154.81都是针对各自问题的版本1 ...
- 33. Search in Rotated Sorted Array & 81. Search in Rotated Sorted Array II
33. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some piv ...
- [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
随机推荐
- java 一个对象多少大,占用多少内存
1.instrumentation这种方法还是靠谱的 一个对象占用多少字节? 2.sizeof库 <!-- https://mvnrepository.com/artifact/com.carr ...
- 企业版https
http://www.cocoachina.com/bbs/read.php?tid=194213
- javascript 写一个随机范围整数的思路
const {random} = Math; //返回 [min,max] 的随机值 //[0,1) * (max - min + 1) => [0,max-min+1) //[0,max-mi ...
- JS数组专题2️⃣ ➖ 数组去重
距离上次发文,已经有一段时间了,最近工作比较忙,这不眼看快双十一了,就相当于给大家一些福利吧! 一.什么是数组去重 简单说就是把数组中重复的项删除掉,你 GET 到了吗 ?下面我将简单介绍下几种基本的 ...
- vim的卸载以及环境的配置小记
一.背景 由于之前配置错误,导致我的YouCompleteMe这个插件不能用了,一直提示: ERROR:Required vim compiled with +python. YouCompleteM ...
- Pycharm快捷键及Python常用转义符
不管是windows.xshell或者pycharm,学会使用快捷键都会使学习工作达到事半功倍的效果.这篇博客收集了部分常用的pycharm快捷键,分享给大家,希望对大家有用. 1. 常用快捷键 Py ...
- 三段式fsm
1.状态转移的always中CS,同步ouput的always中NS. 2.3段fsm vs 2段fsm:output逻辑是组合逻辑和同步时序逻辑(消除里不稳的和毛刺). 3.3段fsm vs 1段f ...
- 推荐SQL Server Management Studio以及Visual Studio下的免费的插件 ApexSQL Complete
SQL Server 并没有代码格式化的工具,对于处理他人编写的长SQL需要手工的格式化是一件麻烦的事情. 推荐SQL Server Management Studio以及Visual Studio下 ...
- vscode python code-runner 中文乱码解决
https://www.cnblogs.com/zhaoshizi/p/9050768.html 这里我使用的是第二种方法
- Web Best Practices
Web Best Practices General Google WebFundamentals - Github JavaScript Style Guide - Github Google In ...