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;
    		}
    };
    

    三、优化措施

    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    汇编代码中db,dw,dd的区别
    利用汇编详解栈结构
    80X86指令总结
    【原创】自己动手写的一个查看函数API地址的小工具
    【初学破解】暴力破解绕过程序认证
    OD基本汇编指令
    排序算法
    数据聚类算法-K-means算法
    数据预测算法-ARIMA预测
    数据预测算法-指数平滑法-1
  • 原文地址:https://www.cnblogs.com/siweihz/p/12238585.html
Copyright © 2011-2022 走看看