zoukankan      html  css  js  c++  java
  • LeetCode之Search in Rotated Sorted Array二

    题目: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.

    分析:与上题不同的是允许数组中有重复的元素,这个时候就只需要特殊处理这个相同的元素即可。

    代码:

    class Solution2{
    public:
    	int search(int A[], int n, int target) {
    		int first =0 ;int last = n;
    		while(first != last){
    			int mid = (first + last)/2;
    			if (A[mid] == target){
    				return mid;
    			}
    
    			if (A[first] < A[mid]){ //first到mid之间元素内有序,那么就在该段内尝试查找
    				//判断target是否在范围之内
    				if (A[first]<=target && target < A[mid]){
    					last = mid;
    				}else{
    					first = mid + 1;
    				}
    			}else if(A[first] > A[mid]){ //first到mid之间元素无序,那么这时后半部分有序,尝试查找。
    				//判断target是否在范围之内
    				if (A[mid] < target && target <= A[last - 1]){
    					first = mid + 1;
    				}else{
    					last = mid;
    				}
    			}else{//处理重复元素的情况
    				first++ ;//直接略过该元素
    			}
    		}
    		return -1;
    	}
    };


    生命不止,奋斗不息!
  • 相关阅读:
    观察者模式
    字符串操作函数
    位域结构体的字节对齐
    备忘任务
    Linux编程下EAGAIN和EINTR宏的含义及处理
    Linux 中write()函数的出错情况及处理
    Nginx配置配置文件nginx.conf的设置
    Linux编程获取本地IP
    redis与memcached比较
    TCP通讯socket自定义协议的实现
  • 原文地址:https://www.cnblogs.com/huzongzhe/p/6735196.html
Copyright © 2011-2022 走看看