给出一个循环有序数组,与其姊妹篇不同的是其中允许元素出现重复多次。给定一个数字target,查找该数字是否存在于该数组中。
 
姊妹篇中的解决方法是使用折半查找,通过判断nums[left]和nums[mid]以及nums[right]与target的大小关系,然后对left,以及right这两个指针进行移动,直到left==right结束为止。
 
但是本题因为元素是可能重复的,因此在判断指针移动的过程中,无法确定移动的是哪一个指针。因此这里的方法上姊妹篇中的稍有差别。不过基础都是二分查找。 
 
参考代码:
//
// 1.cpp
// test
//
// Created by PengFei_Zheng on 28/03/2017.
// Copyright © 2017 PengFei_Zheng. All rights reserved.
// #include<iostream>
#include<vector>
using namespace std; class Solution {
public:
bool search(vector<int>& nums, int target) {
int len = (int)nums.size();
int left = ;
int right = len-;
while(left<=right){
int mid = (left+right)/;
if(nums[mid]==target) return true;
if(nums[left]<nums[mid]){
if(nums[left]<=target && target<nums[mid])
right=mid-;
else
left=mid+;
}
else if(nums[left]>nums[mid]){
if(nums[mid]<=target && target<nums[right])
left=mid+;
else
right=mid-;
}
else
left++;
}
return false;
}
};

C++ Solution

package leetcode_100;
/***
*
* @author pengfei_zheng
* 循环有序可重复的数组中查找数字是否存在
*/
public class Solution81 {
public static boolean search(int nums[], int key) {
int len = nums.length;
int left = 0;
int right = len - 1;
while(left<=right){// enter the loop
int mid = (left+right)/2;
if(nums[mid]==key) return true;// find the target number
if(nums[left]<nums[mid]){//
if(nums[left]<=key && key < nums[mid])
right = mid-1;
else
left = mid+1;
}
else if(nums[left]>nums[mid]){
if(nums[mid] < key && key <= nums[right])
left = mid+1;
else
right = mid -1;
}
else
left++;
}
return false;
}
}

Java Solution

LeetCode 81 Search in Rotated Sorted Array II(循环有序数组中的查找问题)的更多相关文章

  1. LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)

    题目链接 :https://leetcode.com/problems/search-in-rotated-sorted-array/?tab=Description   Problem :当前的数组 ...

  2. [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. ...

  3. leetCode 81.Search in Rotated Sorted Array II (旋转数组的搜索II) 解题思路和方法

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  4. [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索 II

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  5. LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++>

    LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++> 给出排序好的一维有重复元素的数组,随机取一个位置断开 ...

  6. [leetcode]81. Search in Rotated Sorted Array II旋转过有序数组里找目标值II(有重)

    This is a follow up problem to Search in Rotated Sorted Array, where nums may contain duplicates. 思路 ...

  7. [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 migh ...

  8. [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索之二

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  9. LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  10. LeetCode 81.Search in Rotated Sorted Array II(M)

    题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...

随机推荐

  1. ubuntu下gedit和vim输入中文和中文显示

    安装和配置VIM,参考   http://jingyan.baidu.com/album/046a7b3efd165bf9c27fa915.html?picindex=4 在home/你的用户名 这个 ...

  2. VS2012:升级Update2和Update3均告损坏,重装方法

    My steps (after backing up everything before deleting it): 1. Uninstalled VS2012 Pro from Windows 8 ...

  3. 在PC上运行安卓(Android)应用程序的几个方法

    三种方法: 1.在PC安装一个安卓模拟器,在模拟器里面运行apk: 2.虚拟机安装 Android x86 然后在此系统里运行: 3.利用谷歌chrome浏览器运行(这是一个新颖.有前途.激动人心的方 ...

  4. Java读写配置文件——Properties类的简要使用笔记

    任何编程语言都有自己的读写配置文件的方法和格式,Java也不例外. 在Java编程语言中读写资源文件最重要的类是Properties,功能大致如下: 1. 读写Properties文件 2. 读写XM ...

  5. GCT之数学公式(微积分)

  6. selenium 如何处理table

    qi_ling2005  http://jarvi.iteye.com/blog/1477837 andyguo  http://blog.csdn.net/gzh0222/article/detai ...

  7. Hessian资料

    introduction http://www.cnblogs.com/hzmark/archive/2012/11/27/Hessian.html 超时时间设置 http://www.tuicool ...

  8. html实体转换

    摘要: 在 HTML 中,某些字符是预留的.在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签.如果希望正确地显示预留字符,我们必须在 HTML 源代码中 ...

  9. kendo-ui下拉树形选择(DropDownTreeView)

    摘要: 最近项目中有一个特殊的需求,下拉选择部门,但是部门的层级关系要在下来框中体现出来,如下图 下面我就把实现的过程分享给大家,代码如下: dropdowntreeview.js /* * * Dr ...

  10. wcf中的使用全双工通信(转)

    wcf中的使用全双工通信   wcf中的契约通信默认是请求恢复的方式,当客户端发出请求后,一直到服务端回复时,才可以继续执行下面的代码. 除了使用请求应答方式的通信外,还可以使用全双工.下面给出例子: ...