zoukankan      html  css  js  c++  java
  • Search in Rotated Sorted Array II

    题目:Follow up for "Search in Rotated Sorted Array":

    What if duplicates are allowed ? Would this affect the run-time complexity? How and why?

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

    思路:

    题目说有重复数字,但是用之前的代码不影响的,只需要修改为bool变量就行。

    之前的-1改成false,之前的返回某一位变成存在。即true,本质上变得更加简单。

    很快accepted!

    参考:Search in Rotated Sorted Array

    代码:

    class Solution {
    public:
    //https://leetcode.com/problems/search-in-rotated-sorted-array-ii/
        bool search(vector<int>& nums, int target) {
            int len=nums.size();
            //找到第一个变小的值下,写一个新函数
            int left=0,right=len-1;
            int f=findFirstBig(nums);
            if(f==0){
                return binareSearch(f,len,nums,target);
            }else{
                if(nums[f-1]>=target){
                    left= binareSearch(0,f-1,nums,target);
                    if(left!=false) return left;
                }
                if(nums[f]<=target){
                    right= binareSearch(f,len-1,nums,target);
                    if(right!=false) return right;
                }
                
                return false;
            }
            
        }
        
        //二分查找
        int binareSearch(int i,int j,vector<int>& nums,int target){
            while(i<=j){
                int mid=(i+j)/2;
                if(nums[mid]==target){
                    return true;
                }
                if(nums[mid]<target){
                    i=mid+1;
                }
                if(nums[mid]>target){
                    j=mid-1;
                }
            }
            if(i>j){
                return false;
            }
        }
        
        //找到第一个减小的数值
        int findFirstBig(vector<int>& nums){
            int len=nums.size();
            for(int i=0;i<len;i++){
                if(i>0&&nums[i]<nums[i-1]){
                    return i;
                }
            }
            return 0;
        }
    };


  • 相关阅读:
    C# FromBase64String 解码换行问题
    Func与Action
    C# 委托及各种写法
    DNS解析过程和域名收敛、域名发散、SPDY应用
    基础数据类型长度
    C#静态常量和动态常量的区别
    dynamic和var的区别
    ADO.NET中的五个主要对象
    Linux 守护进程创建原理及简易方法
    利用/dev/urandom文件创建随机数
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519875.html
Copyright © 2011-2022 走看看