二分
力扣中的二分查找题目练习
口木西成
沙坡村男子技术学院,java后台开发
展开
-
学算法,先从二分查找开始吧
总纲思路很简单,细节是魔鬼。分为三个常用场景:寻找一个数,寻找左侧边界,寻找右侧边界。最后给出力扣上的题目例子。基础框架int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = (right + left) / 2; ...原创 2020-04-02 13:46:32 · 141 阅读 · 1 评论 -
275H指数II
题目描述给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列。编写一个方法,计算出研究者的 h 指数。h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)至多有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)"示例:输入: cita...原创 2020-04-02 11:40:16 · 238 阅读 · 1 评论 -
162寻找峰值
题目描述峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。说明:你的解法应该是 O(logN) 时间复杂度的。思路分析O(N)。遍历所有元素,找到max或者找到大于前后...原创 2020-04-02 11:39:48 · 108 阅读 · 0 评论 -
154寻找旋转排序数组中的最小值II
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。思路分析很明显,看出本题与153差别在数组中存在重复数组,需要处理 mid 和 right 元素相同的情况。我们要得到的是min。假设right是min,分为唯一min和不唯一m...原创 2020-04-02 11:38:59 · 129 阅读 · 0 评论 -
153寻找旋转排序数组中的最小值
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。思路分析二分的找左边区间。套模板。代码实现 public int findMin(int[] nums) { if (nums == null || n...原创 2020-04-02 11:38:16 · 98 阅读 · 0 评论 -
35搜索插入位置
题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。思路分析打板题。因为目标值不存在数组还得返回插入的位置,即返回left,找第一个大于此元素的下标。代码实现 public int searchInsert(int[] nums, int target) { i...原创 2020-04-02 11:37:24 · 111 阅读 · 0 评论 -
33搜索旋转排序数组
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。思路分析时间复杂度logn,加上部分有序用二分。两次二分。一...原创 2020-04-02 11:36:52 · 96 阅读 · 0 评论 -
704二分查找
题目描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。提示:你可以假设 nums 中的所有元素是不重复的。n 将在 [1, 10000]之间。nums 的每个元素都将在 [-9999, 9999]之间。思路分析最基础的二分查找。在不重复的数组中找到目标数。...原创 2020-04-02 11:35:34 · 104 阅读 · 0 评论