随笔分类 - 二分法
摘要:题目来源 887. 鸡蛋掉落 题目详情 给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f ,满足 0 <= f <= n ,任何从 高于 f 的楼层落下的鸡蛋都会碎,从 f 楼层或比它低的楼层落下的鸡蛋都不会破。 每次操作,你可以取一枚没有碎的鸡
阅读全文
摘要:绪论 二分法是用于查找有序序列中某个元素的常用方法,时间复杂度为log(n) 写过二分法的人就知道,二分法好用但是也经常让人头疼,因其边界往往容易出错,而且在刷力扣看题解的时候,一会儿while(left < right)一会儿while(left <= right),头都搞晕了,因此特地来学习总结
阅读全文
摘要:题目来源 34. 在排序数组中查找元素的第一个和最后一个位置 题目详情 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计并实现时间复杂度为 O(log
阅读全文
摘要:题目来源 154. 寻找旋转排序数组中的最小值 II 相似题目 33. 搜索旋转排序数组 153. 寻找旋转排序数组中的最小值 154. 寻找旋转排序数组中的最小值 II 题目详情 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums =
阅读全文
摘要:题目来源 74. 搜索二维矩阵 题目详情 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 示例 1: 输入: matrix = [[1,3,5,7],[10,11,16,20],[2
阅读全文
摘要:题目来源 162. 寻找峰值 题目详情 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞ 。 你必须实现时间复杂度为 O
阅读全文
摘要:题目来源 287. 寻找重复数 题目详情 给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。 你设计的解决方案必须不修改数组 nums 且只用常量级 O(1)
阅读全文
摘要:题目来源 LeetCode_153 相似题目 33. 搜索旋转排序数组 153. 寻找旋转排序数组中的最小值 154. 寻找旋转排序数组中的最小值 II 题目描述 题解分析 解法一:二分法-思路一 这道题高效的解法就是二分法,利用旋转数组部分有序的性质找到最小值。 首先考虑一种情况:数组未旋转或者旋
阅读全文
摘要:题目来源 LeetCode_34 题目描述 题解分析 解法一:二分法 这里与传统的二分法不同,这里需要找到指定元素的左右边界,所以我们无法直接套用二分法的模板。 其实,我们可以分别考虑这两种情况,与普通的二分法不同,当需要找左边界时,当我们找到target == nums[mid],我们不是直接返回
阅读全文
摘要:704. 二分查找 LeetCode_704 题目描述 代码实现 class Solution { public int search(int[] nums, int target) { int low = 0, high = nums.length - 1; while(low <= high){
阅读全文
摘要:题目来源 LeetCode_4 题目描述 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (m+n)) 。 示例 1: 输入: nums1 = [1,3], nums2 = [2] 输
阅读全文
摘要:题目来源 LeetCode_69 题目详情 题解分析 方法一:使用sqrt class Solution { public int mySqrt(int x) { return (int)Math.sqrt((double)x); } } 方法二:袖珍计算器 class Solution { pub
阅读全文
摘要:题目来源 LeetCode_33 相似题目 33. 搜索旋转排序数组 153. 寻找旋转排序数组中的最小值 154. 寻找旋转排序数组中的最小值 II 题目描述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums
阅读全文
摘要:剑指 Offer 57. 和为s的两个数字 Offer_57 题目详情 使用二分法 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/10 18:57 */ /** * 题目详情:输入一个递增排序的数组和一
阅读全文
摘要:剑指 Offer 53 - II. 0~n-1中缺失的数字 Offer_53 题目详情 java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/9 20:33 */ /** * 题目详情:一个长度为
阅读全文
摘要:剑指 Offer 53 - I. 在排序数组中查找数字 I Offer_53_1 题目描述 方法一:使用HashMap package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/9 20:10 */ import
阅读全文
摘要:剑指 Offer 11. 旋转数组的最小数字 Offer 11 题目描述: 暴力解法:直接遍历整个数组,当后一个元素小于前一个元素则表示找到了最小值。 public class Offer_11 { public int minArray(int[] numbers) { int n = numbe
阅读全文
摘要:分巧克力 "PREV 37" 可以使用暴力来求解,但是1^10显然运行时间会超出1s的时间限制。 这里可以通过二分查找的方法来优化这次搜索。
阅读全文