LeetCode 81 搜尋旋轉排序陣列II
阿新 • • 發佈:2020-11-19
LeetCode81 搜尋旋轉排序陣列II
題目描述
假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [0,0,1,2,2,5,6] 可能變為 [2,5,6,0,0,1,2] )。
編寫一個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。
樣例
輸入: nums = [2,5,6,0,0,1,2], target = 0
輸出: true
輸入: nums = [2,5,6,0,0,1,2], target = 3
輸出: false
演算法分析
- 掃描
- 二分 先刪除
時間複雜度
掃描\(O(n)\)
二分\(O(n)\)最壞情況下
Java程式碼
class Solution {
public boolean search(int[] nums, int target) {
for(int i = 0; i < nums.length; i ++) {
if(nums[i] == target){
return true;
}
}
return false;
}
}
class Solution { public boolean search(int[] nums, int target) { if(nums.length == 0) return false; int R = nums.length - 1; while( R >=0 && nums[R] == nums[0]) R--; if(R < 0){ return nums[0] == target; } int l = 0; int r = R; while(l < r){ int mid = l + r + 1 >> 1; if(nums[mid] >= nums[0]) l = mid; else r = mid - 1; } if(target >= nums[0]){ r = l; l = 0; } else{ l++; r = R; } while(l < r) { int mid = l + r >> 1; if(nums[mid] >= target) r = mid; else l = mid + 1; } return nums[r] == target; } }