leetCode-Search in Rotated Sorted Array
来源:互联网 发布:手机锁帧软件 编辑:程序博客网 时间:2024/06/05 15:07
Description:
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
My Solution:
//想法是先找到pivot point,然后将nums回复成递增数组(再次旋转len - 旋转点),然后使用二分查找class Solution { public int search(int[] nums, int target) { int len = nums.length; if(len == 0){ return -1; } int index = 0; for(int i = 1;i < len;i++){ if(nums[i] < nums[i - 1]){ index = i; break; } } if(index != 0){ int rotate = len - index; int[] part1= Arrays.copyOf(nums,len-rotate); int[] part2=Arrays.copyOfRange(nums,len-rotate,len); System.arraycopy(part2,0,nums,0,part2.length); System.arraycopy(part1,0,nums,part2.length,part1.length); } int left = 0; int right = len - 1; int middle = (left + right) / 2; while(left <= right){ if(nums[middle] == target){ return (middle + index) % len; } if(nums[middle] > target){ right = middle - 1; }else{ left = middle + 1; } middle = (left + right) / 2; } return -1; }}
Better Solution:
//直接使用二分查找,如果nums[mid] < nums[right],相当于middle在'右边'的递增序列,//如果满足nums[mid] < target && target <= nums[right]的条件,那么可以直接在右边的递增序列中二分查找,将left赋值为mid+1,否则,有两种可能,一种是可以在右边二分查找,一种是在左边二分查找,将right赋值为mid - 1,当nums[mid] < target && target <= nums[right]的时候是一样的。class Solution { public int search(int[] nums, int target) { if(nums == null || nums.length == 0) return -1; int n = nums.length; int left = 0; int right = n - 1; while(left <= right) { int mid = left + (right - left) / 2; if(nums[mid] == target) return mid; if(nums[mid] < nums[right]) { if(nums[mid] < target && target <= nums[right]) left = mid + 1; else right = mid - 1; } else { if(nums[left] <= target && target < nums[mid]) right = mid - 1; else left = mid + 1; } } return -1; } // 0 1 2 3 4 5 6 7 // 6 7 0 1 2 3 4 5 // 2 3 4 5 6 7 0 1}
阅读全文
0 0
- [leetcode][search] Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array II
- LeetCode Search in Rotated Sorted Array
- LeetCode Search in Rotated Sorted Array II
- [Leetcode] Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array
- [Leetcode] Search in a Rotated Sorted Array
- [Leetcode] Search in Rotated Sorted Array II
- leetcode 97: Search in Rotated Sorted Array
- [LeetCode] Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array II
- Leetcode Search in Rotated Sorted Array
- [LeetCode]Search in Rotated Sorted Array
- 分割大头文件并压缩打包shell脚本
- codeforces 148A Insomnia cure
- 调用相册相机
- 104,101规约中的短浮点数
- 分类实现
- leetCode-Search in Rotated Sorted Array
- dict方法总结
- 给sublime3配置C++(编译,运行,和格式化代码)
- 反转链表
- List<Object> 排序
- DaVinci Resolve 14 Studio(视频剪辑工具套装)官方中文破解版V14.2.0下载 | DaVinci Resolve百度云
- RefineNet学习笔记
- CSS page-break-after 属性
- OpenWrt挂载USB,换源,在U盘上安装软件