Leetcode刷题(第33题)——搜索旋转排序数组

x33g5p2x  于2022-02-28 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(363)

一、题目

二、示例

  1. 示例一
  2. 输入:nums = [4,5,6,7,0,1,2], target = 0
  3. 输出:4
  4. 示例二
  5. 输入:nums = [4,5,6,7,0,1,2], target = 3
  6. 输出:-1
  7. 示例三
  8. 输入:nums = [1], target = 0
  9. 输出:-1

进阶:你可以设计一个时间复杂度为 O(log n) 的解决方案吗?
三、思路
如果按照普通查询的话,时间复杂度为O(n),如果想要事件复杂度为O(logn),则应该采用二分查找
本题中只是存在旋转排序,但是其顺序任然可以理解为整齐的。只不过需要在其中多一些逻辑判断。
四、代码

  1. /**
  2. * @param {number[]} nums
  3. * @param {number} target
  4. * @return {number}
  5. */
  6. var search = function(nums, target) {
  7. let left = 0;
  8. let right = nums.length - 1
  9. let flag = -1
  10. while(left <= right) {
  11. let mid = Math.floor((left + right) / 2)
  12. if(nums[mid] === target) {
  13. flag = mid
  14. }
  15. if(nums[left] <= nums[mid]) { //旋转节点在mid以右
  16. if(nums[left] <= target && nums[mid] >= target) {
  17. right = mid - 1
  18. }else {
  19. left = mid + 1
  20. }
  21. }else { //旋转节点在mid以左
  22. if(nums[mid] <= target && nums[right] >= target ) {
  23. left = mid + 1
  24. }else{
  25. right = mid - 1
  26. }
  27. }
  28. }
  29. return flag
  30. };

五、总结

相关文章