iT邦幫忙

2024 iThome 鐵人賽

0
佛心分享-刷題不只是刷題

刷經典 LeetCode 題目系列 第 65

經典LeetCode 33. Search in Rotated Sorted Array

  • 分享至 

  • xImage
  •  

這題是一道經典的二元搜尋應用題,結合了排序數列的特性與旋轉點的處理,考如何在這種變化下仍然保持高效搜尋的能力。

題目:

給定一個升序排序的整數陣列 nums,但該陣列已經在某個未知的點上進行了旋轉(例如, [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2])。現在給定一個目標值 target,如果 target 在陣列中,回傳它的索引;否則,回傳 -1

範例:

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

解題思路

題目要求用 O(log n) 的時間複雜度演演算法來搜尋,直覺就是暗示用二元搜尋來實作搜尋,

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0, right = nums.size() - 1;

        while (left <= right) {
            int mid = left + (right - left) / 2;

            if (nums[mid] == target) {
                return mid;
            }

            if (nums[left] <= nums[mid]) {
                if (nums[left] <= target && target < nums[mid]) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            } else {
                if (nums[mid] < target && target <= nums[right]) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            }
        }

        return -1;
    }
};

參考:
#33. Search in Rotated Sorted Array


上一篇
經典LeetCode 49. Group Anagrams
下一篇
經典LeetCode 26. Remove Duplicates from Sorted Array
系列文
刷經典 LeetCode 題目80
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言