• [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., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

    Write a function to determine if a given target is in the array.

    The array may contain duplicates.

    题意及分析:一个升序数组在某个点被翻转过,判断target在数组中的位置,若不存在返回-1,链表中可能含重复的。如果可能有重复,那我们上一题判断左右部分是否有序的方法就失效了,因为可能有这种13111情况,虽然起点小于等于中间,但不代表右边就不是有序的,因为中点也小于等于终点,所有右边也是有序的。所以,如果遇到这种中点和两边相同的情况,我们可以直接向前移动,删除重复点。

    代码

    class Solution {
        public boolean search(int[] nums, int target) {
           int start = 0, end = nums.length - 1, mid = -1;
    
            while(start <= end){
                mid = (start + end) /2;
                if(target == nums[mid])
                    return true;
    
                if(nums[mid] < nums[end] || nums[mid] < nums[start]){       //如果明确右边有序或者左边无序,可以直接在右边查找
                    if(target > nums[mid] && target <= nums[end]){
                        start = mid + 1;
                    }else
                        end = mid -1;
                }else if(nums[start] < nums[mid] || nums[mid] > nums[end]){  //如果明确左边有序或者右边无序,可以直接在左边查找
                    if(target < nums[mid] && target >=nums[start]){
                        end = mid -1;
                    }else
                        start = mid +1;
                }else{      //出现num[start]==nums[mid]==nums[end],直接向前移动一个,这样可以达到删除重复数。
                    end--;
                }
            }
            return false; 
        }
    }
  • 相关阅读:
    Java操作JSON数据(4,end)--Jackson操作JSON数据
    Java操作JSON数据(3)--fastjson操作JSON数据
    selenium三大切换,三大等待
    iframe切换,xpath函数
    selenium环境搭建,driver方法简述
    Jquery属性和元素操作,ajax
    JS 基础 与 Jquery常用方法
    HTML 基础回顾
    python 协程
    python 多进程
  • 原文地址:https://www.cnblogs.com/271934Liao/p/8056392.html
Copyright © 2020-2023  润新知