二分查找
软件园里卖煎饼
以文载意,以理铸心
展开
-
每日一题.611. 有效三角形的个数
解题思路对nums排序,先确定a,b的值,在确定c的值,只要c<a+b即可搭配二分查找代码class Solution { public int triangleNumber(int[] nums) { Arrays.sort(nums); int ans = 0,n = nums.length; for (int i=0;i<n;i++){ for (int j=i+1;j<n;j++){原创 2021-08-09 15:51:03 · 72 阅读 · 0 评论 -
每日一题:1818. 绝对差值和
解题思路1.用一个新的数组代替nums1,并排序2.找到当前i处能变化的最大值max3.最终sum-max就是答案代码class Solution { public int minAbsoluteSumDiff(int[] nums1, int[] nums2) { final int MOD = 1000000007; int n = nums1.length; int[] rec = new int[n]; System.原创 2021-07-14 10:58:44 · 69 阅读 · 0 评论 -
每日一题:374. 猜数字大小
解题思路二分查找代码/** * Forward declaration of guess API. * @param num your guess * @return -1 if num is lower than the guess number * 1 if num is higher than the guess number * otherwise return 0 * int guess(int num); */原创 2021-06-16 14:46:15 · 75 阅读 · 0 评论 -
每日一题:154. 寻找旋转排序数组中的最小值 II
解题思路因为有重复项的出现所以else if的第三步特别关键使right–缩小了搜索范围 同时也保证了不会漏掉数字[3,3,3,1,3][10,1,10,10,10]比如在这两种很特殊的情况下,1既有可能在mid左边也有可能在mid右边代码class Solution { public int findMin(int[] nums) { int left = 0,right = nums.length-1; if(nums[right]>nums[原创 2021-04-09 13:00:07 · 71 阅读 · 0 评论 -
每日一题:81. 搜索旋转排序数组 II
解题思路因为是有序数列,所以使用二分搜索,又因为他是一个对某一个点进行了旋转的数组,所以我们主要进行的步骤为下1.分情况:如果第一个数大于target那么说明,target在下一段上升序列中,我们就需要找到下一段上升序列的开头如果第一个数小于target那么说明,target在开头的这段上升序列中,我们需要找到这段序列的尾巴如果第一个数就是target那么直接返回true2.对得出的begin和end进行二分搜索代码二分搜索class Solution { public boole原创 2021-04-07 12:33:46 · 116 阅读 · 2 评论 -
二分查找的个人理解笔记以及模板
最近遇到了很多的搜索类型的题目,用二分查找也用的比较多,所以记录一下二分查找模板(最简单的搜索一个符合要求的数)int binarySearch(int[] nums, int target) { int left = 0; int right = nums.length - 1; // 注意 while(left <= right) { // 注意 int mid = (right + left) / 2; if(nums[mid] =原创 2021-04-07 12:57:16 · 73 阅读 · 0 评论 -
关于每日一题153的解法改进
解题思路采用二分查找是正确的选择,相比于遍历一次效率提升了不少代码class Solution { public int findMin(int[] nums) { int left = 0,right = nums.length-1; if(nums[right]>nums[left]) return nums[left]; while (left<right){ //[1,3,3]原创 2021-04-09 12:55:44 · 54 阅读 · 0 评论