![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
剑雨星澄
这个作者很懒,什么都没留下…
展开
-
LeetCode.184. 部门工资最高的员工
思路:首先先对返回表头命名,之后连接两表并设置连接键。接下来不可使用group by语句分组,可能是连表导致的问题将导致最后的结果中姓名不匹配。因此使用二次子查询。代码:select d.name as Department,e.name as Employee,e.Salary as Salaryfrom Employee e join Department don e.Depa...原创 2018-10-27 19:33:15 · 271 阅读 · 0 评论 -
LeetCode.70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 ...原创 2018-09-30 09:18:11 · 85 阅读 · 0 评论 -
LeetCode.110.平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ \9 20/ \15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]1/ \2 2/ \...原创 2018-09-29 10:19:05 · 75 阅读 · 0 评论 -
LeetCode.13. 罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12...原创 2018-10-07 19:13:05 · 113 阅读 · 0 评论 -
LeetCode.520.检测大写字母
给定一个单词,你需要判断单词的大写使用是否正确。我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如"USA"。单词中所有字母都不是大写,比如"leetcode"。如果单词不只含有一个字母,只有首字母大写, 比如"Google"。否则,我们定义这个单词没有正确使用大写字母。示例 1:输入: “USA”输出: True示例 2:输入: “FlaG”输...原创 2018-10-07 18:57:44 · 151 阅读 · 0 评论 -
LeetCode.206. 反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路1:扫描一遍链表,创建栈保存元素。重建链表,出栈为节点值。代码1:# Definition for singly-linked list.# class ListNode(object):# ...原创 2018-10-13 23:05:43 · 99 阅读 · 0 评论 -
LeetCode.292.Nim游戏
你和你的朋友,两个人一起玩Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石...原创 2018-10-13 22:45:36 · 85 阅读 · 0 评论 -
LeetCode.350. 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。进阶:如果...原创 2018-09-28 13:41:14 · 100 阅读 · 0 评论 -
LeetCode.537. 复数乘法
给定两个表示复数的字符串。返回表示它们乘积的字符串。注意,根据定义 i2 = -1 。示例 1:输入: “1+1i”, “1+1i”输出: “0+2i”解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i => 2i ,你需要将它转换为 0+2i 的形式。示例 2:输入: “1±1i”, “1±1i”输出: “0±2i”解释: (1 - i) ...原创 2018-10-06 19:09:20 · 571 阅读 · 0 评论 -
LeetCode.492. 构造矩形
作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的。 现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求:你设计的矩形页面必须等于给定的目标面积。宽度 W 不应大于长度 L,换言之,要求 L >= W 。长度 L 和宽度 W 之间的差距应当尽可能小。你需要按顺序输出你设计的页面的长度 L 和宽度 W。...原创 2018-10-06 12:46:17 · 134 阅读 · 0 评论 -
LeetCode.541. 反转字符串 II
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。示例:输入: s = “abcdefg”, k = 2 输出: “bacdfeg”要求:该字符串只包含小写的英文字母。 给定字符串的长度和 k 在[1...原创 2018-10-05 07:16:27 · 91 阅读 · 0 评论 -
LeetCode.167. 两数之和 II - 输入有序数组
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], ta...原创 2018-10-05 06:57:12 · 155 阅读 · 0 评论 -
LeetCode.458. 可怜的小猪
有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水。它们从外观看起来都一样。如果小猪喝了毒药,它会在15分钟内死去。问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少只猪?回答这个问题,并为下列的进阶问题编写一个通用算法。进阶:假设有 n 只水桶,猪饮水中毒后会在 m 分钟内死亡,你需要多少猪(x)就能在 p 分钟内找出“有毒”水桶?n只水桶里有且仅有一只有...原创 2018-10-04 22:20:31 · 537 阅读 · 0 评论 -
LeetCode.177. 第N高的薪水
思路:由于n不确定,因此不可再参考第二高薪水中的优化思路,只可先排序后取值。代码:CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INTBEGINdeclare m int;set m=N-1; RETURN ( # Write your MySQL query statement below. s...原创 2018-10-28 11:41:42 · 217 阅读 · 0 评论 -
LeetCode.626. 换座位
思路:检索每一个id值,如果为奇数则设为i+1,如果是偶数则设为i-1,注意末位是奇是偶,重新输出即可。代码:select if(id<(select count(*) from seat),if(id%2=0,id-1,id+1),if(id%2=0,id-1,id)) as id,studentfrom seatorder by id;...原创 2018-10-28 11:45:54 · 208 阅读 · 0 评论 -
LeetCode.178. 分数排名
思路:即无间隔排名。对于每个数字比较分数中有多少个大于等于自己的数,即为自身排名。代码:select Score,(select count(distinct Score) from Scores as s2 where s2.Score >= s1.Score) as Rank from Scores as s1order by Score DESC;...原创 2018-10-28 11:49:24 · 176 阅读 · 0 评论 -
LeetCode.182. 查找重复的电子邮箱
编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。示例:±—±------------+| Id | Email |±—±------------+| 1 | a@b.com || 2 | c@d.com || 3 | a@b.com |±—±------------+根据以上输入,你的查询应返回以下结果:±-------------+| Em...原创 2018-10-24 19:12:01 · 313 阅读 · 0 评论 -
LeetCode.620. 有趣的电影
思路:组合条件,降序排列。代码:SELECT *FROM cinemaHAVING description != 'boring' AND id % 2 = 1ORDER BY rating DESC;原创 2018-10-26 14:06:01 · 231 阅读 · 0 评论 -
LeetCode.595. 大的国家
代码:SELECT name, population, areaFROM WorldWHERE population > 25000000 OR area > 3000000;原创 2018-10-26 13:46:18 · 252 阅读 · 0 评论 -
LeetCode.197. 上升的温度
思路:依然是创建两个对象,进行比较。需要用到to_day函数,可将日期线性转化为整数值,两个日期的差值可以相减得到。代码:SELECT w1.IdFROM Weather w1, Weather w2WHERE w1.Temperature > w2.Temperature AND TO_DAYS(w1.RecordDate)...原创 2018-10-26 13:40:21 · 208 阅读 · 0 评论 -
LeetCode.181. 超过经理收入的员工
思路:此题题意不是很明确。正确理解方式是,一般员工后面的ManagerId是主管此员工的经理的Id,经理的ManagerId为空值。创建两个实例e1/e2,其中e1用于查普通员工,e2用于查经理。注意“连接”字段。SELECT e1.name AS EmployeeFROM Employee e1, Employee e2WHERE e1.Manag...原创 2018-10-26 13:30:28 · 169 阅读 · 0 评论 -
LeetCode.175. 组合两个表
思路:左连接Person表即可。代码:SELECT FirstName, LastName, City, StateFROM Person LEFT JOIN Address ON Person.PersonId = Address.PersonId;原创 2018-10-26 13:05:45 · 173 阅读 · 0 评论 -
LeetCode.627. 交换工资
思路:条件控制case…when…then…else…,逐一扫描update。代码:UPDATE salary SET sex = CASE sex WHEN 'm' THEN 'f' ELSE 'm' END;原创 2018-10-26 12:49:40 · 164 阅读 · 0 评论 -
LeetCode.596. 超过5名学生的课
思路1:即按课程分组,由于有重复数据,按学生计数时需要使用distinct.SELECT CLASS classFROM COURSESGROUP BY CLASSHAVING COUNT(DISTINCT STUDENT) >= 5分析1:此代码是我最初的思路,也是LeetCode记录的最优解。但是在最近增加了一个极大的测试用例导致超时。思路2:二次选择。是第一...原创 2018-10-26 12:42:23 · 213 阅读 · 0 评论 -
LeetCode.176. 第二高的薪水
思路1:即降序排序后取第二个。这里难搞的是空值情况。最后使用isnull函数,如果选择为空,则返回为空。代码1:SELECT ifnull( ( SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1 ), NULL ) AS SecondHighestSalary;思路2:第二高薪...原创 2018-10-26 12:36:33 · 232 阅读 · 0 评论 -
LeetCode.196. 删除重复的电子邮箱
思路1:创建实例p1/p2,比较两者中的Email值。代码1:delete p1from Person p1,Person p2where p1.Email=p2.Email and p1.Id>p2.Id;思路2:多重选择,需要注意每次选择必有别名。delete from Personwhere Id not in (select Id ...原创 2018-10-26 12:28:42 · 293 阅读 · 0 评论 -
LeetCode.183. 从不订购的客户
思路1:左连接,连接键为Customers的ID字段和Orders的CustomerId字段。连接完后,CustomerId中空值即为所求客户。代码:select c.name as Customersfrom Customers cleft join Orders o on o.CustomerId=c.Idwhere o.CustomerId is null;思路2:...原创 2018-10-26 12:19:32 · 144 阅读 · 0 评论 -
LeetCode.180. 连续出现的数字
分析:自连接两次,每次差值为1,检索第一个表即可。代码:select distinct l1.Num as ConsecutiveNumsfrom Logs l1 left join Logs l2 on l1.Id=l2.Id-1 left join Logs l3 on l2.Id=l3.Id-1where l1.Num=L2.Num and l2.Num=l3.Num;...原创 2018-10-28 11:51:46 · 145 阅读 · 0 评论 -
LeetCode.121. 买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 => 6)的时候卖出,最大利润 = 6-1 = 5 。注意...原创 2018-10-04 21:10:39 · 72 阅读 · 0 评论 -
LeetCode.371. 两整数之和
不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1思路1:使用自加自减运算符。但是Python由于效率问题无法通过,以下使用C实现并通过。另,LeetCode在C中直接返回a+b也可通过。代码1:int getS...原创 2018-09-27 12:14:55 · 139 阅读 · 0 评论 -
LeetCode.1.两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]思路:初步思路是两轮遍历,但由于Python效率问题,最后选择字典(哈希)解决。对于一个数字n...原创 2018-09-27 11:11:30 · 60 阅读 · 0 评论 -
LeetCode.896. 单调数列
如果数组是单调递增或单调递减的,那么它是单调的。 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。 当给定的数组 A 是单调数组时返回 true,否则返回 false。示例 1: 输入:[1,2,2,3] 输出:true示例 2...原创 2018-09-03 21:32:56 · 565 阅读 · 0 评论 -
LeetCode.561. 数组拆分 I
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。示例 1: 输入: [1,4,3,2] 输出: 4 解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).提示: n 是正整数,范围在 ...原创 2018-09-03 20:45:04 · 140 阅读 · 0 评论 -
LeetCode.412. Fizz Buzz
写一个程序,输出从 1 到 n 数字的字符串表示。 1. 如果 n 是3的倍数,输出“Fizz”; 2. 如果 n 是5的倍数,输出“Buzz”; 3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。示例: n = 15, 返回: [ “1”, “2”, “Fizz”, “4”, “Buzz...原创 2018-09-03 00:08:44 · 114 阅读 · 0 评论 -
LeetCode.728. 自除数
自除数 是指可以被它包含的每一位数除尽的数。 例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。 还有,自除数不允许包含 0 。 给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。示例 1: 输入: 上边界left = 1, 下边界right = 22 输出: [1, 2, 3,...原创 2018-09-02 23:51:52 · 62 阅读 · 0 评论 -
LeetCode.169. 求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1: 输入: [3,2,3] 输出: 3示例 2: 输入: [2,2,1,1,1,2,2] 输出: 2思路: 若列表中存在这种数量过半的众数,则列表排序后,此列表正半索引的元素一定是此众数...原创 2018-09-02 23:14:40 · 85 阅读 · 0 评论 -
Leetcode.485. 最大连续1的个数
给定一个二进制数组, 计算其中最大连续1的个数。示例 : 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意: 输入的数组只包含 0 和1。 输入数组的长度是正整数,且不超过 10,000。思路: 设置两个变量max和count,一个用于保存最大长度,一个用于保存当前长...原创 2018-09-02 22:46:40 · 353 阅读 · 0 评论 -
LeetCode.389. 找不同
给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。示例: 输入: s = “abcd ” t = “abcde” 输出: e 解释: ‘e’ 是那个被添加的字母。思路: 字符串无法变化,因此将其转为字符列表。排序,比较相对的位置即可。代码:...原创 2018-09-04 13:06:59 · 131 阅读 · 0 评论 -
LeetCode.599. 两个列表的最小索引总和
假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。示例 1: 输入: [“Shogun”, “Tapioca Express”, “Burger King”, “KFC”] [“Piatt...原创 2018-09-04 12:50:13 · 336 阅读 · 0 评论 -
LeetCode.724. 寻找数组的中心索引
给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。 如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1: 输入: nums = [1, 7, 3, 6, 5, 6] 输出: 3 解释...原创 2018-09-04 12:32:33 · 135 阅读 · 0 评论