Skip to content

Commit 49da38a

Browse files
committed
差分数组
1 parent bf3ded9 commit 49da38a

File tree

3 files changed

+229
-0
lines changed

3 files changed

+229
-0
lines changed

1094.拼车.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* @lc app=leetcode.cn id=1094 lang=golang
3+
*
4+
* [1094] 拼车
5+
*
6+
* https://leetcode-cn.com/problems/car-pooling/description/
7+
*
8+
* algorithms
9+
* Medium (55.85%)
10+
* Likes: 164
11+
* Dislikes: 0
12+
* Total Accepted: 43.8K
13+
* Total Submissions: 78.7K
14+
* Testcase Example: '[[2,1,5],[3,3,7]]\n4'
15+
*
16+
* 车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向)
17+
*
18+
* 给定整数 capacity 和一个数组 trips ,  trip[i] = [numPassengersi, fromi, toi] 表示第 i
19+
* 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromi 和 toi 。这些位置是从汽车的初始位置向东的公里数。
20+
*
21+
* 当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false。
22+
*
23+
*
24+
*
25+
* 示例 1:
26+
*
27+
*
28+
* 输入:trips = [[2,1,5],[3,3,7]], capacity = 4
29+
* 输出:false
30+
*
31+
*
32+
* 示例 2:
33+
*
34+
*
35+
* 输入:trips = [[2,1,5],[3,3,7]], capacity = 5
36+
* 输出:true
37+
*
38+
*
39+
*
40+
*
41+
* 提示:
42+
*
43+
*
44+
* 1 <= trips.length <= 1000
45+
* trips[i].length == 3
46+
* 1 <= numPassengersi <= 100
47+
* 0 <= fromi < toi <= 1000
48+
* 1 <= capacity <= 10^5
49+
*
50+
*
51+
*/
52+
53+
// @lc code=start
54+
func carPooling(trips [][]int, capacity int) bool {
55+
delta := make([]int, 1001)
56+
for _, v := range trips {
57+
delta[v[1]] += v[0]
58+
delta[v[2]] -= v[0]
59+
}
60+
cur := 0
61+
for _, v := range delta {
62+
cur += v
63+
if cur > capacity {
64+
return false
65+
}
66+
}
67+
return true
68+
69+
}
70+
71+
// @lc code=end
72+

1109.航班预订统计.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
* @lc app=leetcode.cn id=1109 lang=golang
3+
*
4+
* [1109] 航班预订统计
5+
*
6+
* https://leetcode-cn.com/problems/corporate-flight-bookings/description/
7+
*
8+
* algorithms
9+
* Medium (60.44%)
10+
* Likes: 341
11+
* Dislikes: 0
12+
* Total Accepted: 77.8K
13+
* Total Submissions: 128.4K
14+
* Testcase Example: '[[1,2,10],[2,3,20],[2,5,25]]\n5'
15+
*
16+
* 这里有 n 个航班,它们分别从 1 到 n 进行编号。
17+
*
18+
* 有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从
19+
* firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。
20+
*
21+
* 请你返回一个长度为 n 的数组 answer,里面的元素是每个航班预定的座位总数。
22+
*
23+
*
24+
*
25+
* 示例 1:
26+
*
27+
*
28+
* 输入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
29+
* 输出:[10,55,45,25,25]
30+
* 解释:
31+
* 航班编号 1 2 3 4 5
32+
* 预订记录 1 : 10 10
33+
* 预订记录 2 : 20 20
34+
* 预订记录 3 : 25 25 25 25
35+
* 总座位数: 10 55 45 25 25
36+
* 因此,answer = [10,55,45,25,25]
37+
*
38+
*
39+
* 示例 2:
40+
*
41+
*
42+
* 输入:bookings = [[1,2,10],[2,2,15]], n = 2
43+
* 输出:[10,25]
44+
* 解释:
45+
* 航班编号 1 2
46+
* 预订记录 1 : 10 10
47+
* 预订记录 2 : 15
48+
* 总座位数: 10 25
49+
* 因此,answer = [10,25]
50+
*
51+
*
52+
*
53+
*
54+
* 提示:
55+
*
56+
*
57+
* 1 <= n <= 2 * 10^4
58+
* 1 <= bookings.length <= 2 * 10^4
59+
* bookings[i].length == 3
60+
* 1 <= firsti <= lasti <= n
61+
* 1 <= seatsi <= 10^4
62+
*
63+
*
64+
*/
65+
66+
// @lc code=start
67+
func corpFlightBookings(bookings [][]int, n int) []int {
68+
delta := make([]int, n+2)
69+
70+
for _, v := range bookings {
71+
delta[v[0]] += v[2]
72+
delta[v[1]+1] -= v[2]
73+
}
74+
75+
for i := 1; i <= n; i++ {
76+
delta[i] = delta[i-1] + delta[i]
77+
}
78+
79+
return delta[1 : n+1]
80+
}
81+
82+
// @lc code=end
83+

1854.人口最多的年份.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* @lc app=leetcode.cn id=1854 lang=golang
3+
*
4+
* [1854] 人口最多的年份
5+
*
6+
* https://leetcode-cn.com/problems/maximum-population-year/description/
7+
*
8+
* algorithms
9+
* Easy (76.07%)
10+
* Likes: 41
11+
* Dislikes: 0
12+
* Total Accepted: 13.9K
13+
* Total Submissions: 18.4K
14+
* Testcase Example: '[[1993,1999],[2000,2010]]'
15+
*
16+
* 给你一个二维整数数组 logs ,其中每个 logs[i] = [birthi, deathi] 表示第 i 个人的出生和死亡年份。
17+
*
18+
* 年份 x 的 人口 定义为这一年期间活着的人的数目。第 i 个人被计入年份 x 的人口需要满足:x 在闭区间 [birthi, deathi - 1]
19+
* 内。注意,人不应当计入他们死亡当年的人口中。
20+
*
21+
* 返回 人口最多 且 最早 的年份。
22+
*
23+
*
24+
*
25+
* 示例 1:
26+
*
27+
* 输入:logs = [[1993,1999],[2000,2010]]
28+
* 输出:1993
29+
* 解释:人口最多为 1 ,而 1993 是人口为 1 的最早年份。
30+
*
31+
*
32+
* 示例 2:
33+
*
34+
* 输入:logs = [[1950,1961],[1960,1971],[1970,1981]]
35+
* 输出:1960
36+
* 解释:
37+
* 人口最多为 2 ,分别出现在 1960 和 1970 。
38+
* 其中最早年份是 1960 。
39+
*
40+
*
41+
*
42+
* 提示:
43+
*
44+
*
45+
* 1 <= logs.length <= 100
46+
* 1950 <= birthi < deathi <= 2050
47+
*
48+
*
49+
*/
50+
51+
// @lc code=start
52+
func maximumPopulation(logs [][]int) int {
53+
offset := 1950
54+
delta := make([]int, 101)
55+
for _, v := range logs {
56+
delta[v[0]-offset]++
57+
delta[v[1]-offset]--
58+
}
59+
max := 0
60+
idx := 0
61+
cur := 0
62+
for i := 1; i < 101; i++ {
63+
cur += delta[i]
64+
if cur > max {
65+
max = cur
66+
idx = i
67+
}
68+
}
69+
return idx + offset
70+
71+
}
72+
73+
// @lc code=end
74+

0 commit comments

Comments
 (0)