
数学
hestyle
戎码一生!
展开
-
LeetCode 最小差值II
给定一个整数数组 A,对于每个整数 A[i],我们可以选择 x = -K 或是 x = K,并将 x 加到 A[i] 中。在此过程之后,我们得到一些数组 B。返回 B 的最大值和 B 的最小值之间可能存在的最小差值。示例 1:输入:A = [1], K = 0输出:0解释:B = [1]示例 2:输入:A = [0,10], K = 2输出:6解释:B = [2,8]示例...原创 2019-06-24 15:26:12 · 710 阅读 · 0 评论 -
LeetCode 转置矩阵
给定一个矩阵 A, 返回 A 的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:[[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]提示:1 <= A.length <= 100...原创 2019-06-09 10:56:12 · 424 阅读 · 0 评论 -
LeetCode 回文素数
求出大于或等于 N 的最小回文素数。回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。例如,2,3,5,7,11 以及 13 是素数。回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。例如,12321 是回文数。示例 1:输入:6输出:7示例 2:输入:8输出:11示例 3:输入:13输出:101提示:1 <...原创 2019-06-09 10:44:26 · 465 阅读 · 0 评论 -
LeetCode 三维形体投影面积
在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。现在,我们查看这些立方体在 xy、yz 和 zx 平面上的投影。投影就像影子,将三维形体映射到一个二维平面上。在这里,从顶部、前面和侧面看立方体时,我们会看到“影子”。返回所有三个投影的总面积。示例 1:...原创 2019-06-13 21:16:12 · 485 阅读 · 0 评论 -
LeetCode 柠檬水找零(贪心策略)
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。示例 1:输入:[5,5,5...原创 2019-06-06 17:50:58 · 904 阅读 · 0 评论 -
LeetCode 镜面反射(图解,妙~)
有一个特殊的正方形房间,每面墙上都有一面镜子。除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2。正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接收器 0 的距离为 q 。返回光线最先遇到的接收器的编号(保证光线最终会遇到一个接收器)。示例:输入: p = 2, q = 1输出: 2解释: 这条光线在第一次被反射回左边的墙时就遇到了接收器 ...原创 2019-06-06 15:58:39 · 2657 阅读 · 1 评论 -
LeetCode 矩形重叠
矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形,判断它们是否重叠并返回结果。示例 1:输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]输出:true示例 2:输入:rec1 ...原创 2019-05-27 20:17:45 · 566 阅读 · 0 评论 -
LeetCode 适龄的朋友(妙题~)
人们会互相发送好友请求,现在给定一个包含有他们年龄的数组,ages[i] 表示第 i 个人的年龄。当满足以下条件时,A 不能给 B(A、B不为同一人)发送好友请求:age[B] <= 0.5 * age[A] + 7age[B] > age[A]age[B] > 100 && age[A] < 100否则,A 可以给 B 发送好友请求。注意如果...原创 2019-05-23 14:57:46 · 909 阅读 · 0 评论 -
LeetCode 黑板异或游戏(技巧)
一个黑板上写着一个非负整数数组 nums[i] 。小红和小明轮流从黑板上擦掉一个数字,小红先手。如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话,当前玩家游戏失败。 (另外,如果只剩一个数字,按位异或运算得到它本身;如果无数字剩余,按位异或运算结果为 0。)换种说法就是,轮到某个玩家时,如果当前黑板上所有数字按位异或运算结果等于 0,这个玩家获胜。假设两个玩家每步都使用最...原创 2019-05-18 12:37:04 · 1038 阅读 · 0 评论 -
LeetCode 数组的均值分割
给定的整数数组 A ,我们要将 A数组 中的每个元素移动到 B数组 或者 C数组中。(B数组和C数组在开始的时候都为空)返回true ,当且仅当在我们的完成这样的移动后,可使得B数组的平均值和C数组的平均值相等,并且B数组和C数组都不为空。示例:输入: [1,2,3,4,5,6,7,8]输出: true解释: 我们可以将数组分割为 [1,4,5,8] 和 [2,3,6,7], 他们的平...原创 2019-05-17 17:09:18 · 2921 阅读 · 0 评论 -
LeetCode 二进制间距
给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离。如果没有两个连续的 1,返回 0 。示例 1:输入:22输出:2解释:22 的二进制是 0b10110 。在 22 的二进制表示中,有三个 1,组成两对连续的 1 。第一对连续的 1 中,两个 1 之间的距离为 2 。第二对连续的 1 中,两个 1 之间的距离为 1 。答案取两个距离之中最大的,也...原创 2019-06-09 11:26:49 · 200 阅读 · 0 评论 -
LeetCode 最大为N的数字组合
我们有一组排序的数字 D,它是 {‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’} 的非空子集。(请注意,‘0’ 不包括在内。)现在,我们用这些数字进行组合写数字,想用多少次就用多少次。例如 D = {‘1’,‘3’,‘5’},我们可以写出像 ‘13’, ‘551’, ‘1351315’ 这样的数字。返回可以用 D 中的数字写出的小于或等于 N 的正整数的数目。示例...原创 2019-06-19 12:09:35 · 1109 阅读 · 0 评论 -
LeetCode 车队(全网最详细的解法,哈哈)
N 辆车沿着一条车道驶向位于 target 英里之外的共同目的地。每辆车 i 以恒定的速度 speed[i] (英里/小时),从初始位置 position[i] (英里) 沿车道驶向目的地。一辆车永远不会超过前面的另一辆车,但它可以追上去,并与前车以相同的速度紧接着行驶。此时,我们会忽略这两辆车之间的距离,也就是说,它们被假定处于相同的位置。车队 是一些由行驶在相同位置、具有相同速度的车...原创 2019-06-03 15:18:16 · 1153 阅读 · 0 评论 -
LeetCode 有序队列(数学问题)
给出了一个由小写字母组成的字符串 S。然后,我们可以进行任意次数的移动。在每次移动中,我们选择前 K 个字母中的一个(从左侧开始),将其从原位置移除,并放置在字符串的末尾。返回我们在任意次数的移动之后可以拥有的按字典顺序排列的最小字符串。示例 1:输入:S = "cba", K = 1输出:"acb"解释:在第一步中,我们将第一个字符(“c”)移动到最后,获得字符串 “bac”。在...原创 2019-06-18 15:35:00 · 1047 阅读 · 0 评论 -
LeetCode 子数组按位或操作(蛮力法+剪枝)
我们有一个非负整数数组 A。对于每个(连续的)子数组 B = [A[i], A[i+1], …, A[j]] ( i <= j),我们对 B 中的每个元素进行按位或操作,获得结果 A[i] | A[i+1] | … | A[j]。返回可能结果的数量。 (多次出现的结果在最终答案中仅计算一次。)示例 1:输入:[0]输出:1解释:只有一个可能的结果 0 。示例 2:输入:[...原创 2019-06-18 14:53:43 · 480 阅读 · 0 评论 -
LeetCode 超级回文数(转换减小范围)
如果一个正整数自身是回文数,而且它也是一个回文数的平方,那么我们称这个数为超级回文数。现在,给定两个正整数 L 和 R (以字符串形式表示),返回包含在范围 [L, R] 中的超级回文数的数目。示例:输入:L = "4", R = "1000"输出:4解释:4,9,121,以及 484 是超级回文数。注意 676 不是一个超级回文数: 26 * 26 = 676,但是 26 不是回文...原创 2019-06-21 16:55:15 · 543 阅读 · 0 评论 -
LeetCode 第N个神奇数字(二分搜索)
如果正整数可以被 A 或 B 整除,那么它是神奇的。返回第 N 个神奇数字。由于答案可能非常大,返回它模 10^9 + 7 的结果。示例 1:输入:N = 1, A = 2, B = 3输出:2示例 2:输入:N = 4, A = 2, B = 3输出:6示例 3:输入:N = 5, A = 2, B = 4输出:10示例 4:输入:N = 3, A = 6, B =...原创 2019-06-11 19:21:38 · 371 阅读 · 0 评论 -
LeetCode 最小差值 I
给定一个整数数组 A,对于每个整数 A[i],我们可以选择任意 x 满足 -K <= x <= K,并将 x 加到 A[i] 上得到B[i] = A[i] + x。在此过程之后,我们得到一些数组 B。返回 B 的最大值和 B 的最小值之间可能存在的最小差值。示例 1:输入:A = [1], K = 0输出:0解释:B = [1]示例 2:输入:A = [0,10], ...原创 2019-06-21 08:53:13 · 570 阅读 · 0 评论 -
LeetCode 最长的斐波拉契子序列的长度(hash表+动态规划)
如果序列 X_1, X_2, …, X_n 满足下列条件,就说它是 斐波那契式 的:n >= 3对于所有 i + 2 <= n,都有 X_i + X_{i+1} = X_{i+2}给定一个严格递增的正整数数组形成序列,找到 A 中最长的斐波那契式的子序列的长度。如果一个不存在,返回 0 。(回想一下,子序列是从原序列 A 中派生出来的,它从 A 中删掉任意数量的元素(也可以不...原创 2019-06-10 18:24:41 · 599 阅读 · 0 评论 -
LeetCode 三维形体的表面积
在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。请你返回最终形体的表面积。示例 1:输入:[[2]]输出:10示例 2:输入:[[1,2],[3,4]]输出:34示例 3:输入:[[1,0],[0,2]]输出:16示例 4:输入:[[1,1,1],[1...原创 2019-06-15 16:20:38 · 1357 阅读 · 0 评论 -
LeetCode 子序列宽度之和(公式递推法)
给定一个整数数组 A ,考虑 A 的所有非空子序列。对于任意序列 S ,设 S 的宽度是 S 的最大元素和最小元素的差。返回 A 的所有子序列的宽度之和。由于答案可能非常大,请返回答案模 10^9+7。示例:输入:[2,1,3]输出:6解释:子序列为 [1],[2],[3],[2,1],[2,3],[1,3],[2,1,3] 。相应的宽度是 0,0,0,1,1,2,2 。这些宽...原创 2019-06-15 15:30:36 · 651 阅读 · 0 评论 -
LeetCode 鸡蛋掉落(最清晰的解法)
你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X &l...原创 2019-06-14 18:48:50 · 12385 阅读 · 12 评论 -
LeetCode 多米诺和托米诺平铺(递推式)
有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 “L” 的托米诺形。两种形状都可以旋转。XX <- 多米诺XX <- “L” 托米诺X给定 N 的值,有多少种方法可以平铺 2 x N 的面板?返回值 mod 10^9 + 7。(平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个...原创 2019-05-12 14:37:50 · 1044 阅读 · 1 评论 -
LeetCode 逃脱阻碍者(数学问题)
你在进行一个简化版的吃豆人游戏。你从 (0, 0) 点开始出发,你的目的地是 (target[0], target[1]) 。地图上有一些阻碍者,第 i 个阻碍者从 (ghosts[i][0], ghosts[i][1]) 出发。每一回合,你和阻碍者们 可以 同时向东,西,南,北四个方向移动,每次可以移动到距离原位置1个单位的新位置。如果你可以在任何阻碍者抓住你之前到达目的地(阻碍者可以采取任...原创 2019-05-12 14:14:32 · 509 阅读 · 1 评论 -
LeetCode 旋转数字(多种算法实现)
我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。现在我们有一个正整数 N, 计算从 1 到...原创 2019-05-12 11:52:57 · 1094 阅读 · 0 评论 -
LeetCode 最大交换(图解)
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。示例 1 :输入: 2736输出: 7236解释: 交换数字2和数字7。示例 2 :输入: 9973输出: 9973解释: 不需要交换。注意:给定数字的范围是 [0, 108]思路分析: 这道题的难度比较低,我们只要找到在index后端最大的一个值然后与index交换即可。蛋试需要注意两点:第一...原创 2019-04-19 15:51:03 · 1013 阅读 · 0 评论 -
LeetCode 优美的排列 II(规律)
给定两个整数 n 和 k,你需要实现一个数组,这个数组包含从 1 到 n 的 n 个不同整数,同时满足以下条件:① 如果这个数组是 [a1, a2, a3, ... , an] ,那么数组 [|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|] 中应该有且仅有 k 个不同整数;.② 如果存在多种答案,你只需实现并返回其中任意一种.示例 1:...原创 2019-04-19 11:31:29 · 1078 阅读 · 2 评论 -
LeetCode 使用最小花费爬楼梯(递推)
描述:数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从cost[1]开始,然后...原创 2019-05-03 15:55:52 · 762 阅读 · 0 评论 -
LeetCode 非递减数列
给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]。示例 1:输入: [4,2,3]输出: True解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例 2:...原创 2019-04-19 10:48:01 · 583 阅读 · 0 评论 -
LeetCode Range模块
Range 模块是跟踪数字范围的模块。你的任务是以一种有效的方式设计和实现以下接口。addRange(int left, int right) 添加半开区间 [left, right),跟踪该区间中的每个实数。添加与当前跟踪的数字部分重叠的区间时,应当添加在区间 [left, right) 中尚未跟踪的任何数字到该区间中。queryRange(int left, int right) 只有在当...原创 2019-04-27 12:55:42 · 1400 阅读 · 0 评论 -
LeetCode 黑名单中随机数(图解)
给定一个包含 [0,n ) 中独特的整数的黑名单 B,写一个函数从 [ 0,n ) 中返回一个不在 B 中的随机整数。对它进行优化使其尽量少调用系统方法 Math.random() 。提示:1 <= N <= 10000000000 <= B.length < min(100000, N)[0, N) 不包含 N,详细参见 interval notation 。...原创 2019-04-26 20:21:49 · 934 阅读 · 0 评论 -
LeetCode 平方数之和
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c。示例1:输入: 5输出: True解释: 1 * 1 + 2 * 2 = 5示例2:输入: 3输出: False思路分析: 直接暴搜吧。class Solution {public: bool judgeSquareSum(int c) { int endNu...原创 2019-04-16 16:21:31 · 510 阅读 · 0 评论 -
LeetCode 三个数的最大乘积(排序、扫描)
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入: [1,2,3]输出: 6示例 2:输入: [1,2,3,4]输出: 24注意:给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。思路分析: 对于如果使三个数乘积达到最大,大家都会想到将三...原创 2019-04-16 12:34:37 · 1116 阅读 · 0 评论 -
LeetCode x的平方根
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。思路分析:计算一个数的平方根,最笨的方法那就是从0开始寻找,直到n平方小于x,...原创 2019-02-14 15:31:31 · 752 阅读 · 1 评论 -
LeetCode 自除数
自除数 是指可以被它包含的每一位数除尽的数。例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。还有,自除数不允许包含 0 。给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。示例 1:输入: 上边界left = 1, 下边界right = 22输出: [1, 2, 3, 4, 5, 6, 7,...原创 2019-04-28 20:18:47 · 455 阅读 · 0 评论 -
LeetCode 到达终点数字
问题描述:在一根无限长的数轴上,你站在0的位置。终点在target的位置。每次你可以选择向左或向右移动。第 n 次移动(从 1 开始),可以走 n 步。返回到达终点需要的最小移动次数。示例 1:输入: target = 3输出: 2解释:第一次移动,从 0 到 1 。第二次移动,从 1 到 3 。示例 2:输入: target = 2输出: 3解释:第一次移动,从 0...原创 2019-05-04 16:01:59 · 833 阅读 · 0 评论 -
LeetCode 全局倒置与局部倒置
数组 A 是 [0, 1, …, N - 1] 的一种排列,N 是数组 A 的长度。全局倒置指的是 i,j 满足 0 <= i < j < N 并且 A[i] > A[j] ,局部倒置指的是 i 满足 0 <= i < N 并且 A[i] > A[i+1] 。当数组 A 中全局倒置的数量等于局部倒置的数量时,返回 true 。示例 1:输入: A =...原创 2019-05-09 16:16:06 · 350 阅读 · 0 评论 -
LeetCode 第K个最小的素数分数(二分搜索)
一个已排序好的表 A,其包含 1 和其他一些素数. 当列表中的每一个 p<q 时,我们可以构造一个分数 p/q 。那么第 k 个最小的分数是多少呢? 以整数数组的形式返回你的答案, 这里 answer[0] = p 且 answer[1] = q.示例:输入: A = [1, 2, 3, 5], K = 3输出: [2, 5]解释:已构造好的分数,排序后如下所示:1/5, ...原创 2019-05-12 09:06:29 · 1582 阅读 · 0 评论 -
LeetCode 连续整数求和
给定一个正整数 N,试求有多少组连续正整数满足所有数字之和为 N?示例 1:输入: 5输出: 2解释: 5 = 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。示例 2:输入: 9输出: 3解释: 9 = 9 = 4 + 5 = 2 + 3 + 4示例 3:输入: 15输出: 4解释: 15 = 15 = 8 + 7 = 4 + 5 + 6 = ...原创 2019-05-25 09:40:24 · 1534 阅读 · 0 评论 -
LeetCode 字母大小写全排列(回溯法)
给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。示例:输入: S = "a1b2"输出: ["a1b2", "a1B2", "A1b2", "A1B2"]输入: S = "3z4"输出: ["3z4", "3Z4"]输入: S = "12345"输出: ["12345"]注意:S 的长度不超过12。S 仅由数字...原创 2019-05-11 10:38:20 · 1530 阅读 · 0 评论