
LintCode及其他OJ
刷题练习!提升代码能力!
Michael阿明
两个孩子的父亲,机械工程师,准备转行人工智能方向,一起加油吧!高举智慧,她就使你高升;怀抱智慧,她就使你尊荣。-- 箴言(4:8)
-
原创 LintCode解题目录
看见 LintCode 的代码能力测试CAT挺好,有倒计时,挺有面试紧迫感。做个记录。另有本人 LeetCode解题目录、《程序员面试金典》解题目录、《剑指Offer》解题目录我的 LintCode 主页59 / 1575算法问题已通过 3%CAT(Coding Ability Test)证书 黄金 IV 级 2020.3.9 白银 IV 级 2020.3.5 青铜 IV 级 2020.3.3黄金 III 级 2020.3.7 白银 III 级 2020.3.5 青铜 III2020-03-01 23:28:591365
19
-
原创 天池 在线编程 卡牌游戏(01背包)
文章目录1. 题目2. 解题1. 题目你跟你的朋友在玩一个卡牌游戏,总共有 n 张牌。每张牌的成本为 cost[i] 并且可以对对手造成 damage[i] 的伤害。你总共有 totalMoney 元并且需要造成至少 totalDamage 的伤害才能获胜。每张牌只能使用一次,判断你是否可以取得胜利。样例1输入:cost = [1,2,3,4,5]damage = [1,2,3,4,5]totalMoney = 10totalDamage = 10输出: true样例说明: 我们2021-02-27 17:36:0635
0
-
原创 天池 在线编程 圣杯咒语
文章目录1. 题目2. 解题1. 题目一段英文中同时出现大小写的字母中最大的那一个,现在给你一段英文,你能把这个字母找出来嘛?ps:一定存在答案英文长度不会超过100000样例 1:输入:"aAbb"输出:A解释:因为只有小写的b没有大写的,而a既有大写又有小写,所以a是满足条件的最大的字母,也是满足条件的唯一的字母样例 2:输入:"aabbBCcDd"输出:D解释:因为满足题意的有三个字母分别是'b','c','d'其中d最大,所以答案是dhttps://tianchi.a2021-02-27 17:29:5728
0
-
原创 天池 在线编程 能否转换
文章目录1. 题目2. 解题1. 题目给两个字符串 S 和 T, 判断 S 能不能通过删除一些字母(包括0个)变成 T.样例1输入: S = "lintcode" 和 T = "lint"输出: true样例2输入: S = "lintcode" 和 T = "ide"输出: true样例3输入: S = "adda" and T = "aad"输出: false解释: 无论如何,你都不能通过删除一个'd' 把 "adda" 变成 "aad"。https://tianchi.2021-02-27 17:23:1932
0
-
原创 天池 在线编程 有序队列
文章目录1. 题目2. 解题1. 题目给出了一个由小写字母组成的字符串 S。然后,我们可以进行任意次数的移动。在每次移动中,我们选择前 K 个字母中的一个(从左侧开始),将其从原位置移除,并放置在字符串的末尾。返回我们在任意次数的移动之后可以拥有的按字典顺序排列的最小字符串。样例 1:输入:S = "cba", K = 1输出:"acb"解释:在第一步中,我们将第一个字符(“c”)移动到最后,获得字符串 “bac”。在第二步中,我们将第一个字符(“b”)移动到最后,获得最终结果 “a2021-02-23 15:11:4126
0
-
原创 天池 在线编程 区间统计(队列)
文章目录1. 题目2. 解题1. 题目给定一个01数组 arr 和 一个整数 k, 统计有多少区间符合如下条件:区间的两个端点都为 0 (允许区间长度为1)区间内 1 的个数不多于 karr 的大小不超过 10^5样例 1:输入: arr = [0, 0, 1, 0, 1, 1, 0], k = 1输出: 7解释: [0, 0], [1, 1], [3, 3], [6, 6], [0, 1], [0, 3], [1, 3] (区间 [i,j] 表示下标 i(包括)和下标 j(包括)之2021-02-23 14:46:5126
0
-
原创 天池 在线编程 矩阵还原(前缀和)
文章目录1. 题目2. 解题1. 题目输入:22[[1,3],[4,10]]输出: [[1,2],[3,4]]Explanation:before:1 23 4after:1 34 10https://tianchi.aliyun.com/oj/286606814880453210/3272501871427633552. 解题前缀和逆运算class Solution {public: /** * @param n: the row of t2021-02-23 09:55:5228
1
-
原创 LintCode MySQL 1932/1933. 挂科最多的同学 I / II
文章目录1. 题目2. 解题1. 题目exams 表中存放着同学们的考试记录请用 SQL 语句,找到挂科数最多的同学所对应的 student_idhttps://www.lintcode.com/problem/19322. 解题-- Write your SQL Query here ---- example: SELECT * FROM XX_TABLE WHERE XXX --select student_id from( select sum(if(is_pass=0,2021-02-11 15:34:1557
0
-
原创 LintCode MySQL 1936. 张三的故事 III
文章目录1. 题目2. 解题1. 题目记者调查发现,张三所在学校还有一金牌教师,其所带的学生毕业后人均知名学府。记者对该老师所教的学生的情况产生了好奇。students 表中记录了学生的姓名以及班级 (class_id),classes 表中记录了班级的名称以及班主任 (teacher_id),teachers 表中记录了老师的名字请编写 SQL 语句,找出 "xujia" 老师所带的班级所有同学的姓名。https://www.lintcode.com/problem/19362. 解题2021-02-10 17:39:1151
0
-
原创 LintCode MySQL 1918. 第二高的球员的身高
文章目录1. 题目2. 解题1. 题目编写一个 SQL 语句,获取球员 (players) 表中第二高的身高 (height)表定义: players (球员表)2. 解题if(a,b,c), a true,执行 b, 否则 c-- Write your SQL Query here ---- example: SELECT * FROM XX_TABLE WHERE XXX --select( if( (select count(*) from (sel2021-02-09 22:09:2963
0
-
原创 天池 在线编程 课程表(拓扑排序 + 回溯)
文章目录1. 题目2. 解题1. 题目总共有n个课程,从0到n-1。有些课程可能有先决条件,例如,你想修课程0,你必须先修一门课程1,这两门课之间的关系表示为:[0,1]给定课程的总数和先决条件对的列表,返回你可以得到所有课程的不同方法的数量。n <= 10样例1输入:n = 2prerequisites = [[1,0]]输出: 1说明:你必须按照0->1的顺序上课。样例2输入:n = 2prerequisites = []Output: 2输出:你可2021-02-05 00:44:2364
0
-
原创 LintCode 1915. 举重(01背包)
文章目录1. 题目2. 解题1. 题目奥利第一次来到健身房,她正在计算她能举起的最大重量。杠铃所能承受的最大重量为maxCapacity,健身房里有 n 个杠铃片,第 i 个杠铃片的重量为 weights[i]。奥利现在需要选一些杠铃片加到杠铃上,使得杠铃的重量最大,但是所选的杠铃片重量总和又不能超过 maxCapacity ,请计算杠铃的最大重量是多少。比如,给定杠铃片的重量为 weights = [1, 3, 5], 而杠铃的最大承重为 maxCapacity = 7,那么应该选择重量为 12021-02-03 12:58:4752
0
-
原创 LintCode 434. 岛屿的个数II(并查集)
文章目录1. 题目2. 解题1. 题目给定 n, m, 分别代表一个二维矩阵的行数和列数, 并给定一个大小为 k 的二元数组A.初始二维矩阵全0.二元数组A内的k个元素代表k次操作, 设第 i 个元素为 (A[i].x, A[i].y), 表示把二维矩阵中下标为A[i].x行A[i].y列的元素由海洋变为岛屿.问在每次操作之后, 二维矩阵中岛屿的数量. 你需要返回一个大小为k的数组.样例 1:输入: n = 4, m = 5, A = [[1,1],[0,1],[3,3],[3,4]]输出2021-02-02 23:55:1844
0
-
原创 LintCode 378. 将二叉树转换成双链表(非递归遍历)
文章目录1. 题目2. 解题1. 题目将一个二叉树按照中序遍历转换成双向链表。样例样例 1:输入: 4 / \ 2 5 / \ 1 3 输出: 1<->2<->3<->4<->5样例 2:输入: 3 / \ 4 1输出:4<->3<->1https://www.lintcode.com/problem/convert-binary-tree-2021-02-02 20:05:1037
0
-
原创 LintCode 1816. 使结果不超过阈值的最小除数(二分查找)
文章目录1. 题目2. 解题1. 题目描述给你一个整数数组 nums 和一个正整数 threshold ,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和。请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个。每个数除以除数后都向上取整,比方说 7/3 = 3 , 10/2 = 5 。题目保证一定有解。1 <= nums.length <= 5 * 10^41 <= nums[i] <= 10^6nums.len2021-02-01 19:23:2066
0
-
原创 LintCode 1917. 切割剩余金属
文章目录1. 题目2. 解题1. 题目描述金属棒工厂的厂长拥有 n 根多余的金属棒。当地的一个承包商提出,只要所有的棒材具有相同的长度(用 saleLength 表示棒材的长度),就将金属棒工厂的剩余棒材全部购买。厂长可以通过将每根棒材切割零次或多次来增加可销售的棒材数量,但是每次切割都会产生一定的成本(用 costPerCut 表示每次切割的成本)。等所有的切割完成以后,多余的棒材将被丢弃,没有利润。金属棒工厂的厂长获得的销售总利润计算公式如下:totalProfit = totalUni2021-01-29 19:58:5580
0
-
原创 LintCode MySQL 1921. 从不充值的玩家(where not in)
文章目录1. 题目2. 解题1. 题目描述A game database contains two tables, player table and recharge table.Write a SQL query to find all players who never recharge.Table definition 1: usercolumns_name type explainationid int unsigned primary keyname varchar us2021-01-29 19:40:1574
0
-
原创 LintCode MySQL 1928. 网课上课情况分析 I
文章目录1. 题目2. 解题1. 题目online_class_situation 表展示了一些同学上网课的行为活动。每行数据记录了一名同学在退出网课之前,当天使用同一台设备登录课程后听过的课程数目(可能是0个)。写一条 SQL 语句,查询每位同学第一次登录平台听课的日期。表定义: online_class_situation (网课上课情况表)列名 类型 注释student_id int 学生 iddevice_id int 设备 iddate date 课程的上课日期course_n2021-01-29 19:14:2289
1
-
原创 天池 在线编程 三等分(模拟)
文章目录1. 题目2. 解题1. 题目给定一个由 0 和 1 组成的数组 A,将数组分成 3 个非空的部分,使得所有这些部分表示相同的二进制值。如果可以做到,请返回任何 [i, j],其中 i+1 < j,这样一来:A[0], A[1], ..., A[i] 组成第一部分;A[i+1], A[i+2], ..., A[j-1] 作为第二部分;A[j], A[j+1], ..., A[A.length - 1]是第三部分。这三个部分所表示的二进制值相等。如果无法做到,就返回 [-1, -2021-01-16 11:12:3179
0
-
原创 天池 在线编程 寻找字母(计数)
文章目录1. 题目2. 解题1. 题目给定一个字符串str,返回字符串中字母顺序最大的而且同时在字符串中出现大写和小写的字母。如果不存在这样的字母,返回‘~‘。please return uppercase|str|<=1000示例例 1:输入:"aAbBcD"输出:'B'解释:因为c和D没有大小写同时出现,A和B都有大小写,但是B比A大,所以返回B。例2:输入:"looGVSSPbR"输出:'~'https://tianchi.aliyun.com/oj/24582021-01-16 10:58:2351
0
-
原创 天池 在线编程 放小球(动态规划)
文章目录1. 题目2. 解题2.1 动态规划1. 题目n 个桶中小球的个数已知, 可以操作 k 次(每次从桶中取出一个球,或者添加一个球),每个桶有规定的最大容量 W[i]。求操作后两相邻桶之间的最大差值的平方的最小值。n <= 100W[i] <= 100样例 1:输入: 56[1,2,3,4,5][15,15,15,15,15]说明共有5个桶,最多操作6次,桶内的小球分别是1,2,3,4,5,桶的最大容量分别是15,15,15,15,15。输出: 02021-01-09 13:08:28115
1
-
原创 天池 在线编程 聪明的销售(计数+贪心)
文章目录1. 题目2. 解题1. 题目销售主管的任务是出售一系列的物品,其中每个物品都有一个编号。由于出售具有相同编号的商品会更容易,所以销售主管决定删除一些物品。现在她知道她最多能删除多少物品,她想知道最终袋子里最少可以包含多少种不同编号的物品。例如,最开始她有n = 6 个物品,编号为:ids = [1,1,1,2,2,3],她最多可以删除 m = 2 个物品。如果删除两个物品 1,则剩下的物品 ids = [1,2,2,3],此时她拥有三种不同编号的物品。如果删除两个物品 2,则剩下的物2021-01-09 12:50:4073
0
-
原创 天池 在线编程 回合制游戏(前缀和)
文章目录1. 题目2. 解题1. 题目QW 是一个回合制游戏的玩家,今天他决定去打怪。QW 在一场战斗中会碰到 n 个怪物,每个怪物有攻击力 atk[i],每回合结束时如果第 i 个怪物还活着,就会对 QW 造成 atk[i] 的伤害。QW 只能在每回合开始时击杀一个怪物,请帮 QW 出他打完所有怪物最少需要损失多少生命值。n, atk[i] <= 100000答案可能超过 int 范围示例样例 1:输入:atk = [19,3]输出:3样例 2:输入:atk = [1,32021-01-09 12:13:3072
0
-
原创 天池 在线编程 布尔表达式求值(栈)
文章目录1. 题目2. 解题1. 题目https://tianchi.aliyun.com/oj/245679029019779851/254275128279634588给定一个字符串代表一个仅包含"true","false","or","and"的布尔表达式。你的任务是将这个表达式的值求出,返回"true"或"false"。如果该表达式是错误的,则返回"error"。数据保证表达式中只含有"true",“false”,“or”,"and"四种字符串。表达式中的元素不会超过10000个。示2021-01-01 14:19:20100
0
-
原创 天池 在线编程 双向取数(博弈DP)
文章目录1. 题目2. 解题1. 题目https://tianchi.aliyun.com/oj/245679029019779851/254275128279634585有一个长度为n的数列arr, 甲乙两个人每次可以从头或者从末尾取一个数,双方都想让自己取数之和尽量多,甲先取数,问甲乙在采取最优策略的基础下,甲最多得多少分?n<=800示例给定arr=[8,6,9,4,4,3],返回21给定arr=[1,3,5,8,7,9,1],返回142. 解题相关题目:LeetCode2021-01-01 14:13:12108
0
-
原创 天池 在线编程 寻找比周围都大的点(模拟)
文章目录1. 题目2. 解题1. 题目https://tianchi.aliyun.com/oj/245679029019779851/254275128279634587给一个n*m大小的矩阵,寻找矩阵中所有比邻居(上下左右,对角也算,不考虑边界就是8个咯)都严格大的点。返回一个n*m大小的矩阵,如果原矩阵中的点比邻居都严格大,则该位置为1,反之为0。1<=n,m<=100示例样例 1输入:1 2 34 5 89 7 0输出:0 0 00 0 11 0 022021-01-01 14:06:13983
3
-
原创 天池 在线编程 最频繁出现的子串(字符串哈希)
文章目录1. 题目2. 解题1. 题目给定一个字符串,我们想知道满足以下两个条件的子串最多出现了多少次:子串的长度在之间 [minLength, maxLength]子串的字符种类不超过 maxUnique写一个函数 getMaxOccurrences ,其返回满足条件的子串最多出现次数。输入: s = "abcde"minLength = 2maxLength = 5maxUnique = 3输出: 1说明:符合条件的子串有 `ab, bc, cd, de, abc, bcd,2020-12-26 12:01:37895
1
-
原创 天池 在线编程 木材加工(二分查找)
文章目录1. 题目2. 解题1. 题目有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是整数。无法切出要求至少 k 段的,则返回 0 即可。示例样例 1输入:L = [232, 124, 456]k = 7输出: 114Explanation: 我们可以把它分成114cm的7段,而115c2020-12-26 11:52:0861
0
-
原创 天池 在线编程 所有子数组之和(排列组合)
文章目录1. 题目2. 解题2.1 暴力解2.1 O(n) 解1. 题目给定一个数组nums, 你需要返回这个数组所有子数组之和。如果nums = [2, 4, 1], 数组所有的子集是 {[2], [4], [1], [2, 4], [4, 1], [2, 4, 1]}保证返回的结果是int的类型len(nums) <= 50示例示例1:输入: nums = [1, 2, 3]输出: 20解释: {1} + {2} + {3} + {2 + 3} + {1 + 2} + {1 +2020-12-26 11:47:4781
0
-
原创 牛客 共鸣问题(思维难题)
文章目录1. 题目2. 解题1. 题目链接:https://ac.nowcoder.com/acm/contest/10325/B来源:牛客网现在有n个音符和m对共鸣关系,编号为1~n,每个音符自己有一个奏响时的优美程度,共鸣关系(x,y,z)表示音符x和y同时奏响的额外优美程度是 z,同时不奏响则为 -z,其他情况为0。音符可以选择奏响或者不奏响,不奏响的音符没有优美程度。我们想知道最大的优美程度和是多少,我们不需要知道具体是哪些音符被奏响了,只需输出最大和即可。共鸣关系可能有重复,其共2020-12-23 23:19:4368
0
-
原创 牛客 统计好元组
文章目录1. 题目2. 解题1. 题目链接:https://ac.nowcoder.com/acm/contest/10325/A来源:牛客网现在给定一个数组arr,和a,b两个数字,你要做的就是找到(i,j,k)。且满足1. 0 <= i < j < k < arr.size()2. |arr[i] - arr[j]| <= a3. |arr[j] - arr[k]| <= b统计满足条件的个数并返回(最后结果可能很大,请取1000000007的余数)。2020-12-23 22:52:0982
0
-
原创 牛客 挑选方案问题(排列组合)
文章目录1. 题目2. 解题1. 题目链接:https://ac.nowcoder.com/acm/contest/10323/B来源:牛客网自助餐厅里有5个盘子,里面装的都是面包。第1个盘子里有无限个面包;第2个盘子里只有1个面包;第3个盘子里只有4个面包;第4个盘子里也有无限个面包,但必须两个两个地拿;第5个盘子里也有无限个面包,但必须5个5个地拿;给定正整数n,求有多少种正好拿出n个面包的方案。方案a和方案b不同,当且仅当方案a存在从某个盘子里拿出面包的数量与方案b中对应盘子拿出2020-12-22 23:28:0665
0
-
原创 牛客 牛牛浇树(差分)
文章目录1. 题目2. 解题1. 题目链接:https://ac.nowcoder.com/acm/contest/10323/A来源:牛客网牛牛现在在花园养了n棵树,按顺序从第1棵到第n棵排列着。牛牛每天会按照心情给其中某一个区间的树浇水。例如如果某一天浇水的区间为[2,4],就是牛牛在这一天会给第2棵,第3棵和第4棵树浇水。树被浇水后就会成长,为了简化问题,我们假设在初始时所有树的高度为0cm。每过去一天树会自然成长1cm,每次树被浇水后当天会额外成长1cm。m天中牛牛每天都都会选一个2020-12-22 21:58:2081
0
-
原创 天池 在线编程 高效作业处理服务(01背包DP)
文章目录1. 题目2. 解题1. 题目https://tianchi.aliyun.com/oj/231188302809557697/235445278655844967Twitter正在测试一种名为Pigeon的新工作处理服务。Pigeon可以用任务实际持续时间的两倍处理任务,并且每个任务都有一个权重。此外,Pigeon在一个小时内只能服务一个有限的持续时间(最大运行时间)。给定Pigon服务的最大运行时间,任务的实际运行时间和权重,确定Pigon服务在一小时内可以实现的最大总权重。输入包2020-12-19 11:57:3680
2
-
原创 天池 在线编程 最小振幅(排序)
文章目录1. 题目2. 解题1. 题目https://tianchi.aliyun.com/oj/231188302809557697/235445278655844966给定一个由N个整数组成的数组A,一次移动,我们可以选择此数组中的任何元素并将其替换为任何值。数组的振幅是数组A中的最大值和最小值之间的差。返回通过执行最多三次替换之后数组A的最小振幅N是一个整数而且范围是: [2, 10000]A数组中的每一个元素都是整数而且范围是: [-50, 50]示例示例 1输入:A = [-2020-12-19 11:49:5297
2
-
原创 天池 在线编程 数组划分III(计数)
文章目录1. 题目2. 解题1. 题目给你一个整数数组和一个整数K,请你判断数组是否可以划分为若干大小为k序列,并满足以下条件:数组中的每一个数恰恰出现在一个序列中一个序列中的数都是互不相同的数组中相同元素是被划分到不同序列中的如何可以划分,返回True,否则返回False。数组长度小于等于10^5。示例例1:input: array=[1,2,3,4], k = 2output:true例2:input: array=[1,2,2,3], k = 3output:fals2020-12-19 11:44:5281
2
-
原创 牛客 XOR和(找规律)
文章目录1. 题目2. 解题1. 题目链接:https://ac.nowcoder.com/acm/contest/10166/C来源:牛客网牛牛最近学会了异或操作,于是他发现了一个函数 f(x)=x⊕(x−1)f(x)=x\oplus (x-1)f(x)=x⊕(x−1),现在牛牛给你一个数 n,他想知道 ∑i=1nf(i)\sum_{i=1}^n f(i)∑i=1nf(i) 的值是多少,请你告诉他。示例1输入4返回值12备注:1≤n≤10^92. 解题先算出 10 以内的 f2020-12-18 22:30:15101
1
-
原创 牛客 奇怪的排序问题(单调栈/遍历)
文章目录1. 题目2. 解题1. 题目链接:https://ac.nowcoder.com/acm/contest/10166/B来源:牛客网操场上有n个人排成一队,这n个人身高互不相同,可将他们的身高视为一个1到n的排列。这时需要把队伍变成升序,也就是从矮到高排序。每次可以选择一个人,让这个人和在他身后的人比高矮,如果比对方高,则交换位置并继续下一次比较,直到比对方矮或者已经在队尾。现在给出数n和一个1到n的排列,求最少的选择次数,使队伍变为升序。示例1输入4,[4,1,2,3]返回2020-12-18 21:58:3273
1
-
原创 牛客 数学实验(模拟)
文章目录1. 题目2. 解题1. 题目链接:https://ac.nowcoder.com/acm/contest/10166/A来源:牛客网牛牛在做数学实验。老师给了牛牛一个数字n,牛牛需要不断地将所有数位上的值做乘法运算,直至最后数字不发生变化为止。请你帮牛牛计算一下,最后生成的数字为多少?示例1输入10返回值0示例2输入55返回值0说明55 -> 5 * 5 = 25 -> 2 * 5 = 10 -> 1 * 0 = 02. 解题clas2020-12-18 21:50:0861
1
-
原创 牛客 牛牛选物(01背包)
文章目录1. 题目2. 解题1. 题目链接:https://ac.nowcoder.com/acm/contest/9887/A来源:牛客网牛牛有现在有n个物品,每个物品有一个体积v[i]和重量g[i],他想选择其中总体积恰好为V的若干个物品,想使这若干个物品的总重量最大,他想知道最大总重量为多少。(如果不存在合法方案,返回-1)2. 解题数据范围 V 很大,开DP数组要超时,采用哈希表class Solution {public: /** * 代码中的类名、方法名、2020-12-11 21:59:48128
1