
二分查找
超悦人生
公众号【超悦编程】,专注于校招、算法、数据结构和计算机基础知识。
展开
-
LeetCode34.在排序数组中查找元素的第一个和最后一个位置(java实现)
问题描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回[-1, -1]。解决方案开始位置和结束位置分别用二分查找,注意边界条件即可,代码如下:public int[] searchRange(int[] nums, int targe...原创 2019-10-23 21:20:00 · 268 阅读 · 0 评论 -
LeetCode74.搜索二维矩阵(java实现)
问题描述编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:1.每行中的整数从左到右按升序排列。2.每行的第一个整数大于前一行的最后一个整数。解决方案把二维数组当做一维数组来看,二分查找,代码如下:public boolean searchMatrix(int[][] matrix, int target) { if((matr...原创 2019-10-23 21:19:33 · 263 阅读 · 0 评论 -
LeetCode240.搜索二维矩阵 II(java实现)
问题描述编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:1.每行的元素从左到右升序排列。2.每列的元素从上到下升序排列。解决方案从右上角开始搜索,逐步进行,代码如下:public boolean searchMatrix(int[][] matrix, int target) { if((matrix == null || ...原创 2019-10-23 21:18:59 · 202 阅读 · 0 评论 -
LeetCode153.旋转数组的最小数字(java实现)
问题描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。解决方案以数组中最后一个元素为基准,进行二分查找,代码如下: public int findMin(int[] nums) { if(nums...原创 2019-10-23 21:17:27 · 260 阅读 · 0 评论 -
LeetCode33.搜索旋转排序数组(java实现)
问题描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7] 可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。解决方案首先找到数组中元素最小的位置索引,然后分开进行二分查找...原创 2019-10-23 21:16:57 · 202 阅读 · 0 评论 -
LeetCode81.搜索旋转排序数组 II(java实现)
问题描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。解决方案如果二分中点元素的值和数组最后一个元素的值相同,那么依次向后移动mid元素,循环即可,代码如下:public boolean...原创 2019-10-23 21:16:23 · 241 阅读 · 0 评论 -
LeetCode 69.x 的平方根(java实现)
问题描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。解决方案注意整型值相乘溢出的问题,用除来判断。比如mid > x / mid,代码如下:public int mySqrt(int x) { if(x == 0) retur...原创 2019-10-23 21:15:41 · 293 阅读 · 0 评论 -
LeetCode668.乘法表中第 k 小的数(java实现)
问题描述几乎每一个人都用 乘法表。但是你能在乘法表中快速找到第 k 小的数字吗?给定高度 m 、宽度 n 的一张 m * n的乘法表,以及正整数 k,你需要返回表中第 k 小的数字。解决方案首先编写一个计算乘法表中小于等于某个整数的数的个数的函数,然后运用二分查找进行搜索,代码如下:public int findKthNumber(int m, int n, int k) { ...原创 2019-10-23 21:15:09 · 329 阅读 · 0 评论 -
求根号2的值(两种方法 java实现)
计算根号2的值,保留小数点后10位。二分查找法和牛顿迭代法原创 2019-10-23 16:26:11 · 4296 阅读 · 0 评论 -
1201. Ugly Number III
LeetCode的第1201道题目:Write a program to find the n-th ugly number.Ugly numbers are positive integers which are divisible by a or b or c.原创 2019-09-23 11:20:44 · 622 阅读 · 0 评论 -
查找峰值元素
峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠nums[i+1],而且nums[1]>nums[0],nums[nums.length-2]>nums[nums.length-1].找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。原创 2019-09-15 15:58:27 · 846 阅读 · 0 评论 -
最长递增子序列
给定一个数组,求该数组最长递增子序列的长度。原创 2019-09-12 22:44:24 · 105 阅读 · 0 评论