
二分
圆滚滚的柴柴
这个作者很懒,什么都没留下…
展开
-
leetcode Java:74. 搜索二维矩阵
题目:74. 搜索二维矩阵思路:二分。先二分查找所在行,再二分该行查找数字。代码:class Solution { public boolean searchMatrix(int[][] matrix, int target) { int row = matrix.length; int col = matrix[0].length; int left = 0; int right = row - 1; int原创 2021-04-14 10:15:27 · 127 阅读 · 0 评论 -
leetcode Java:69. x 的平方根
题目:69. x 的平方根思路:二分。某个数的平方根一定小于本身,二分枚举从1到x的数。代码:class Solution { public int mySqrt(int x) { int left = 0; int right = x; int res = 0; while (left <= right) { int mid = (left + right) / 2; //原创 2021-04-06 16:13:42 · 118 阅读 · 0 评论 -
牛客 剑指offer:有重复数字的二分查找
题目:有重复数字的二分查找思路:二分。如果有重复,需要返回第一个出现的位置,所以当找到一个索引时,我们不停止,而是把它存下来。然后移动右指针,逼近左侧继续寻找。代码:import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 如果目标值存在返回下标,否则返回 -1 * @param nums int整型一维数组 *原创 2021-03-18 16:33:25 · 457 阅读 · 0 评论 -
牛客 剑指offer:转动数组寻找目标值
题目:转动数组寻找目标值思路:二分旋转后的数组,二分中点两侧至少一侧有序。代码:import java.util.*;public class Solution { /** * * @param A int整型一维数组 * @param target int整型 * @return int整型 */ public int search (int[] A, int target) { // write cod原创 2021-03-12 14:42:05 · 90 阅读 · 0 评论 -
牛客 剑指offer:寻找第k大
题目:寻找第k大思路:快排 + 二分快排的思想:每次会找到一个数字的正确位置。所以根据这个位置和k的大小,我们可以确定,要找的数字在左侧还是右侧,因此,每次只需要查找一半,即二分。注意:寻找的是第k大,所以快排需要从大到小排。代码:import java.util.*;public class Solution { public int findKth(int[] a, int n, int K) { // write code here return原创 2021-03-11 15:46:12 · 149 阅读 · 0 评论 -
leetcode Java:162. 寻找峰值
题目:162. 寻找峰值思路:题目有一点很重要:对于所有有效的 i 都有 nums[i] != nums[i + 1]。同时,峰值只要求大于相邻的数。线性查找:从头开始,只需要判断是否大于下一个数;如果不大于下一个数,那么我们会继续查找,也就是说,只要来到了当前位置,就已经保证了当前位置大于前一个位置。二分:找出中点mid,判断mid与mid+1处值的大小如果nums[mid] > nums[mid + 1]:说明峰值在左区间,我们更新右区间为mid;如果nums[mid] < n原创 2021-03-08 15:35:17 · 146 阅读 · 0 评论 -
leetcode Java:154. 寻找旋转排序数组中的最小值 II
题目:154. 寻找旋转排序数组中的最小值 II思路:二分。与上一题不同的是,数组可以重复,那么旋转之后,可以以旋转点分成左右两个有序数组,且左侧数组中的元素一定大于等于右侧数组中的元素。二分时分为以下几种情况:nums[mid] > nums[right] :说明mid在左侧数组,此时移动left,left = mid + 1;nums[mid] < nums[right] :说明mid在右侧数组,此时移动right,注意,right = mid,因为存在mid即是最小值的情况;原创 2021-03-06 11:44:12 · 107 阅读 · 0 评论