LeetCode
阿三的学习之路
这个作者很懒,什么都没留下…
展开
-
【LeetCode刷题】动态规划:5. 最长回文子串
方法一:暴力法两次循环,判断两个字符以上的字符串是否是回文。由于判断是否属于回文函数里又有一层循环,因此时间复杂度为O(N³),空间复杂度为O(1)。class Solution { public String longestPalindrome(String s) { if(s.length()<2){ return s; } int length = 1; int begin=0; .原创 2020-08-07 23:58:54 · 988 阅读 · 0 评论 -
【LeetCode刷题】数据库之困难题:569. 员工薪水中位数
思路:使用row_number()函数增加一列,用count()函数增加一列。再计算中位数。floor()函数作用:返回小于等于该值的最大整数。select id,company,salaryfrom( select id,company,salary, row_number() over(partition by company order by salary) as rank_num, count(*) over(partition by company) as c..原创 2020-08-07 21:56:47 · 276 阅读 · 0 评论 -
【LeetCode刷题】动态规划:53. 最大子序和
分析:使用动态规划来解题定义储存最大子序和的变量a,定义作相加计算的变量sum。遍历数组,当sum>0时将当前num累加。当sum<0时重新计算,num的值赋给sum。每层遍历的最后都需要将a与sum作比较,取最大值。class Solution { public int maxSubArray(int[] nums) { int a = nums[0]; int sum = 0; for(int num : nums){.原创 2020-08-06 15:17:07 · 152 阅读 · 0 评论 -
【LeetCode刷题】数据库之中等题:177. 第N高的薪水
分析:该题为排名题,有时排名会分为3种情况,比如工资300,200,200,100不同实际场景对应的排名不同,可排成1-2-3-4,1-2-2-3,1-2-2-4这3种情况。解法1:用对salary进行排名,再用Limit取第n-1名,注意Limit不能直接用N-1,去取。Limit(N,M)表示从N+1行开始取M行。CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INTBEGIN set N=N-1; RETURN ( .原创 2020-07-30 20:01:13 · 204 阅读 · 0 评论 -
【LeetCode刷题】数据库之中等题:178. 分数排名
题目:解法1:使用dense_rank()函数,DENSE_RANK()是连续排序,即如果有两条记录重复,接下来是第二级别,比如:1 2 2 3。扩展:相比下,还有rank()函数,RANK()是跳跃排序,即如果有两条记录重复,接下来是第三级别,比如:1 2 2 4。 还有一个row_number()函数,这个比较简单,无论什么,直接按数字排下来。select Score,dense_rank() over(order by Score desc) as 'Rank'from Scores;解法原创 2020-07-02 17:50:28 · 184 阅读 · 0 评论 -
【LeetCode刷题】数据库之中等题:184. 部门工资最高的员工
题目:思路:先分组找出每个部门对应的最高工资select DepartmentId,max(Salary)from Employeegroup by DepartmentId再用IN从里头找到对应的员工MySQL:select d.Name as Department,e.name as Employee,e.Salaryfrom Employee as e join Department d on e.DepartmentId=d.idwhere(e.Departmen原创 2020-07-02 18:43:33 · 149 阅读 · 0 评论 -
【LeetCode刷题】数据库之中等题:534. 游戏玩法分析 III
解法一:窗口函数select player_id,event_date,sum(games_played) over(partition by player_id order by event_date) as games_played_so_farfrom Activity;解法二:自联结select a1.player_id,a1.event_date,sum(a2.games_played) as games_played_so_farfrom Activity a1,Activity..原创 2020-07-30 20:06:31 · 289 阅读 · 0 评论 -
【LeetCode刷题】数据库之中等题:550. 游戏玩法分析 IV
思路:先求出每对玩家的首次登录id和日期,将它作为临时表,与Activity关联,跟原表的日期做比较,相差一天的标为1。再将符合条件的相加,除以玩家总数。步骤:1、求出玩家首次登录的id和日期,作为临时表。select player_id,min(event_date) as fisrt_datefrom Activitygroup by player_id2、将Activity与临时表关联。select *from Activity a,(select player_id,min(..原创 2020-07-30 20:10:28 · 319 阅读 · 0 评论 -
【LeetCode刷题】数据库之中等题:1205. 每月交易II
SQL架构:create table if not exists Transactions (id int, country varchar(4), state enum('approved', 'declined'), amount int, trans_date date);create table if not exists Chargebacks (trans_id int, trans_date date);Truncate table Transactionsinsert into Tr原创 2020-07-01 10:40:36 · 328 阅读 · 0 评论 -
【LeetCode刷题】数据库之中等题:1280. 学生们参加各科测试的次数
思路:先用join把Students表与Subjects连接,再用count聚合select s.student_id,s.student_name,ss.subject_name,ifnull(count(e.subject_name),0) as attended_examsfrom Students s join Subjects ssleft join Examinations e on s.student_id=e.student_id and ss.subject_name=e....原创 2020-07-30 20:15:45 · 170 阅读 · 0 评论 -
【LeetCode刷题】数据库之中等题:1454. 活跃用户
分析:datediff(l2.login_date,l1.login_date) between 0 and 4两个Logins表作笛卡尔积,上边的作为连接条件,得出左表每个日期对应右表1-5天的日期。group by l1.id,l1.login_datehaving count(distinct l2.login_date)=5以表1的id,login_date做分组,count(distinct l2.login_date)=5为条件,得出连续5天的id。结果:select a...原创 2020-07-30 20:20:03 · 376 阅读 · 0 评论