Skip to content

Commit d39f1ac

Browse files
committed
update
1 parent e8ad0e8 commit d39f1ac

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+663
-28
lines changed

LICENSE.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
The MIT License (MIT)
22

3-
Copyright (c) 2018 https://github.com/kamyu104/LeetCode-Solution
3+
Copyright (c) 2018 https://github.com/kamyu104/LeetCode-Solutions
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Time: O(nlogn)
2+
# Space: O(n)
3+
4+
SELECT department_salary.pay_month, department_id,
5+
CASE
6+
WHEN department_avg < company_avg THEN 'lower'
7+
WHEN department_avg > company_avg THEN 'higher'
8+
ELSE 'same'
9+
END AS comparison
10+
FROM
11+
(
12+
SELECT department_id, AVG(amount) AS department_avg, date_format(pay_date, '%Y-%m') AS pay_month
13+
FROM salary JOIN employee ON salary.employee_id = employee.employee_id
14+
GROUP BY department_id, pay_month
15+
) AS department_salary
16+
JOIN
17+
(
18+
SELECT AVG(amount) AS company_avg, date_format(pay_date, '%Y-%m') AS pay_month
19+
FROM salary
20+
GROUP BY date_format(pay_date, '%Y-%m')
21+
) AS company_salary
22+
ON department_salary.pay_month = company_salary.pay_month
23+
;
24+

MySQL/big-countries.sql

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Time: O(n)
2+
# Space: O(1)
3+
4+
SELECT name, population, area
5+
FROM World
6+
WHERE area > 3000000 OR population > 25000000;
7+

MySQL/biggest-single-number.sql

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Time: O(n)
2+
# Space: O(n)
3+
4+
SELECT
5+
IFNULL(
6+
(SELECT
7+
MAX(num)
8+
FROM
9+
(SELECT
10+
num
11+
FROM
12+
number
13+
GROUP BY num
14+
HAVING COUNT(num) = 1
15+
ORDER BY NULL) AS t
16+
)
17+
, NULL
18+
) AS num
19+
;
20+
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Time: O(n)
2+
# Space: O(n)
3+
4+
SELECT class
5+
FROM courses
6+
GROUP BY class
7+
HAVING COUNT(DISTINCT student) >= 5
8+
ORDER BY NULL;
9+

MySQL/combine-two-tables.sql

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Time: O(n), n is size of Person Table
2+
# Space: O(n)
3+
4+
SELECT FirstName, LastName, City, State FROM Person LEFT JOIN Address
5+
ON Person.PersonId=Address.PersonId
6+

MySQL/consecutive-available-seats.sql

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Time: O(nlogn)
2+
# Space: O(n)
3+
4+
SELECT DISTINCT c1.seat_id
5+
FROM cinema c1 JOIN cinema c2
6+
ON ((c1.seat_id = c2.seat_id - 1) OR (c1.seat_id = c2.seat_id + 1))
7+
AND c1.free = true AND c2.free = true
8+
ORDER BY c1.seat_id
9+
;
10+

MySQL/consecutive-numbers.sql

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Time: O(n)
2+
# Space: O(n)
3+
4+
SELECT DISTINCT(Num) AS ConsecutiveNums
5+
FROM (
6+
SELECT
7+
Num,
8+
@counter := IF(@prev = Num, @counter + 1, 1) AS how_many_cnt_in_a_row,
9+
@prev := Num
10+
FROM Logs y, (SELECT @counter:=1, @prev:=NULL) vars
11+
) sq
12+
WHERE how_many_cnt_in_a_row >= 3
13+
14+
SELECT DISTINCT l1.Num as ConsecutiveNums
15+
FROM Logs l1, Logs l2, Logs l3
16+
WHERE l1.Id + 1 = l2.Id AND l2.Id + 1 = l3.Id AND l1.Num = l2.Num AND l2.Num = l3.Num
17+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Time: O(s+dlogd)
2+
# Space: O(d+s)
3+
4+
SELECT
5+
dept_name, COUNT(student_id) AS student_number
6+
FROM
7+
department
8+
LEFT JOIN
9+
student ON department.dept_id = student.dept_id
10+
GROUP BY department.dept_name
11+
ORDER BY student_number DESC , department.dept_name
12+
;
13+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Time: O(n)
2+
# Space: O(n)
3+
4+
SELECT customer_number
5+
FROM orders
6+
GROUP BY customer_number
7+
HAVING COUNT(order_number) =
8+
(SELECT MAX(*)
9+
FROM
10+
(SELECT COUNT(*) AS cnt
11+
FROM
12+
orders
13+
GROUP BY customer_number
14+
ORDER BY NULL
15+
) AS cnt_tbl
16+
)
17+
ORDER BY NULL
18+
LIMIT 1
19+
;
20+

