leetcode 81. Search in Rotated Sorted Array II-旋转数组|二分查找
来源:互联网 发布:java 日志监控框架 编辑:程序博客网 时间:2024/05/16 14:47
原题链接:81. Search in Rotated Sorted Array II
【思路-Java、Python】 二分查找实现
本题采用二分法实现,但是比较挠头的是边界问题,而且元素有重复,相比纯粹递增的数组难度要大得多,要解决这个问题,首先要对所有可能情况进行分类,然后对每种可能的类别进行相应的处理,本题的类别可以表示为下面的趋势图
暂且不考虑nums[mid] = nums[left]的情况,本题大致可以简化为上图两种情况,可能的情况划分出来,那么解决本题就比较容易了:
当 nums[mid] = nums[left] 时,这时由于很难判断 target 会落在哪,那么只能采取 left++
当 nums[mid] > nums[left] 时,这时可以分为两种情况,判断左半部比较简单
当 nums[mid] < nums[left] 时,这时可以分为两种情况,判断右半部比较简单
public class Solution { public boolean search(int[] nums, int target) { int left = 0, right = nums.length - 1; while (left <= right) { int mid = (left + right) / 2; if (target == nums[mid]) return true; if (nums[mid] == nums[left]) left++; else if (nums[mid] > nums[left]) { if (nums[left] <= target && nums[mid] > target) right = mid - 1; else left = mid + 1; } else { if (nums[mid] < target && target <= nums[right]) left = mid + 1; else right = mid - 1; } } return false; }}271 / 271 test cases passed. Runtime: 1 ms Your runtime beats 23.71% of javasubmissions.
class Solution(object): def search(self, nums, target): """ :type nums: List[int] :type target: int :rtype: bool """ left, right = 0, len(nums) - 1 while left <= right : mid = (left+right) / 2 if nums[mid] == target : return True if nums[mid] == nums[left] : left += 1 elif nums[mid] > nums[left] : if nums[mid] > target and nums[left] <= target : right = mid - 1 else : left = mid + 1 else : if nums[mid] < target and nums[right] >= target : left = mid + 1 else : right = mid - 1 return False271 / 271 test cases passed. Runtime: 56 ms Your runtime beats 57.35% of pythonsubmissions.
1 0
- leetcode 81. Search in Rotated Sorted Array II-旋转数组|二分查找
- leetcode 81. Search in Rotated Sorted Array II 二分查找
- Search in Rotated Sorted Array II 旋转数组二分查找 有重复
- LeetCode @ Search in Rotated Sorted Array 旋转数组查找
- LeetCode @ Search in Rotated Sorted ArrayII 旋转数组查找II
- LeetCode 81. Search in Rotated Sorted Array II(搜索旋转的数组)
- Leetcode 81. Search in Rotated Sorted Array II 旋转数组查询2 解题报告
- [leetcode]【数组】81. Search in Rotated Sorted Array II
- leetcode 刷题之路 35 Search in Rotated Sorted Array II (旋转排序数组查找终极版)
- Search in Rotated Sorted Array II 旋转的数组中查找,有重复元素
- Search in Rotated Sorted Array-旋转数组的查找
- leetCode 81.Search in Rotated Sorted Array II (旋转数组的搜索II) 解题思路和方法
- LeetCode 81 Search in Rotated Sorted Array II (二分)
- Leetcode 81 - Search in Rotated Sorted Array II(二分)
- leetcode 二分查找 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 (二分查找)
- 图解使用Telnet程序手工发送邮件
- mac下编译安装opencv
- hrtimer的简单使用
- ASP.NET中,HiddenField隐藏控件的用法
- 高性能Java系统实现与调优
- leetcode 81. Search in Rotated Sorted Array II-旋转数组|二分查找
- YOLO论文记之模型篇
- fedora23 安装tftpd
- 【JavaEE】SSH+Spring Security+Spring oauth2整合及example
- log4j详细配置,一看就懂
- Count Primes
- Latex中文显示
- LOL中的Lissandra怎么通过ZBrush绘制出来
- 软件测试导向