二分查找
萌萌,站起来
这个作者很懒,什么都没留下…
展开
-
二分搜索 总结
我们还根据逻辑将「搜索区间」全都统一成了两端都闭,便于记忆,只要修改两处即可变化出三种写法:int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { int mid = left + (right - l...原创 2020-07-12 15:49:30 · 105 阅读 · 0 评论 -
leetcode 1300. 转变数组后最接近目标值的数组和 (星期一再写一遍)
给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。请注意,答案不一定是 arr 中的数字。示例 1:输入:arr = [4,9,3], target = 10输出:3解释:当选择 value 为 3 时,数组会变成 [3, 3, 3],和为 9 ,这是最接近原创 2020-06-14 12:34:37 · 156 阅读 · 0 评论 -
lee287 寻找重复数 二分 快慢指针 环入口节点
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n2) 。数组中只有一个重复的数字,但它可能不止重复出现一次。用二分查找二分法的思路是先猜一个数(有效范围 [left,原创 2020-05-26 10:33:55 · 222 阅读 · 0 评论 -
美团面试 4.9 找旋转数组中的目标值, 字符串判断循环
solution二分查找,当时大闹混乱,其实仔细想想把它们先分成大类再看小类,因为肯定是要比头指针、尾指针、和mid值的 三个怎么一起比,先比midpublic class test3 { public static void main(String[] args) { int[] s= {3,2,8,7,6,5,4}; int target=7; int res=solu...原创 2020-04-10 16:15:27 · 145 阅读 · 0 评论 -
面试题:不用sqrt()得出平方根,向下取整
我的思路先是自己的思路 while循环i从1开始,i的平方小于等于x且(i+1)的平方大于x,则返回i;时间复杂度o(n)考官提醒 二分查找因为找平方根所以找一半就行 用二分查找法效率更高 找一半public static int mySqrt(int x) { int low = 0; int high = x/2; while(low<=hi...原创 2019-11-13 14:34:57 · 486 阅读 · 0 评论 -
new排序数组中查找数字
统计一个数字在排序数组中出现的次数。直接遍历数组统计出现次数 O(n)二分搜索找到一个数,然后再分别前后扫描O(n)更好的用二分查找二分查找直接找到第一个k和最后一个k??一、.找第一个k先看数组中间,mid>k,下次在数组前半段找mid《k,在后半段找就可以了如果mid=k,先判断是不是第一个k,1.如果中间数的前一个也是k,那么第一个k在前半段找2.如果不是k了,那...原创 2019-10-23 13:34:52 · 87 阅读 · 0 评论 -
new 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路暴力遍历一遍如果前一个大于后一个,返回后一个注:1.数组为空时,返回02.数组就一个元素时 ,返回arra...原创 2019-10-12 22:03:56 · 96 阅读 · 0 评论