MySQL/customers-who-never-order.sql

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Time: O(n^2)
2+
# Space: O(1)
3+
4+
SELECT Name AS Customers FROM Customers WHERE Id NOT IN (SELECT CustomerId FROM Orders)
5+
6+
SELECT Customers.Name AS Customers FROM (Customers LEFT JOIN Orders ON Customers.Id = Orders.CustomerId) WHERE Orders.CustomerId IS NULL
7+

MySQL/delete-duplicate-emails.sql

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Time: O(n^2)
2+
# Space: O(n)
3+
4+
DELETE p1
5+
FROM Person p1, Person p2
6+
WHERE p1.Email = p2.Email AND p1.Id > p2.Id
7+

MySQL/department-highest-salary.sql

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Time: O(n^2)
2+
# Space: O(n)
3+
4+
SELECT d.Department AS Department, e.Name AS Employee, d.Salary AS Salary
5+
FROM (SELECT Department.Id AS DepartmentId, Department.Name AS Department, emp.Salary AS Salary
6+
FROM Department JOIN (SELECT DepartmentId, MAX(Salary) AS Salary FROM Employee GROUP BY DepartmentId) emp
7+
ON Department.Id = emp.DepartmentId) d
8+
JOIN Employee e
9+
ON e.DepartmentId = d.DepartmentId and e.Salary = d.Salary
10+
11+
SELECT Department.Name AS Department, Employee.Name AS Employee, Employee.Salary AS Salary
12+
FROM Department JOIN Employee ON Employee.DepartmentId = Department.Id
13+
WHERE Employee.Salary IN (SELECT MAX(e.Salary) FROM Employee e WHERE e.DepartmentId = Employee.DepartmentId)
14+
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Time: O(n^2)
2+
# Space: O(n)
3+
4+
SELECT D.Name AS Department, E.Name AS Employee, E.Salary AS Salary
5+
FROM Employee E INNER JOIN Department D ON E.DepartmentId = D.Id
6+
WHERE (SELECT COUNT(DISTINCT(Salary)) FROM Employee
7+
WHERE DepartmentId = E.DepartmentId AND Salary > E.Salary) < 3
8+
ORDER by E.DepartmentId, E.Salary DESC;
9+

MySQL/duplicate-emails.sql

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Time: O(n^2)
2+
# Space: O(n)
3+
4+
SELECT Email FROM Person GROUP BY Email HAVING COUNT(*) > 1
5+

MySQL/employee-bonus.sql

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Time: O(n) if hash join, O(nlogn) if merge join
2+
# Space: O(n)
3+
4+
SELECT
5+
Employee.name, Bonus.bonus
6+
FROM
7+
Employee
8+
LEFT JOIN
9+
Bonus ON Employee.empid = Bonus.empid
10+
WHERE
11+
Bonus.bonus < 1000 OR Bonus.bonus IS NULL
12+
;
13+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Time: O(n^2)
2+
# Space: O(1)
3+
4+
SELECT e.Name AS Employee FROM Employee e LEFT JOIN Employee b
5+
ON e.ManagerId=b.Id
6+
WHERE e.Salary > b.Salary
7+
8+
SELECT Name AS Employee
9+
FROM Employee e
10+
WHERE e.ManagerId IS NOT NULL AND e.Salary > (SELECT Salary
11+
FROM Employee
12+
WHERE e.ManagerId = Id)
13+

MySQL/exchange-seats.sql

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Time: O(nlogn)
2+
# Space: O(n)
3+
4+
SELECT
5+
s1.id, COALESCE(s2.student, s1.student) AS student
6+
FROM
7+
seat s1
8+
LEFT JOIN
9+
seat s2 ON ((s1.id + 1) ^ 1) - 1 = s2.id
10+
ORDER BY s1.id;
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Time: O(n^2)
2+
# Space: O(n)
3+
4+
SELECT EA.Id,
5+
EA.Month,
6+
SUM(EB.salary) AS Salary
7+
FROM (SELECT E1.*
8+
FROM employee E1
9+
LEFT JOIN (SELECT id,
10+
MAX(month) AS month
11+
FROM employee
12+
GROUP BY id) E2
13+
ON E1.id = E2.id
14+
WHERE E1.month < E2.month) EA
15+
LEFT JOIN employee EB
16+
ON EA.id = EB.id
17+
WHERE EA.month - 2 <= EB.month
18+
AND EB.month <= EA.month
19+
GROUP BY EA.id,
20+
EA.month
21+
ORDER BY EA.id,
22+
month DESC
23+

