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

C++ Solution

  1. package leetcode_100;
  2. /***
  3. *
  4. * @author pengfei_zheng
  5. * 循环有序可重复的数组中查找数字是否存在
  6. */
  7. public class Solution81 {
  8. public static boolean search(int nums[], int key) {
  9. int len = nums.length;
  10. int left = 0;
  11. int right = len - 1;
  12. while(left<=right){// enter the loop
  13. int mid = (left+right)/2;
  14. if(nums[mid]==key) return true;// find the target number
  15. if(nums[left]<nums[mid]){//
  16. if(nums[left]<=key && key < nums[mid])
  17. right = mid-1;
  18. else
  19. left = mid+1;
  20. }
  21. else if(nums[left]>nums[mid]){
  22. if(nums[mid] < key && key <= nums[right])
  23. left = mid+1;
  24. else
  25. right = mid -1;
  26. }
  27. else
  28. left++;
  29. }
  30. return false;
  31. }
  32. }

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. asp.net 截屏

    public class HomeController : Controller { // // GET: /Home/ static System.Windows.Forms.WebBrowser ...

  2. u3d DontDestroyOnLoad多场景问题

    using UnityEngine; using System.Collections; public class DontDel : MonoBehaviour { public GameObjec ...

  3. c fopen fread 错误

    真的被,读取一个txt文本,结果一个早上都没搞好 程序如下: 能看出哪里有问题么,输出字符串,得到的结果后面有“屯”或则 “烫”,单个字符输出来也有,为何,搜啊搜,改txt的内容,依旧不行 最后 改f ...

  4. 几个免费IP地址查询API接口

    转:http://blog.csdn.net/ishxiao/article/details/52670242 -------------------------------------------- ...

  5. Logback中文文档(四):Appender

    什么是 Appender Appender是负责写记录事件的组件.Appender 必须实现接口"ch.qos.logback.core.Appender".该接口的重要方法总结如 ...

  6. js 浅拷贝和深拷贝

    传值与传址 了解了基本数据类型与引用类型的区别之后,我们就应该能明白传值与传址的区别了.在我们进行赋值操作的时候,基本数据类型的赋值(=)是在内存中新开辟一段栈内存,然后再把再将值赋值到新的栈中.例如 ...

  7. shell脚本自动清理服务器日志、图片等信息

    在做性能测试的时候,linux服务器时常会产生大量数据,如日志信息,图片信息,文件信息等,压测一段时间后,导致服务器磁盘空间暂满而崩溃,每天手动清理比较麻烦, 利用shell脚本自动清理,脚本如下 1 ...

  8. linux中高亮显示文本的工具 -- bat

    bat 的项目地址 https://github.com/sharkdp/bat bat 是用rust 开发的, 在centos中安装bat需要rust的环境, 我们可以通过安装rust的包管理工具c ...

  9. Apache中的Order Allow,Deny用法详解

    本文讲述了Apache中的Order Allow,Deny用法.分享给大家供大家参考,具体如下: Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directo ...

  10. Dubbo -- 系统学习 笔记 -- 示例 -- 分组聚合

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 分组聚合 按组合并返回结果,比如菜单服务,接口一样,但有多种实现,用group区分 ...