Skip to content

Commit 8415a7e

Browse files
authored
feat: add solutions for lc No.3919 (#5185)
1 parent 692b7b8 commit 8415a7e

7 files changed

Lines changed: 368 additions & 6 deletions

File tree

solution/3900-3999/3919.Minimum Cost to Move Between Indices/README.md

Lines changed: 124 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,25 +102,146 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3900-3999/3919.Mi
102102
#### Python3
103103

104104
```python
105-
105+
class Solution:
106+
def minCost(self, nums: list[int], queries: list[list[int]]) -> list[int]:
107+
n = len(nums)
108+
s1 = [0] * n
109+
s2 = [0] * n
110+
for i in range(1, n):
111+
c1 = (
112+
nums[i] - nums[i - 1]
113+
if i > 1 and nums[i - 1] - nums[i - 2] <= nums[i] - nums[i - 1]
114+
else 1
115+
)
116+
c2 = (
117+
nums[i] - nums[i - 1]
118+
if i < n - 1 and nums[i] - nums[i - 1] > nums[i + 1] - nums[i]
119+
else 1
120+
)
121+
s1[i] = s1[i - 1] + c1
122+
s2[i] = s2[i - 1] + c2
123+
m = len(queries)
124+
ans = [0] * m
125+
for i, (l, r) in enumerate(queries):
126+
ans[i] = s1[r] - s1[l] if l < r else s2[l] - s2[r]
127+
return ans
106128
```
107129

108130
#### Java
109131

110132
```java
111-
133+
class Solution {
134+
public int[] minCost(int[] nums, int[][] queries) {
135+
int n = nums.length;
136+
int[] s1 = new int[n];
137+
int[] s2 = new int[n];
138+
for (int i = 1; i < n; i++) {
139+
int c1 = (i > 1 && nums[i - 1] - nums[i - 2] <= nums[i] - nums[i - 1])
140+
? nums[i] - nums[i - 1]
141+
: 1;
142+
int c2 = (i < n - 1 && nums[i] - nums[i - 1] > nums[i + 1] - nums[i])
143+
? nums[i] - nums[i - 1]
144+
: 1;
145+
s1[i] = s1[i - 1] + c1;
146+
s2[i] = s2[i - 1] + c2;
147+
}
148+
int m = queries.length;
149+
int[] ans = new int[m];
150+
for (int i = 0; i < m; i++) {
151+
int l = queries[i][0];
152+
int r = queries[i][1];
153+
ans[i] = (l < r) ? s1[r] - s1[l] : s2[l] - s2[r];
154+
}
155+
return ans;
156+
}
157+
}
112158
```
113159

114160
#### C++
115161

116162
```cpp
117-
163+
class Solution {
164+
public:
165+
vector<int> minCost(vector<int>& nums, vector<vector<int>>& queries) {
166+
int n = nums.size();
167+
vector<int> s1(n, 0);
168+
vector<int> s2(n, 0);
169+
for (int i = 1; i < n; i++) {
170+
int c1 = (i > 1 && nums[i - 1] - nums[i - 2] <= nums[i] - nums[i - 1]) ? nums[i] - nums[i - 1] : 1;
171+
int c2 = (i < n - 1 && nums[i] - nums[i - 1] > nums[i + 1] - nums[i]) ? nums[i] - nums[i - 1] : 1;
172+
s1[i] = s1[i - 1] + c1;
173+
s2[i] = s2[i - 1] + c2;
174+
}
175+
int m = queries.size();
176+
vector<int> ans(m);
177+
for (int i = 0; i < m; i++) {
178+
int l = queries[i][0];
179+
int r = queries[i][1];
180+
ans[i] = (l < r) ? s1[r] - s1[l] : s2[l] - s2[r];
181+
}
182+
return ans;
183+
}
184+
};
118185
```
119186
120187
#### Go
121188
122189
```go
190+
func minCost(nums []int, queries [][]int) []int {
191+
n := len(nums)
192+
s1 := make([]int, n)
193+
s2 := make([]int, n)
194+
for i := 1; i < n; i++ {
195+
c1 := 1
196+
if i > 1 && nums[i-1]-nums[i-2] <= nums[i]-nums[i-1] {
197+
c1 = nums[i] - nums[i-1]
198+
}
199+
c2 := 1
200+
if i < n-1 && nums[i]-nums[i-1] > nums[i+1]-nums[i] {
201+
c2 = nums[i] - nums[i-1]
202+
}
203+
s1[i] = s1[i-1] + c1
204+
s2[i] = s2[i-1] + c2
205+
}
206+
m := len(queries)
207+
ans := make([]int, m)
208+
for i := 0; i < m; i++ {
209+
l := queries[i][0]
210+
r := queries[i][1]
211+
if l < r {
212+
ans[i] = s1[r] - s1[l]
213+
} else {
214+
ans[i] = s2[l] - s2[r]
215+
}
216+
}
217+
return ans
218+
}
219+
```
123220

221+
#### TypeScript
222+
223+
```ts
224+
function minCost(nums: number[], queries: number[][]): number[] {
225+
const n = nums.length;
226+
const s1: number[] = new Array(n).fill(0);
227+
const s2: number[] = new Array(n).fill(0);
228+
for (let i = 1; i < n; i++) {
229+
const c1 =
230+
i > 1 && nums[i - 1] - nums[i - 2] <= nums[i] - nums[i - 1] ? nums[i] - nums[i - 1] : 1;
231+
const c2 =
232+
i < n - 1 && nums[i] - nums[i - 1] > nums[i + 1] - nums[i] ? nums[i] - nums[i - 1] : 1;
233+
s1[i] = s1[i - 1] + c1;
234+
s2[i] = s2[i - 1] + c2;
235+
}
236+
const m = queries.length;
237+
const ans: number[] = new Array(m);
238+
for (let i = 0; i < m; i++) {
239+
const l = queries[i][0];
240+
const r = queries[i][1];
241+
ans[i] = l < r ? s1[r] - s1[l] : s2[l] - s2[r];
242+
}
243+
return ans;
244+
}
124245
```
125246

126247
<!-- tabs:end -->

solution/3900-3999/3919.Minimum Cost to Move Between Indices/README_EN.md

Lines changed: 124 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,25 +100,146 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3900-3999/3919.Mi
100100
#### Python3
101101

102102
```python
103-
103+
class Solution:
104+
def minCost(self, nums: list[int], queries: list[list[int]]) -> list[int]:
105+
n = len(nums)
106+
s1 = [0] * n
107+
s2 = [0] * n
108+
for i in range(1, n):
109+
c1 = (
110+
nums[i] - nums[i - 1]
111+
if i > 1 and nums[i - 1] - nums[i - 2] <= nums[i] - nums[i - 1]
112+
else 1
113+
)
114+
c2 = (
115+
nums[i] - nums[i - 1]
116+
if i < n - 1 and nums[i] - nums[i - 1] > nums[i + 1] - nums[i]
117+
else 1
118+
)
119+
s1[i] = s1[i - 1] + c1
120+
s2[i] = s2[i - 1] + c2
121+
m = len(queries)
122+
ans = [0] * m
123+
for i, (l, r) in enumerate(queries):
124+
ans[i] = s1[r] - s1[l] if l < r else s2[l] - s2[r]
125+
return ans
104126
```
105127

106128
#### Java
107129

108130
```java
109-
131+
class Solution {
132+
public int[] minCost(int[] nums, int[][] queries) {
133+
int n = nums.length;
134+
int[] s1 = new int[n];
135+
int[] s2 = new int[n];
136+
for (int i = 1; i < n; i++) {
137+
int c1 = (i > 1 && nums[i - 1] - nums[i - 2] <= nums[i] - nums[i - 1])
138+
? nums[i] - nums[i - 1]
139+
: 1;
140+
int c2 = (i < n - 1 && nums[i] - nums[i - 1] > nums[i + 1] - nums[i])
141+
? nums[i] - nums[i - 1]
142+
: 1;
143+
s1[i] = s1[i - 1] + c1;
144+
s2[i] = s2[i - 1] + c2;
145+
}
146+
int m = queries.length;
147+
int[] ans = new int[m];
148+
for (int i = 0; i < m; i++) {
149+
int l = queries[i][0];
150+
int r = queries[i][1];
151+
ans[i] = (l < r) ? s1[r] - s1[l] : s2[l] - s2[r];
152+
}
153+
return ans;
154+
}
155+
}
110156
```
111157

112158
#### C++
113159

114160
```cpp
115-
161+
class Solution {
162+
public:
163+
vector<int> minCost(vector<int>& nums, vector<vector<int>>& queries) {
164+
int n = nums.size();
165+
vector<int> s1(n, 0);
166+
vector<int> s2(n, 0);
167+
for (int i = 1; i < n; i++) {
168+
int c1 = (i > 1 && nums[i - 1] - nums[i - 2] <= nums[i] - nums[i - 1]) ? nums[i] - nums[i - 1] : 1;
169+
int c2 = (i < n - 1 && nums[i] - nums[i - 1] > nums[i + 1] - nums[i]) ? nums[i] - nums[i - 1] : 1;
170+
s1[i] = s1[i - 1] + c1;
171+
s2[i] = s2[i - 1] + c2;
172+
}
173+
int m = queries.size();
174+
vector<int> ans(m);
175+
for (int i = 0; i < m; i++) {
176+
int l = queries[i][0];
177+
int r = queries[i][1];
178+
ans[i] = (l < r) ? s1[r] - s1[l] : s2[l] - s2[r];
179+
}
180+
return ans;
181+
}
182+
};
116183
```
117184
118185
#### Go
119186
120187
```go
188+
func minCost(nums []int, queries [][]int) []int {
189+
n := len(nums)
190+
s1 := make([]int, n)
191+
s2 := make([]int, n)
192+
for i := 1; i < n; i++ {
193+
c1 := 1
194+
if i > 1 && nums[i-1]-nums[i-2] <= nums[i]-nums[i-1] {
195+
c1 = nums[i] - nums[i-1]
196+
}
197+
c2 := 1
198+
if i < n-1 && nums[i]-nums[i-1] > nums[i+1]-nums[i] {
199+
c2 = nums[i] - nums[i-1]
200+
}
201+
s1[i] = s1[i-1] + c1
202+
s2[i] = s2[i-1] + c2
203+
}
204+
m := len(queries)
205+
ans := make([]int, m)
206+
for i := 0; i < m; i++ {
207+
l := queries[i][0]
208+
r := queries[i][1]
209+
if l < r {
210+
ans[i] = s1[r] - s1[l]
211+
} else {
212+
ans[i] = s2[l] - s2[r]
213+
}
214+
}
215+
return ans
216+
}
217+
```
121218

219+
#### TypeScript
220+
221+
```ts
222+
function minCost(nums: number[], queries: number[][]): number[] {
223+
const n = nums.length;
224+
const s1: number[] = new Array(n).fill(0);
225+
const s2: number[] = new Array(n).fill(0);
226+
for (let i = 1; i < n; i++) {
227+
const c1 =
228+
i > 1 && nums[i - 1] - nums[i - 2] <= nums[i] - nums[i - 1] ? nums[i] - nums[i - 1] : 1;
229+
const c2 =
230+
i < n - 1 && nums[i] - nums[i - 1] > nums[i + 1] - nums[i] ? nums[i] - nums[i - 1] : 1;
231+
s1[i] = s1[i - 1] + c1;
232+
s2[i] = s2[i - 1] + c2;
233+
}
234+
const m = queries.length;
235+
const ans: number[] = new Array(m);
236+
for (let i = 0; i < m; i++) {
237+
const l = queries[i][0];
238+
const r = queries[i][1];
239+
ans[i] = l < r ? s1[r] - s1[l] : s2[l] - s2[r];
240+
}
241+
return ans;
242+
}
122243
```
123244

124245
<!-- tabs:end -->
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
vector<int> minCost(vector<int>& nums, vector<vector<int>>& queries) {
4+
int n = nums.size();
5+
vector<int> s1(n, 0);
6+
vector<int> s2(n, 0);
7+
for (int i = 1; i < n; i++) {
8+
int c1 = (i > 1 && nums[i - 1] - nums[i - 2] <= nums[i] - nums[i - 1]) ? nums[i] - nums[i - 1] : 1;
9+
int c2 = (i < n - 1 && nums[i] - nums[i - 1] > nums[i + 1] - nums[i]) ? nums[i] - nums[i - 1] : 1;
10+
s1[i] = s1[i - 1] + c1;
11+
s2[i] = s2[i - 1] + c2;
12+
}
13+
int m = queries.size();
14+
vector<int> ans(m);
15+
for (int i = 0; i < m; i++) {
16+
int l = queries[i][0];
17+
int r = queries[i][1];
18+
ans[i] = (l < r) ? s1[r] - s1[l] : s2[l] - s2[r];
19+
}
20+
return ans;
21+
}
22+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
func minCost(nums []int, queries [][]int) []int {
2+
n := len(nums)
3+
s1 := make([]int, n)
4+
s2 := make([]int, n)
5+
for i := 1; i < n; i++ {
6+
c1 := 1
7+
if i > 1 && nums[i-1]-nums[i-2] <= nums[i]-nums[i-1] {
8+
c1 = nums[i] - nums[i-1]
9+
}
10+
c2 := 1
11+
if i < n-1 && nums[i]-nums[i-1] > nums[i+1]-nums[i] {
12+
c2 = nums[i] - nums[i-1]
13+
}
14+
s1[i] = s1[i-1] + c1
15+
s2[i] = s2[i-1] + c2
16+
}
17+
m := len(queries)
18+
ans := make([]int, m)
19+
for i := 0; i < m; i++ {
20+
l := queries[i][0]
21+
r := queries[i][1]
22+
if l < r {
23+
ans[i] = s1[r] - s1[l]
24+
} else {
25+
ans[i] = s2[l] - s2[r]
26+
}
27+
}
28+
return ans
29+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public int[] minCost(int[] nums, int[][] queries) {
3+
int n = nums.length;
4+
int[] s1 = new int[n];
5+
int[] s2 = new int[n];
6+
for (int i = 1; i < n; i++) {
7+
int c1 = (i > 1 && nums[i - 1] - nums[i - 2] <= nums[i] - nums[i - 1])
8+
? nums[i] - nums[i - 1]
9+
: 1;
10+
int c2 = (i < n - 1 && nums[i] - nums[i - 1] > nums[i + 1] - nums[i])
11+
? nums[i] - nums[i - 1]
12+
: 1;
13+
s1[i] = s1[i - 1] + c1;
14+
s2[i] = s2[i - 1] + c2;
15+
}
16+
int m = queries.length;
17+
int[] ans = new int[m];
18+
for (int i = 0; i < m; i++) {
19+
int l = queries[i][0];
20+
int r = queries[i][1];
21+
ans[i] = (l < r) ? s1[r] - s1[l] : s2[l] - s2[r];
22+
}
23+
return ans;
24+
}
25+
}

0 commit comments

Comments
 (0)