LeetCode 81. Search in Rotated Sorted Array II
来源:互联网 发布:淘宝店铺等级 编辑:程序博客网 时间:2024/05/17 01:15
问题描述
Follow up for “Search in Rotated Sorted Array”: What if duplicates are
allowed?Would this affect the run-time complexity? How and why?
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).
Write a function to determine if a given target is in the array.
The array may contain duplicates.
问题分析
给定一个排好序但是被旋转的数组,其中数组存在相同的值。这个时候二分可能会退化O(N)的算法。对于之前 nums[mid] < nums[left] 和nums[mid] > nums[left]将会添加一个种新的状态,为nums[mid]== nums[left].这个时候就对于nums[left] == nums[mid]处理的方式就是通过 left++重新来一轮。
代码实现
public boolean search(int[] nums, int target) { if (nums == null || nums.length == 0) { return false; } int left = 0; int right = nums.length - 1; while (left <= right) { int mid = (left + right) / 2; if (nums[mid] == target) { return true; } else if (nums[left] < nums[mid]) {//left比mid小,这个时候是在左边上升期间 if (nums[left] <= target && nums[mid] >= target) { right = mid; } else { left = mid + 1; } } else if (nums[left] > nums[mid]) {// if (nums[mid] <= target && target <= nums[right]) { left = mid; } else { right = mid - 1; } } else { //nums[left] == nums[mid],这个时候没有办法做出决策,重新来一轮,这个时候会退化为一个 O(n)复杂度的算法 left++; } } return false; }
总结
通过nums[mid]和nums[left]之间的大小关系,来确定当前的target可能会落在那个区间之间,然后不断的去缩小这个区间。当nums[left]==nums[mid]的时候,这个时候可以简单的缩小范围。
阅读全文
0 0
- leetcode题解-33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II
- LeetCode 33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II
- LeetCode: Search in Rotated Sorted Array II
- LeetCode Search in Rotated Sorted Array II
- LeetCode : Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II
- [Leetcode] Search in Rotated Sorted Array II
- [leetcode] Search in Rotated Sorted Array II
- [LeetCode]Search in Rotated Sorted Array II
- [leetcode] Search in Rotated Sorted Array II
- LeetCode-Search in Rotated Sorted Array II
- LeetCode - Search in Rotated Sorted Array II
- 【Leetcode】Search in Rotated Sorted Array II
- Leetcode: Search in Rotated Sorted Array II
- 【leetcode】Search in Rotated Sorted Array II
- leetcode Search in Rotated Sorted Array II
- Leetcode: Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II
- java快速寻找一个数组的最大值或最小值, min, max,三种方法
- [LintCode 98] 链表排序(Python)
- UOJ NOIP2015 斗地主 [搜索]
- Spring事务管理
- Android用Okhttp搭建自己的网络框架
- LeetCode 81. Search in Rotated Sorted Array II
- Letter Combinations of a Phone Number
- mongodb 索引的创建于删除
- 使用sqlcmd对sql进行操作
- thinkphp增删改查的where条件句的一些例子
- 递归版冒泡排序
- 关于easyui-datebox日期最大默认值和起止日期验证的问题
- 实现mysql定时任务的方法(二)
- Draw Something