zoukankan      html  css  js  c++  java
  • 2021.4.7-刷题(二分查找)

    题目链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array
    题目描述:
    整数数组 nums 按升序排列,数组中的值 互不相同 。
    在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
    给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。

    示例 1:
    输入:nums = [4,5,6,7,0,1,2], target = 0
    输出:4

    示例 2:
    输入:nums = [4,5,6,7,0,1,2], target = 3
    输出:-1

    示例 3:
    输入:nums = [1], target = 0
    输出:-1

    题解:
    本题可以直接用遍历的方式,但是考虑到如果数量级较大,搜索查找最好用二分查找。

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            int n = nums.size();
            if(!n)
                return -1;
            if(n == 1)
                return nums[0] == target ? 0: -1;
            int left = 0;
            int right = n - 1;
            while(left <= right)
            {
                int mid = (left + right) / 2;
                if(nums[mid] == target)
                    return mid;
                if(nums[0] <= nums[mid])
                {
                   if(nums[0] <= target && target < nums[mid] )
                   {
                       right = mid - 1;
                   }else{
                       left = mid + 1;
                   }
    
               }else
               {
                   if(nums[mid] < target && target <= nums[n - 1] )
                   {
                       left = mid + 1;
                   }else{
                       right = mid - 1;
                   }
               }
    
            }
            return -1;
    
        }
    };
    
    
  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/ZigHello/p/14629920.html
Copyright © 2011-2022 走看看