Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3fd9474

Browse files
committed
feat: add solutions to lc problem: No.1665
No.1665.Minimum Initial Energy to Finish Tasks
1 parent be3a604 commit 3fd9474

File tree

6 files changed

+192
-2
lines changed

6 files changed

+192
-2
lines changed

‎solution/1600-1699/1665.Minimum Initial Energy to Finish Tasks/README.md‎

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,22 +71,104 @@
7171

7272
<!-- 这里可写通用的实现逻辑 -->
7373

74+
**方法一:贪心 + 自定义排序**
75+
76+
我们假设任务数为 $n,ドル初始能量值为 $E,ドル考虑完成最后一个任务,这需要我们完成前 $n-1$ 个任务后,剩余的能量值不小于完成最后一个任务需要达到的能量值 $m_n,ドル即:
77+
78+
$$
79+
E-\sum_{i=1}^{n-1} a_i \geq m_n
80+
$$
81+
82+
我们可以将 $m_n$ 表示成 $a_n+(m_n - a_n),ドル然后将上面的式子变形,得到:
83+
84+
$$
85+
E-\sum_{i=1}^{n-1} a_i \geq a_n+(m_n - a_n)
86+
$$
87+
88+
整理可得:
89+
90+
$$
91+
E \geq \sum_{i=1}^{n} a_i + (m_n - a_n)
92+
$$
93+
94+
其中 $\sum_{i=1}^{n} a_i$ 是固定不变的,要使得初始值能量值 $E$ 最小,我们需要让 $m_n - a_n$ 最小,即 $a_n-m_n$ 最大。因此,我们可以将任务按照 $a_n-m_n$ 从小到大排序,然后依次完成任务,算出所需要的初始能量值。
95+
96+
时间复杂度 $O(n\times \log n)$。其中 $n$ 为任务数。
97+
7498
<!-- tabs:start -->
7599

76100
### **Python3**
77101

78102
<!-- 这里可写当前语言的特殊实现逻辑 -->
79103

80104
```python
81-
105+
class Solution:
106+
def minimumEffort(self, tasks: List[List[int]]) -> int:
107+
ans = t = 0
108+
for a, m in sorted(tasks, key=lambda x: x[0] - x[1]):
109+
if t < m:
110+
ans += m - t
111+
t = m
112+
t -= a
113+
return ans
82114
```
83115

84116
### **Java**
85117

86118
<!-- 这里可写当前语言的特殊实现逻辑 -->
87119

88120
```java
121+
class Solution {
122+
public int minimumEffort(int[][] tasks) {
123+
Arrays.sort(tasks, (a, b) -> a[0] - b[0] - a[1] + b[1]);
124+
int ans = 0, t = 0;
125+
for (var e : tasks) {
126+
if (t < e[1]) {
127+
ans += e[1] - t;
128+
t = e[1];
129+
}
130+
t -= e[0];
131+
}
132+
return ans;
133+
}
134+
}
135+
```
136+
137+
### **C++**
138+
139+
```cpp
140+
class Solution {
141+
public:
142+
int minimumEffort(vector<vector<int>>& tasks) {
143+
sort(tasks.begin(), tasks.end(), [&](auto& a, auto& b) -> bool { return a[0] - a[1] < b[0] - b[1]; });
144+
int ans = 0, t = 0;
145+
for (auto& e : tasks) {
146+
if (t < e[1]) {
147+
ans += e[1] - t;
148+
t = e[1];
149+
}
150+
t -= e[0];
151+
}
152+
return ans;
153+
}
154+
};
155+
```
89156
157+
### **Go**
158+
159+
```go
160+
func minimumEffort(tasks [][]int) int {
161+
sort.Slice(tasks, func(i, j int) bool { return tasks[i][0]-tasks[i][1] < tasks[j][0]-tasks[j][1] })
162+
var ans, t int
163+
for _, e := range tasks {
164+
if t < e[1] {
165+
ans += e[1] - t
166+
t = e[1]
167+
}
168+
t -= e[0]
169+
}
170+
return ans
171+
}
90172
```
91173

