![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode 剑指offer2
goldfish_well
这个作者很懒,什么都没留下…
展开
-
Java剑指 Offer II 109. 开密码锁(击败14.24%用户,没写双向BFS,太累了,效率比较差)
题目:一个密码锁由 4个环形拨轮组成,每个拨轮都有 10 个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' 。每个拨轮可以自由旋转:例如把 '9' 变为'0','0' 变为 '9' 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 '0000' ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。字符串 target 代表..原创 2021-12-09 09:36:11 · 269 阅读 · 0 评论 -
Java剑指 剑指 Offer II 110. 所有路径(击败30.72%用户,不追求效率了,能写出来就喜滋滋了)
题目:给定一个有n个节点的有向无环图,用二维数组graph表示,请找到所有从0到n-1的路径并输出(不要求按顺序)。graph的第 i 个数组中的单元都表示有向图中 i号节点所能到达的下一些结点(译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a ),若为空,就是没有下一个节点了。示例 :输入:graph = [[1,2],[3],[3],[]]输出:[[0,1,3],[0,2,3]]解释:有两条路径 0 -> 1 -> 3 ...原创 2021-12-08 11:24:10 · 223 阅读 · 0 评论 -
Java剑指 Offer II 108. 单词演变(击败93.27%用户)
题目:在字典(单词列表)wordList 中,从单词 beginWord和 endWord 的 转换序列 是一个按下述规格形成的序列:序列中第一个单词是 beginWord 。序列中最后一个单词是 endWord 。每次转换只能改变一个字母。转换过程中的中间单词必须是字典wordList 中的单词。给定两个长度相同但内容不同的单词 beginWord和 endWord 和一个字典 wordList ,找到从beginWord 到endWord 的 最短转换序列 中的 单词数目...原创 2021-12-08 09:45:49 · 256 阅读 · 0 评论 -
Java剑指 Offer II 107. 矩阵中的距离(击败48.58%用户)
题目:给定一个由 0 和 1 组成的矩阵 mat,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 :输入:mat = [[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0,0],[0,1,0],[0,0,0]]思路:图+广度优先搜索也可以动态规划太折磨了复杂度:时间:双重循环O(nt)。空间:O(t)。代码: publ..原创 2021-12-07 14:50:58 · 146 阅读 · 0 评论 -
Java剑指 Offer II 106. 二分图(击败100%用户)
题目:存在一个 无向图 ,图中有 n 个节点。其中每个节点都有一个介于 0 到 n - 1 之间的唯一编号。给定一个二维数组 graph,表示图,其中 graph[u] 是一个节点数组,由节点 u 的邻接节点组成。形式上,对于graph[u] 中的每个 v ,都存在一条位于节点 u 和节点 v 之间的无向边。该无向图同时具有以下属性:不存在自环(graph[u] 不包含 u)。不存在平行边(graph[u] 不包含重复值)。如果 v 在 graph[u] 内,那么 u 也应该在 grap..原创 2021-12-07 11:20:45 · 109 阅读 · 0 评论 -
Java剑指 Offer II 105. 岛屿的最大面积(击败100%用户)
题目:给定一个由0 和 1 组成的非空二维数组grid,用来表示海洋岛屿地图。一个岛屿是由一些相邻的1(代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。示例 :输入: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0]...原创 2021-12-07 09:36:59 · 403 阅读 · 0 评论 -
Java剑指 Offer II 104. 排列的数目(击败98.48%用户)
题目:给定一个由 不同正整数组成的数组 nums ,和一个目标整数 target 。请从 nums 中找出并返回总和为 target 的元素组合的个数。数组中的数字可以在一次排列中出现任意次,但是顺序不同的序列被视作不同的组合。题目数据保证答案符合 32 位整数范围。示例 :输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1).原创 2021-12-06 14:51:55 · 413 阅读 · 0 评论 -
Java剑指 Offer II 103. 最少的硬币数目(击败83.77%用户)
题目:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。示例 :输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1思路:很像之前写的题目,但是完全不像,也有点像,坑有点多把三角形变成直角三角形最好理解[2][3,4][6,5,7].原创 2021-12-05 14:53:11 · 262 阅读 · 0 评论 -
Java剑指 Offer II 100. 三角形中最小路径之和(击败93.69%用户)
题目:给定一个正整数数组 nums 和一个整数 target 。向数组中的每个整数前添加'+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 :输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种.原创 2021-12-05 12:13:39 · 65 阅读 · 0 评论 -
Java剑指 Offer II 101. 分割等和子集(击败61.79%用户)
题目:给定一个非空的正整数数组nums,请判断能否将这些数字分成元素和相等的两部分。示例 :输入:nums = [1,5,11,5]输出:true解释:nums 可以分割成 [1, 5, 5] 和 [11] 。思路:01背包的思路,如果没看过的,可以先学学01背包。对于我来说,这道easy题真的太难了。复杂度:时间:双重循环O(n^2)。空间:O(n)。代码:public boolean canPartition(int[] nums) {..原创 2021-12-05 10:52:34 · 410 阅读 · 0 评论 -
Java剑指 Offer II 100. 三角形中最小路径之和(击败52.24%用户)
题目:给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。示例 :输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]输出:11解释:如下面简图所示: 2 3 46 5...原创 2021-12-04 20:31:38 · 79 阅读 · 0 评论 -
Java剑指 Offer II 099. 最小路径之和(击败97.48%用户)
题目:给定一个包含非负整数的 mxn网格grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:一个机器人每次只能向下或者向右移动一步。示例 :输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。思路:现在这个mid题对我来说基本上可以了。我应该没有写的很好,修修补补的,应该可以思路再清晰点复杂度:时间:双重循环O(m*n)。空间:O(m...原创 2021-12-04 17:15:51 · 73 阅读 · 0 评论 -
Java剑指 Offer II 098. 路径的数目(击败100%用户)
题目:一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 :输入:m = 3, n = 7输出:28思路:总算碰到一道简单的题了复杂度:时间:双重循环O(m*n)。空间:O(m*n)。代码: public int uniquePaths(int m, in..原创 2021-12-04 16:41:24 · 226 阅读 · 0 评论 -
Java剑指 Offer II 097. 子序列的数目(击败74.72%用户)
题目:给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE"是"ABCDE"的一个子序列,而"AEC"不是)题目数据保证答案符合 32 位带符号整数范围。示例 :输入:s = "rabbbit", t = "rabbit"输出:3解释:如下图所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。ra b...原创 2021-12-04 16:04:30 · 259 阅读 · 0 评论 -
Java剑指 Offer II 096. 字符串交织(效率低但是比较容易理解)
题目:给定三个字符串s1、s2、s3,请判断s3能不能由s1和s2交织(交错)组成。两个字符串 s 和 t 交织的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + ... + snt = t1 + t2 + ... + tm|n - m| <= 1交织 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...提示:a + b 意味着字符...原创 2021-12-04 14:59:54 · 167 阅读 · 0 评论 -
Java剑指 Offer II 095. 最长公共子序列(击败87.45%用户)
题目:给定两个字符串text1 和text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 :输入:text1 = "abcde", ...原创 2021-12-04 10:32:46 · 68 阅读 · 0 评论 -
Java剑指 Offer II 094. 最少回文分割(击败53.39%用户)
题目:给定一个字符串s,请将s分割成一些子串,使每个子串都是回文串。返回符合要求的最少分割次数。示例 :输入:s = "aab"输出:1解释:只需一次分割就可将s 分割成 ["aa","b"] 这样两个回文子串。思路:如果要求列出切割的各个方案就适合用回溯法,之前写过。现在只要求给出最少次数,用动态规划合适。找状态转移方程:dp[i]=Math.min(dp[i],dp[j-1]+1);复杂度:时间:双重循环O(n*n)。空...原创 2021-12-03 11:02:21 · 95 阅读 · 0 评论 -
Java剑指 Offer II 093. 最长斐波那契数列(击败19.55%用户).。。。
题目:如果序列X_1, X_2, ..., X_n满足下列条件,就说它是斐波那契式的:n >= 3对于所有i + 2 <= n,都有X_i + X_{i+1} = X_{i+2}给定一个严格递增的正整数数组形成序列 arr,找到 arr 中最长的斐波那契式的子序列的长度。如果一个不存在,返回0 。(回想一下,子序列是从原序列arr 中派生出来的,它从 arr 中删掉任意数量的元素(也可以不删),而不改变其余元素的顺序。例如,[3, 5, 8]是[3, ...原创 2021-12-03 09:53:32 · 434 阅读 · 0 评论 -
Java剑指 Offer II 092. 翻转字符(击败100%用户)
题目:如果一个由'0' 和 '1'组成的字符串,是以一些 '0'(可能没有 '0')后面跟着一些 '1'(也可能没有 '1')的形式组成的,那么该字符串是单调递增的。我们给出一个由字符 '0' 和 '1'组成的字符串 s,我们可以将任何'0' 翻转为'1'或者将'1'翻转为'0'。返回使 s单调递增的最小翻转次数。示例 :输入:s = "00110"输出:1解释:我们翻转最后一位得到 00111.思路:我看到有前缀和的思路不错,但是这里...原创 2021-12-02 17:24:47 · 88 阅读 · 0 评论 -
Java剑指 Offer II 091. 粉刷房子(击败89.32%用户)
题目:假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个n x 3的正整数矩阵 costs 来表示的。例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2]表示第 1 号房子粉刷成绿色的花费,以此类推。请计算出粉刷完所有房子最少的花费成本。...原创 2021-12-02 16:20:38 · 107 阅读 · 0 评论 -
Java剑指 Offer II 090. 环形房屋偷盗(击败100%用户)
题目:一个专业的小偷,计划偷窃一个环形街道上沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组 nums ,请计算在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 :输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃.原创 2021-12-02 15:05:44 · 343 阅读 · 0 评论 -
Java剑指 Offer II 089. 房屋偷盗(击败100%用户)
题目:一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组 nums,请计算不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 :输入:nums = [1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1...原创 2021-12-02 14:01:13 · 116 阅读 · 0 评论 -
Java剑指 Offer II 088. 爬楼梯的最少成本(击败90.47%用户)
题目:数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯示例 :输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。思路:简单来说.原创 2021-12-02 11:06:17 · 100 阅读 · 0 评论 -
Java剑指 Offer II 087. 复原 IP (效率比较低,但比较清楚)
题目:给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能从s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。示例 :输入.原创 2021-12-02 09:52:51 · 427 阅读 · 0 评论 -
Java剑指 Offer II 086. 分割回文子字符串(击败85.86%用户)
题目:给定一个字符串s,请将s分割成一些子串,使每个子串都是回文串,返回 s 所有可能的分割方案。回文串是正着读和反着读都一样的字符串。示例 :输入:s = "google"输出:[["g","o","o","g","l","e"],["g","oo","g","l","e"],["goog","l","e"]]思路:先有回溯这个树的结构节点表示没有并扫描到的字符,递归用来纵向遍历,for循环用来横向遍历。复杂度:时间:动态规划预处...原创 2021-12-01 12:45:08 · 201 阅读 · 0 评论 -
Java剑指 Offer II 085. 生成匹配的括号 (击败70.24%用户)
题目:正整数n代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例 :输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]思路:生成2n个括号,每走一步都有两个选择,适合使用剪枝回溯算法。写的比较简单,似乎效率不高复杂度:时间:快排O(nlogn),查找O(n),就是O(nlogn)。空间:没有额外空间,复杂度O(1)。代码: public L...原创 2021-12-01 10:42:36 · 75 阅读 · 0 评论 -
Java剑指 Offer II 084. 含有重复元素集合的全排列 (击败98.62%用户)
题目:给定一个可包含重复数字的整数集合nums,按任意顺序返回它所有不重复的全排列。示例 :输入:nums = [1,1,2]输出:[[1,1,2], [1,2,1], [2,1,1]]思路:多了一步判断重复,基本没什么变化。复杂度:时间:O(n*n!)空间:也一样。代码:int len = nums.length; List<List<Integer>> res = new ArrayList...原创 2021-12-01 10:06:47 · 273 阅读 · 0 评论 -
Java剑指 Offer II 083. 没有重复元素集合的全排列(击败100%用户)
题目:给定一个不含重复数字的整数数组nums,返回其所有可能的全排列。可以按任意顺序返回答案。示例 :输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路:全排列回溯,重点在于怎么交换顺序。还是回溯。复杂度:时间:O(n!)空间:复杂度O(n)。代码://写一个集合存放排列结果 List<List<Integer>>...原创 2021-12-01 09:56:29 · 298 阅读 · 0 评论 -
Java剑指 Offer II 082. 含有重复元素集合的组合(击败98.73%用户)
题目:给定两个整数n和k,返回1 ... n中所有可能的k个数的组合。示例 :输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]思路:这和79求子集几乎是没什么变动,无非是限定了子集长度,上一题掌握之后这一题信手捻来。复杂度:时间:快排O(2。空间:没有额外空间,复杂度O(1)。代码:List<List<Integer...原创 2021-11-30 09:14:27 · 253 阅读 · 0 评论 -
Java剑指 Offer II 080. 含有 k 个元素的组合(击败99.92%用户)
题目:给定两个整数n和k,返回1 ... n中所有可能的k个数的组合。示例 :输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]思路:这和79求子集几乎是没什么变动,无非是限定了子集长度,上一题掌握之后这一题信手捻来。复杂度:时间:O((n^2)。空间:复杂度O(n)。代码:List<List<Integer&g...原创 2021-11-29 20:12:41 · 275 阅读 · 0 评论 -
Java剑指 Offer II 081. 允许重复选择元素的组合(击败98.84%用户)
题目:给定一个链表数组,每个链表都已经按升序排列。请将所有链表合并到一个升序链表中,返回合并后的链表。示例 :输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6思路:...原创 2021-11-29 20:09:50 · 80 阅读 · 0 评论 -
Java剑指 Offer II 079. 所有子集(击败100%用户)
题目:给定一个链表数组,每个链表都已经按升序排列。请将所有链表合并到一个升序链表中,返回合并后的链表。示例 :输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6思路:...原创 2021-11-27 14:38:25 · 191 阅读 · 0 评论 -
Java剑指 Offer II 078. 合并排序链表(击败100%用户)
题目:给定一个链表数组,每个链表都已经按升序排列。请将所有链表合并到一个升序链表中,返回合并后的链表。示例 :输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6思路:...原创 2021-11-27 10:36:25 · 198 阅读 · 0 评论 -
Java剑指 Offer II 077. 链表排序(击败72.91%用户)
题目:给定链表的头结点head,请将其按升序排列并返回排序后的链表。示例 :输入:head = [4,2,1,3]输出:[1,2,3,4]思路:刚开始的想法比较粗暴,遍历链表,再把链表节点val添加到数组,再快排然后给新的链表。可以但是比较麻烦,浪费资源也比较多,不过思路简单而且容易实现,适合面试想不出来嗯写。看了别人归并排序思路,可以借鉴确实应该好很多。就是把两表不断分成两部分排序好再合起来,就是递归差不多吧,也好理解的。详情看代码...原创 2021-11-26 21:41:36 · 431 阅读 · 0 评论 -
Java剑指 Offer II 076. 数组中的第 k 大的数字(击败87.82%用户)
题目:给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。示例 :输入: [3,2,1,5,6,4] 和 k = 2输出: 5思路:肯定是快排了,排好序之后遍历计数,到k位。懒得写快排了。不知道我这么写有没有问题,我看大家都不是这么写的。复杂度:时间:快排O(logn),查找O(n),就是O(n)。空间:没有额外空间,复杂度O(1)。代...原创 2021-11-26 15:46:32 · 558 阅读 · 0 评论 -
Java剑指 Offer II 075. 数组相对排序(击败100%用户)
题目:给定两个数组,arr1 和arr2,arr2中的元素各不相同arr2 中的每个元素都出现在arr1中对 arr1中的元素进行排序,使 arr1 中项的相对顺序和arr2中的相对顺序相同。未在arr2中出现过的元素需要按照升序放在arr1的末尾。示例 :输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输出:[2,2,2,1,4,3,3,9,6,7,19]思路: 规定...原创 2021-11-25 20:27:38 · 225 阅读 · 0 评论 -
Java剑指 剑指 Offer II 074. 合并区间(击败78.18%用户)
(今天码代码被导师批了,经典不务正业,一道代码题现在才写完。。。)题目:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 :输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并原创 2021-11-25 19:19:29 · 177 阅读 · 0 评论 -
Java剑指 Offer II 072. 求平方根(击败99.49%用户)
题目:给定一个非负整数 x ,计算并返回 x 的平方根,即实现int sqrt(int x)函数。正数的平方根有两个,只输出其中的正数平方根。如果平方根不是整数,输出只保留整数的部分,小数部分将被舍去。示例 :输入: x = 4输出: 2思路: 这一天还是二分法,其实思路很简单。在0-x之间以二分法查找一个数的平方小于等于x并且下一个数平方大于x就行了。要考虑这个这个值很大的情况,一半的平方也可能大于int范围了,转用long就可...原创 2021-11-24 10:23:34 · 247 阅读 · 0 评论 -
Java剑指 Offer II 073. 狒狒吃香蕉(击败99.55%%用户)
题目:狒狒喜欢吃香蕉。这里有N堆香蕉,第 i 堆中有piles[i]根香蕉。警卫已经离开了,将在H小时后回来。狒狒可以决定她吃香蕉的速度K(单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉,下一个小时才会开始吃另一堆的香蕉。狒狒喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。示例 :输入: ...原创 2021-11-24 09:51:38 · 279 阅读 · 0 评论 -
Java剑指 Offer II 069. 山峰数组的顶部(击败100.00%用户)
题目:符合下列属性的数组 arr 称为 山峰数组(山脉数组) :arr.length >= 3存在 i(0 < i< arr.length - 1)使得:arr[0] < arr[1] < ... arr[i-1] < arr[i]arr[i] > arr[i+1] > ... > arr[arr.length - 1]给定由整数组成的山峰数组 arr ,返回任何满足 arr[0] < arr[1] < ... arr[i .原创 2021-11-23 11:27:57 · 323 阅读 · 0 评论