LeetCode (33)Search in Rotated Sorted Array
来源:互联网 发布:c语言预处理指令 编辑:程序博客网 时间:2024/05/07 09:09
(33)Search in Rotated Sorted Array
题目:数组是一个排好序的循环数组,但是头不一定是哪个位置开始的,就比如排好序的数组是“ 1 2 3 4 5 6 7 8 ”,由于是循环的,所以可能给你的顺序是“ 7 8 1 2 3 4 5 6 ”,也可能是“ 4 5 6 7 8 1 2 3 ”,请在这个数组中找到目标数字,返回下标,如果没有则返回“-1”。
例如:
输入数组为“ 4 5 8 1 2 3 ”,寻找目标为“8”,返回下标为2。
再如:
输入数组为“ 4 5 8 1 2 3 ”,寻找目标为“6”,返回-1。
根据这道题的想法, 如果是直接找,会产生TLE的问题,所以第一个想法就是分治法,通过中位数的比较,二分出结果。
在比较过程中,如果简单的进行比中位数大然后抛弃左侧,或者抛弃右侧是不行的,因为是循环数组,那么会有情况是中位数右侧有比中位数大的数,比如:“ 5 6 7 8 9 1 2 ”,这时候查找9很有可能在简单的条件下被舍掉,所以条件就要多想一步了,不仅和中位数比较,还要和左侧或者右侧进行比较,才能完美的找到下次查找的一侧,具体想法就在代码的最后几行的几个判断内,讲的不一定能明白,看懂代码基本就豁然开朗了。
下面是代码:
class Solution {public: int search(vector<int>& nums, int target) { if(nums.size() == 0){ return -1; } if(nums.size() == 1){ if(nums[0] == target) return 0; return -1; } return search_target(nums, 0, nums.size()-1, target); } int search_target(vector<int> nums, int lef, int rig, int target){ int mid = (rig + lef)/2; if(rig - lef == 1){ if(nums[lef] == target) return lef; else if(nums[rig] == target) return rig; return -1; } if(lef == rig){ if(target == nums[lef]) return lef; return -1; } if(nums[lef] > nums[rig] && target < nums[rig] && target > nums[lef]){ return -1; } if(nums[lef] < nums[rig] &&( target < nums[lef] || target > nums[rig])){ return -1; } if(nums[mid] == target){ return mid; } if(nums[lef] == target){ return lef; } if(nums[rig] == target){ return rig; } if(nums[lef] < nums[mid]){ if(target < nums[lef] ||(target > nums[mid])) return search_target(nums, mid, rig, target); return search_target(nums, lef, mid, target); } else{ if(target > nums[rig] || target < nums[mid]) return search_target(nums, lef, mid, target); return search_target(nums, mid, rig, target); } }};
我写的比较麻烦,添加了很多特殊情况判断,其实有的可以忽略简化。
阅读全文
0 0
- LeetCode(33)Search in Rotated Sorted Array
- [leetcode 33] Search in Rotated Sorted Array
- leetcode|33|Search in Rotated Sorted Array
- Leetcode 33 Search in Rotated Sorted Array
- Leetcode[33]-Search in Rotated Sorted Array
- leetcode 33 -- Search in Rotated Sorted Array
- Search in Rotated Sorted Array - LeetCode 33
- leetcode 33 Search in Rotated Sorted Array
- leetcode 33: Search in Rotated Sorted Array
- Leetcode #33 Search in Rotated Sorted Array
- LeetCode #33 Search in Rotated Sorted Array
- Leetcode#33||Search in Rotated Sorted Array
- leetcode 33 : Search in Rotated Sorted Array
- leetcode-33 Search in Rotated Sorted Array
- LeetCode 33: Search in Rotated Sorted Array
- LeetCode(33)-Search in Rotated Sorted Array
- leetcode-33-Search in Rotated Sorted Array
- 【leetcode】【33】Search in Rotated Sorted Array
- 常见MySQL数据类型
- 使用RestTemplate访问restful服务
- 学习线程池笔记1
- io理解
- 5月份Qoo10单品观察:月营收超 $92,074.5的宝宝湿巾(下)
- LeetCode (33)Search in Rotated Sorted Array
- 什么是web标准、可用性、可访问性
- RHEL7.0 安装 Python3.6.1 并搭建Django开发环境
- java 方法重写和重载
- php定时器
- 汇编指令解释大全
- SpringMVC视图解析器--jsp
- 金蝶EAS,代码实现编辑界面EditUI数据不允许修改、删除
- [LeetCode] Guess Number Higher or Lower II