MySQL/find-customer-referee.sql

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Time: O(n)
2+
# Space: O(1)
3+
4+
SELECT name
5+
FROM customer
6+
WHERE referee_id is NULL OR referee_id != 2;
7+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Time: O(nlogn)
2+
# Space: O(n)
3+
4+
SELECT AVG(n.Number) AS median
5+
FROM Numbers n LEFT JOIN
6+
(
7+
SELECT Number, @prev := @count AS prevNumber, (@count := @count + Frequency) AS countNumber
8+
FROM Numbers,
9+
(SELECT @count := 0, @prev := 0, @total := (SELECT SUM(Frequency) FROM Numbers)) temp ORDER BY Number
10+
) n2
11+
ON n.Number = n2.Number
12+
WHERE
13+
(prevNumber < floor((@total+1)/2) AND countNumber >= floor((@total+1)/2))
14+
OR
15+
(prevNumber < floor((@total+2)/2) AND countNumber >= floor((@total+2)/2))
16+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Time: O(rlogr + aloga)
2+
# Space: O(r + a)
3+
4+
SELECT
5+
ROUND(
6+
IFNULL(
7+
(SELECT COUNT(*) FROM (SELECT DISTINCT requester_id, accepter_id FROM request_accepted) AS r)
8+
/
9+
(SELECT COUNT(*) FROM (SELECT DISTINCT sender_id, send_to_id FROM friend_request) AS a),
10+
0)
11+
, 2) AS accept_rate;
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Time: O(nlogn)
2+
# Space: O(n)
3+
4+
SELECT ids as id, COUNT(*) AS num
5+
FROM
6+
(
7+
SELECT requester_id AS ids FROM request_accepted
8+
UNION ALL
9+
SELECT accepter_id FROM request_accepted
10+
) AS tmp
11+
GROUP BY ids
12+
ORDER BY num DESC
13+
LIMIT 1
14+
;
15+
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Time: O(nlogn)
2+
# Space: O(n)
3+
4+
SELECT
5+
question_id AS 'survey_log'
6+
FROM
7+
survey_log
8+
GROUP BY question_id
9+
ORDER BY COUNT(answer_id) / COUNT(IF(action = 'show', 1, 0)) DESC
10+
LIMIT 1;
11+

MySQL/human-traffic-of-stadium.sql

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Time: O(n^3)
2+
# Space: O(n^3)
3+
4+
SELECT DISTINCT s1.*
5+
FROM stadium AS s1, stadium AS s2, stadium AS s3
6+
WHERE s1.people >= 100 AND s2.people >= 100 AND s3.people >= 100
7+
AND
8+
(
9+
(s2.id = s1.id + 1 AND s3.id = s2.id + 1 AND s3.id = s1.id + 2) -- s1, s2, s3
10+
OR
11+
(s1.id = s2.id + 1 AND s3.id = s1.id + 1 AND s3.id = s2.id + 2) -- s2, s1, s3
12+
OR
13+
(s3.id = s2.id + 1 AND s1.id = s3.id + 1 AND s1.id = s2.id + 2) -- s2, s3, s1
14+
)
15+
ORDER BY s1.id
16+
;
17+

MySQL/investments-in-2016.sql

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Time: O(n^2)
2+
# Space: O(n)
3+
4+
SELECT
5+
SUM(insurance.TIV_2016) AS TIV_2016
6+
FROM
7+
insurance
8+
WHERE
9+
insurance.TIV_2015 IN
10+
(
11+
SELECT
12+
TIV_2015
13+
FROM
14+
insurance
15+
GROUP BY TIV_2015
16+
HAVING COUNT(*) > 1
17+
ORDER BY NULL
18+
)
19+
AND CONCAT(LAT, LON) IN
20+
(
21+
SELECT
22+
CONCAT(LAT, LON)
23+
FROM
24+
insurance
25+
GROUP BY LAT , LON
26+
HAVING COUNT(*) = 1
27+
ORDER BY NULL
28+
)
29+
;
30+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Time: O(n)
2+
# Space: O(n)
3+
4+
SELECT
5+
Name
6+
FROM
7+
Employee AS t1 INNER JOIN
8+
(SELECT
9+
ManagerId
10+
FROM
11+
Employee
12+
GROUP BY ManagerId
13+
HAVING COUNT(ManagerId) >= 5
14+
ORDER BY NULL) AS t2
15+
ON t1.Id = t2.ManagerId
16+
;
17+

0 commit comments

Comments
 (0)