• 81.Search in Rotated Sorted Array II---二分变形


    题目链接

    题目大意:与33题类似,只是这里数组中有重复数值。

    法一:解法与33题类似,只是这里要处理1,3,1,1,1这种情况,即有重复值时,mid与left和right都相等时,可以采用right--的方式错开相等值再比较。代码如下(耗时2ms):

     1     public boolean search(int[] nums, int target) {
     2         int left = 0, right = nums.length - 1;
     3         while(left <= right) {
     4             int mid = (left + right) / 2;
     5             if(nums[mid] == target || nums[left] == target || nums[right] == target) {
     6                 return true;
     7             }
     8             //如果左数组有序
     9             else if(nums[left] < nums[mid]) {
    10                 //如果target在左数组中
    11                 if(target < nums[mid] && target > nums[left]) {
    12                     right = mid - 1;
    13                 }
    14                 else {
    15                     left = mid + 1;
    16                 }
    17             }
    18             //如果右数组有序
    19             else if(nums[mid] < nums[right]){
    20                 //如果target在右数组中
    21                 if(target < nums[right] && target > nums[mid]) {
    22                     left = mid + 1;
    23                 }
    24                 else {
    25                     right = mid - 1;
    26                 }
    27             }
    28             //如果出现1,3,1,1,1的情况,mid值与left和right都相等,则将right--再比较
    29             else {
    30                 right--;
    31             }
    32         }
    33         return false;
    34     }
    View Code
  • 相关阅读:
    Hibernate知识回顾
    Lucene搜索过程的核心类
    JSP知识回顾
    Java Swing 知识回顾
    Spring知识回顾
    javaDocking 学习
    Lucene搜索范围
    MINA 学习
    java 阿拉伯人民币转换为中文
    oracle提高查询效率方法
  • 原文地址:https://www.cnblogs.com/cing/p/9212551.html
Copyright © 2020-2023  润新知