二分
追光者2020
没有实力的愤怒毫无意义。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode 540. 有序数组中的单一元素(二分)
题目描述给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 1:输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: nums = [3,3,7,7,10,11,11]输出: 10将数组两个为一组划分成若干组,如果每组中的数字相同,那么说明结果不在该组里,如果该组中相邻元素不相等,那么说明结果在包含该组的这一段数组中,不一定是该组元素中的元素。由题意可知,题目中数组元素为奇数,要两个为一组划分需要在数组末尾添加一个原创 2021-08-11 19:06:17 · 215 阅读 · 0 评论 -
LeetCode 4 寻找两个正序数组中的中位数(递归)
题目描述给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例 3:输入:nums1 = [0,0],原创 2021-06-01 11:46:29 · 231 阅读 · 0 评论 -
leetcode 718. 最长重复子数组(DP/二分+哈希)
题目描述给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入: A: [1,2,3,2,1] B: [3,2,1,4,7]输出:3动态规划,使用 dp[i][j] 表示以 A[i - 1]和 B[j - 1] 结尾的 最长 相同公共子串长度,属性是最大值。 在计算过程中会使用到 dp[i-1][j-1],因此下标从1开始。如果A[i - 1]和 B[j - 1]相等,那么就在dp[i-1][j-1]的基础上加1,也就是以 A[i - 2]和 B[j - 2] 为结原创 2021-08-11 11:48:33 · 289 阅读 · 0 评论 -
LeetCode 167. 两数之和 II - 输入有序数组(二分/双指针)
题目描述给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例 1:输入:numbers = [2,7,11,15], target原创 2021-08-10 19:10:14 · 125 阅读 · 0 评论 -
LeetCode 69. x 的平方根 and 浮点数平方根(二分)
题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。整数求平方根是下取整,因此判断条件是寻找满足条件的第一个数,注意题目中会给定: 2147395599 来求解平方根,会出现越界,因此使用long long 类型的数据。特判一下如果给定的数字原创 2021-07-07 11:53:33 · 811 阅读 · 0 评论 -
LeetCode 287 寻找重复数(二分)
题目描述给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。示例 1:输入:nums = [1,3,4,2,2]输出:2示例 2:输入:nums = [3,1,3,4,2]输出:3示例 3:输入:nums = [1,1]输出:1示例 4:输入:nums = [1,1,2原创 2021-06-12 11:26:26 · 177 阅读 · 0 评论 -
LeetCode 378 有序矩阵中第K小的元素(二分)
题目描述给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。示例 1:输入:matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8输出:13解释:矩阵中的元素为 [1,5,9,10,11,12,13,13,15],第 8 小元素是 13示例 2:输入:matrix = [[-5]], k = 1输出:-5题解:首先找到 mi原创 2021-06-10 15:58:12 · 199 阅读 · 0 评论 -
寻找峰值
题目描述峰值元素是指其值大于左右相邻值的元素。给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。示例 1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入:nums = [1,2,1,3,5,6,4]输出:1 或 5解释:你的函数可以返回索引 1,其峰值元素为 2;或者返回索引 5, 其峰原创 2021-05-12 10:50:15 · 215 阅读 · 0 评论 -
leetcode 33. 搜索旋转排序数组
题目描述整数数组 nums 按升序排列,数组中的值互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整原创 2021-05-10 20:42:06 · 138 阅读 · 0 评论 -
完全二叉树结点总数/leetcode 222. 完全二叉树的节点个数(二分)
题目描述给定一棵完全二叉树的头节点head,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。示例1输入 {1,2,3}返回值 3满二叉树节点的计算方法:如果一个二叉树的层数为K,且结点总数是(2^k) -1。如果左右子树层数相同,那么可以按照满二叉树公式计算节点;如果左右子树层数不同,那么需要一直向下遍历,该棵树的节点个数等于1+左子树节点数+右子树节点数。此时与普通二叉树的计算方式类似,只是如果是左右子树高度相等的话,那么可以直接计算,不需要递原创 2021-05-07 20:41:58 · 1097 阅读 · 0 评论 -
矩阵元素查找
题目描述已知int一个有序矩阵mat,同时给定矩阵的大小n和m以及需要查找的元素x,且矩阵的行和列都是从小到大有序的。设计查找算法返回所查找元素的二元数组,代表该元素的行号和列号(均从零开始)。保证元素互异。示例1输入 [[1,2,3],[4,5,6]],2,3,6返回值 [1,2]该题目解题思路与二维数组的查找类似,都是选取二维数组右上角开始,如果小于右上角元素则 j --,大于则 i ++ ,相等就将 该元素的 横纵坐标放到vector中。class Solution {public原创 2021-05-02 15:04:13 · 499 阅读 · 0 评论 -
day7:68. 0到n-1中缺失的数字(二分)
问题描述:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。样例:输入:[0,1,2,4]输出:3采用的是减治法,折半查找。注意输入是有序序列。其查找过程为:取有序序列中间记录作为比较对象,若给定值与中间记录相等,则查找成功;若给定值小于中间记录,则在中间记录的左半区继续查找,否则在右半区继续查找,不断重复上述过程直到成功,若所查找区域无记录,则查找失败。时间复杂度为O(logn)。原创 2020-06-24 10:30:02 · 277 阅读 · 0 评论 -
day13:69. 数组中数值和下标相等的元素(二分法)
问题描述:假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等。注意:如果不存在,则返回-1。样例输入:[-3, -1, 1, 3, 5]输出:3使用二分法,二分法使用前提必须是有序数列,在本题中,nums[i]-i>nums[i-1]-(i-1) 移项之后可以看出是递增序列。 计算中间位置mid=(l+r)/2 然后比较nums[mid]-mid 与原创 2020-06-24 10:36:53 · 287 阅读 · 0 评论 -
二分模板(整数二分,浮点二分)
二分是经常使用的方法,等抽时间总结一下二分的遇到的题目。注意,二分并不一定要求序列要有序,只要序列满足某种特定的特征即可。二分的模板有两种:一种是:找大于等于给定数的第一个位置(满足条件的第一个数)一种是:找小于等于给定数的最后一个数(满足条件的最后一个数字)https://www.acwing.com/blog/content/346/二分的基本流程如下:确定二分的边界设计一个check函数,能够进行二分的判定方法判断一下区间该如何更新 如果更新的方式是l=mid,r =mid-原创 2021-04-21 21:17:49 · 1741 阅读 · 2 评论 -
day18:22. 旋转数组的最小数字(二分法)LeetCode154 寻找旋转数组的最小值Ⅱ
问题描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个升序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。数组可能包含重复项。注意:数组内所含元素非负,若数组大小为0,请返回-1。样例输入:nums=[2,2,2,0,1]输出:0巧妙地使用了二分法,附上大佬的题解过程,乍一看,好像不好理解,仔细一看,发现很巧妙。首先是去掉最后一段不满足单调递增的数组部分,其余部分都是满足二分条件原创 2020-06-24 10:38:13 · 226 阅读 · 0 评论 -
day30:二维数组的查找
问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。样例[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]如果输入查找数值为7,则返回true,如果输入查找数值为5,则返回false题目中给定的二维数组是有序的,可以看到右上角的数组比其所在行的数字要大,比其所在列的数字要小。所以可以根据这个特性进行比较,将输入的数字与右上角的原创 2020-06-24 10:43:08 · 212 阅读 · 0 评论 -
day40:67. 数字在排序数组中出现的次数(二分查找)
问题描述:统计一个数字在排序数组中出现的次数。例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。样例输入:[1, 2, 3, 3, 3, 3, 4, 5] , 3输出:4使用二分搜索,只不过是经典案例的改编,经典案例是寻找一个数字,该数字并不是重复的,而本题目是寻找一个数字出现的次数,该数字会出现多次,折半查找的思路是:1)设置初始查找区间:low=0,high=n-12)测试查找区间是否存在,如果不存在,则查找失败,否原创 2020-07-05 17:30:37 · 1651 阅读 · 0 评论
分享