给出一个循环有序数组,与其姊妹篇不同的是其中允许元素出现重复多次。给定一个数字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# 判断网站是不是discuz论坛

    if (this.txturl.Text == "") { this.lblmess.Text = "请输入网址"; } else { GetHttp getH ...

  2. C# 判断两张图片是否一致,极快速

    #region 判断图片是否一致 /// <summary> /// 判断图片是否一致 /// </summary> /// <param name="img& ...

  3. win用VNC远程Ubuntu教程

    转载:https://blog.csdn.net/jiangchao3392/article/details/73251175 1.安装Xrdp Windows远程桌面使用的是RDP协议,所以ubun ...

  4. 关于golang中包(package)的二三事儿

    golang的package和其他语言的组织方式完全不同,刚开始接触时,很不适应. golang的package的特点: 1.go的package不局限于一个文件,可以由多个文件组成. 组成一个pac ...

  5. 查看cp进度,使用watch

    watch -n 1 -d du -sh dir 每隔1s查看当前目录所占空间大小

  6. Maven 那点事儿

    http://my.oschina.net/huangyong/blog/194583?fromerr=Dmf7HPwX Java那点事儿 Maven Smart 目录[-] 0. 前言 1. 安装 ...

  7. 1. BeeGo 介绍与项目的创建,启动

    简介 BeeGo是一个快速开发Go而应用的HTTP框架,他可以用来快速开发API,web以及后端服务等各种应用,是一个restful 的框架,主要涉及灵感来源于tornado,sinatr和flask ...

  8. servlet3.0 新特性和springboot Listener和filter案例

    1.filter package com.newtouch.zxf.filter; import java.io.IOException; import javax.servlet.Filter; i ...

  9. git 使gitnore立即生效

    由于之前有些需要过滤的文件已经提交到版本库了,之后再想起来添加时候已经晚了,使用如下方法 Git忽略规则和.gitignore规则不生效的解决办法   Git忽略规则: 在git中如果想忽略掉某个文件 ...

  10. PHP常用的缓存技术汇总

    一.数据缓存 这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接 ...