Binary Search
USC_ECE
这个作者很懒,什么都没留下…
展开
-
JZ6 旋转数组的最小数字
这道题和LeetCode 154一样。 import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { // Corner Case if(array.length == 0){ return 0; } int left = 0, right = array.length原创 2020-07-26 09:21:05 · 163 阅读 · 0 评论 -
LeetCode 300. Longest Increasing Subsequence
Dynamic Programming Time Complexity = O(n^2), Space Complexity = O(n). 由于这个最长上升序列不一定是连续的,对于每一个新加入的数,都有可能跟前面的序列构成一个较长的上升序列,或者跟后面的序列构成一个较长的上升序列。比如1,3,5,2,8,4,6,对于6来说,可以构成1,3,5,6,也可以构成2,4,6。因为前面那个序列长为4,后面的长为3,所以我们更愿意6组成那个长为4的序列,所以对于6来说,它组成序列的长度,实际上是之前最长一个升.原创 2020-06-07 12:48:16 · 105 阅读 · 0 评论 -
LeetCode 275. H-Index II
class Solution { public int hIndex(int[] citations) { /** * Given a sorted list citations of size n in ascending order, * one is asked to find the first number citations[i] which meets * the constraint of citations[i.原创 2020-06-07 11:25:30 · 124 阅读 · 0 评论 -
LeetCode 153 & 154. Find Minimum in Rotated Sorted Array I & II
这两道题是同一类型的,所以放在一起讨论。 153 因为mid = left + (right - left) / 2 是向下取整的,所以当只剩两个元素的时候会有left = mid。我们就必须考虑 nums[left] == nums[mid]的情况,有点麻烦。因此较好的选择是比较nums[mid]和nums[right]的关系。 class Solution { public int findMin(int[] nums) { int l = 0, r = nums.len原创 2020-06-07 06:44:48 · 168 阅读 · 2 评论 -
LeetCode 33. Search in Rotated Sorted Array & 81. Search in Rotated Sorted Array II
class Solution { public int search(int[] nums, int target) { int left = 0; int right = nums.length - 1; while(left <= right){ int mid = (left + right) / 2; if(nums[mid] == target){ ret.原创 2020-06-05 15:27:31 · 115 阅读 · 1 评论 -
LeetCode 34. Find First and Last Position of Element in Sorted Array
这道题总结了如何查找First Position 和 Last Position,是目前我在Binary Search的题目里遇到的发人深省的好题,值得记忆他的思路和技巧。代码入下: class Solution { public int[] searchRange(int[] nums, int target) { if(nums == null || nums.length == 0){ return new int[] {-1, -1};原创 2020-05-28 10:31:23 · 92 阅读 · 0 评论 -
关于Binary Search退出循环条件的思考
这还只是自己的一点不成熟总结。下面以Leetcode35.Search Insert Position为例。 如果存在low= mid 或者 high= mid 的操作,那么退出循环的条件应为low < high。因为我们的low 和high 指针在重合以后有可能进入死循环,所以low = high - 1 的时候应当为最后一次进入循环。代码如下: class Solution { public int searchInsert(int[] nums, int target)...原创 2020-05-28 08:28:42 · 228 阅读 · 0 评论
分享