92174
### **...**

‎solution/1600-1699/1665.Minimum Initial Energy to Finish Tasks/README_EN.md‎

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,71 @@ Starting with 27 energy, we finish the tasks in the following order:
7373
### **Python3**
7474

7575
```python
76-
76+
class Solution:
77+
def minimumEffort(self, tasks: List[List[int]]) -> int:
78+
ans = t = 0
79+
for a, m in sorted(tasks, key=lambda x: x[0] - x[1]):
80+
if t < m:
81+
ans += m - t
82+
t = m
83+
t -= a
84+
return ans
7785
```
7886

7987
### **Java**
8088

8189
```java
90+
class Solution {
91+
public int minimumEffort(int[][] tasks) {
92+
Arrays.sort(tasks, (a, b) -> a[0] - b[0] - a[1] + b[1]);
93+
int ans = 0, t = 0;
94+
for (var e : tasks) {
95+
if (t < e[1]) {
96+
ans += e[1] - t;
97+
t = e[1];
98+
}
99+
t -= e[0];
100+
}
101+
return ans;
102+
}
103+
}
104+
```
105+
106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
public:
111+
int minimumEffort(vector<vector<int>>& tasks) {
112+
sort(tasks.begin(), tasks.end(), [&](auto& a, auto& b) -> bool { return a[0] - a[1] < b[0] - b[1]; });
113+
int ans = 0, t = 0;
114+
for (auto& e : tasks) {
115+
if (t < e[1]) {
116+
ans += e[1] - t;
117+
t = e[1];
118+
}
119+
t -= e[0];
120+
}
121+
return ans;
122+
}
123+
};
124+
```
82125
126+
### **Go**
127+
128+
```go
129+
func minimumEffort(tasks [][]int) int {
130+
sort.Slice(tasks, func(i, j int) bool { return tasks[i][0]-tasks[i][1] < tasks[j][0]-tasks[j][1] })
131+
var ans, t int
132+
for _, e := range tasks {
133+
if t < e[1] {
134+
ans += e[1] - t
135+
t = e[1]
136+
}
137+
t -= e[0]
138+
}
139+
return ans
140+
}
83141
```
84142

85143
### **...**
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
int minimumEffort(vector<vector<int>>& tasks) {
4+
sort(tasks.begin(), tasks.end(), [&](auto& a, auto& b) -> bool { return a[0] - a[1] < b[0] - b[1]; });
5+
int ans = 0, t = 0;
6+
for (auto& e : tasks) {
7+
if (t < e[1]) {
8+
ans += e[1] - t;
9+
t = e[1];
10+
}
11+
t -= e[0];
12+
}
13+
return ans;
14+
}
15+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
func minimumEffort(tasks [][]int) int {
2+
sort.Slice(tasks, func(i, j int) bool { return tasks[i][0]-tasks[i][1] < tasks[j][0]-tasks[j][1] })
3+
var ans, t int
4+
for _, e := range tasks {
5+
if t < e[1] {
6+
ans += e[1] - t
7+
t = e[1]
8+
}
9+
t -= e[0]
10+
}
11+
return ans
12+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public int minimumEffort(int[][] tasks) {
3+
Arrays.sort(tasks, (a, b) -> a[0] - b[0] - a[1] + b[1]);
4+
int ans = 0, t = 0;
5+
for (var e : tasks) {
6+
if (t < e[1]) {
7+
ans += e[1] - t;
8+
t = e[1];
9+
}
10+
t -= e[0];
11+
}
12+
return ans;
13+
}
14+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def minimumEffort(self, tasks: List[List[int]]) -> int:
3+
ans = t = 0
4+
for a, m in sorted(tasks, key=lambda x: x[0] - x[1]):
5+
if t < m:
6+
ans += m - t
7+
t = m
8+
t -= a
9+
return ans

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /