给出一个循环有序数组,与其姊妹篇不同的是其中允许元素出现重复多次。给定一个数字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. C# 当前目录你了解多少

    C#中获取程序运行的当前目录的方法有多种,本文为大家提供三种方式,并作简单分析,有需要的朋友,可以参考下. 在C#中,有很多方式可以获取程序运行的当前目录,常见的方式有: .string strPat ...

  2. 精美的HTML5/CSS3表单 带小图标

    今天我们要来分享一款非常精美的HTML5/CSS3表单,准备地说,这是一款经过美化的input输入表单,每一个输入表单都可以定义其两侧的小图标,非常华丽.另外,这款表单应用还采用了3种不同的风格主题, ...

  3. winform 实现选择文件和选择文件夹对话框

    //选择文件,点击[浏览],选择文件 private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileD ...

  4. EJB里的问题解答

    1.什么是EJB? EJB即Enterprise JavaBean是JavaEE应用的业务层技术标准,以这项技术开发的组件叫做EJB组件. EJB架构师一个用于开发和部署基于组件的分布式业务应用的组件 ...

  5. 使用 SharpSvn 执行 svn 操作的Demo

    1. SharpSvn简介 SharpSvn.dll 是为.Net 2.0-4.0+ 应用提供的 Subversion Client API,更多详细介绍请见 https://sharpsvn.ope ...

  6. UNIX环境编程学习笔记(23)——信号处理初步学习

    lienhua342014-10-29 1 信号的概念 维基百科中关于信号的描述是这样的: 在计算机科学中,信号(英语:Signals)是 Unix.类 Unix 以及其他 POSIX 兼容的操作系统 ...

  7. ARC介绍

    从Ray Wenderlich的教程中截取了一小段作为对objective c中ARC的介绍,讲得比较清晰,原文有丰富的例子,见此 它是怎么工作的 你大概已经熟悉如何手工管理内存了, 就像这样:如果你 ...

  8. vs技巧总结

    工欲善其事,必先利其器,作为一个优秀的程序员很重要的一点就是要善用工具.最近专注于工具开发的我,最近觉得工具的使用,站在巨人的肩膀上进行劳作,而不是不断的造轮子,是非常重要的. 时间最贵,因为对于每个 ...

  9. go语言中文网中的资源

    https://studygolang.com/subject/2     Go 系列教程 https://studygolang.com/subject/74   Go 语言机制 https://s ...

  10. convertView&setTag方法的一点理解

    前言 首先我们要知道setTag方法是干什么的,SDK解释为 Tags Unlike IDs, tags are not used to identify views. Tags are essent ...