zoukankan      html  css  js  c++  java
  • 刷题33. Search in Rotated Sorted Array

    一、题目说明

    这个题目是33. Search in Rotated Sorted Array,说的是在一个“扭转”的有序列表中,查找一个元素,时间复杂度O(logn)。

    二、我的解答

    这是一个查找,根据复杂度,我们知道只能用二分查找。但由于这个不是一个完全的有序列表,故需要改造。先写出二分查找(来源于数据结构):

    二分查找:
    int search(vector<int>& nums, int target){
    			if(nums.size()<0) return -1;
    			int start = 0, end=nums.size()-1;
    			int mid = -1;
    			while(start <= end){
    				//mid = (start + end) /2;
    				mid = start + (end - start) /2;
    				if(target == nums[mid]){
    					return mid;
    				}else if(target < nums[mid]){
    					end = mid -1;
    				}else{
    					start = mid + 1;
    				}
    			}	
    			return -1;
    		}
    

    然后在二分查找基础上进行改进:

    class Solution{
    	public:
    		int search(vector<int>& nums, int target){
    			if(nums.size()<0) return -1;
    			int start = 0, end=nums.size()-1;
    			int mid = -1;
    			while(start<=end){
    			    mid = start + (end - start) / 2;
    			    if(nums[mid] == target) return mid;
    			    
    			    //前半部分有序
    				if(nums[start]<=nums[mid]){
    					//target在前半部分
    					if(target >=nums[start] && target<nums[mid]){
    						end = mid -1;
    					}else{
    						start = mid + 1;
    					}
    				}else{
    					//后半部分有序 
    					if(target<=nums[end] && target>nums[mid]){
    					    start = mid + 1;
    					}else{
    						end = mid -1;
    					}
    				}
    			}	
    			return -1;
    		}
    };
    

    三、优化措施

    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    86. 分隔链表
    85. 最大矩形
    84. 柱状图中最大的矩形
    82. 删除排序链表中的重复元素 II
    80. 删除排序数组中的重复项 II
    77. 组合
    java-xml
    java-反射
    springboot解决跨域问题(CorsConfig )
    解决oracle锁表
  • 原文地址:https://www.cnblogs.com/siweihz/p/12238585.html
Copyright © 2011-2022 走看看