Skip to content

Commit c6d0493

Browse files
add 975
1 parent 5f7c583 commit c6d0493

File tree

4 files changed

+145
-0
lines changed

4 files changed

+145
-0
lines changed

src/0975-Odd-Even-Jump/0975.cpp

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class Solution
2+
{
3+
public:
4+
int oddEvenJumps(vector<int>& A)
5+
{
6+
int n = A.size();
7+
vector<int> d(n);
8+
for (int i = 0; i < n; i++) d[i] = i;
9+
stable_sort(d.begin(), d.end(), [&](const int i, const int j){
10+
return A[i] < A[j];
11+
});
12+
vector<int> n1 = st(d);
13+
stable_sort(d.begin(), d.end(), [&](const int i, const int j){
14+
return A[i] > A[j];
15+
});
16+
vector<int> n2 = st(d);
17+
18+
vector<int> h(n), l(n);
19+
h[n-1] = l[n-1] = 1;
20+
for (int i = n - 2; i >= 0; i--)
21+
{
22+
h[i] = l[n1[i]];
23+
l[i] = h[n2[i]];
24+
}
25+
return accumulate(h.begin(), h.end(), 0);
26+
}
27+
private:
28+
vector<int> st(vector<int>& data)
29+
{
30+
int n = data.size();
31+
vector<int> s, res(n);
32+
for (int i : data)
33+
{
34+
while (!s.empty() and s.back() < i)
35+
{
36+
res[s.back()] = i;
37+
s.pop_back();
38+
}
39+
s.push_back(i);
40+
}
41+
return res;
42+
}
43+
};

src/0975-Odd-Even-Jump/0975.go

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
func oddEvenJumps(A []int) int {
2+
n := len(A)
3+
d := make([]int, n)
4+
for i := 0; i < n; i++ {
5+
d[i] = i
6+
}
7+
sort.SliceStable(d, func(i, j int) bool {
8+
return A[d[i]] < A[d[j]]
9+
})
10+
n1 := st(d)
11+
sort.SliceStable(d, func(i, j int) bool {
12+
return A[d[i]] > A[d[j]]
13+
})
14+
n2 := st(d)
15+
16+
h := make([]int, n)
17+
l := make([]int, n)
18+
h[n - 1], l[n - 1] = 1, 1
19+
for i := n - 2; i >= 0; i-- {
20+
h[i] = l[n1[i]]
21+
l[i] = h[n2[i]]
22+
}
23+
res := 0
24+
for i := 0; i < n; i++ {
25+
if h[i] > 0 {
26+
res++
27+
}
28+
}
29+
return res
30+
}
31+
32+
func st(data []int) []int {
33+
n := len(data)
34+
s := make([]int, 0)
35+
res := make([]int, n)
36+
for _, i := range data {
37+
for len(s) > 0 && s[len(s) - 1] < i {
38+
res[s[len(s) - 1]] = i
39+
s = s[:len(s) - 1]
40+
}
41+
s = append(s, i)
42+
}
43+
return res
44+
}

src/0975-Odd-Even-Jump/0975.js

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
var oddEvenJumps = function(A) {
2+
let n = A.length, d = new Array(n);
3+
for (let i = 0; i < n; i++) d[i] = i;
4+
5+
let st = function(data) {
6+
let s = [], res = new Array(n);
7+
res.fill(0);
8+
for (let i of data) {
9+
while (s.length && s[s.length - 1] < i) {
10+
res[s.pop()] = i;
11+
}
12+
s.push(i);
13+
}
14+
return res;
15+
}
16+
d.sort(function(i, j) {
17+
if(A[i] == A[j]) return i - j;
18+
else return A[i] - A[j];
19+
});
20+
let n1 = st(d);
21+
d.sort(function(i, j) {
22+
if(A[i] == A[j]) return i - j;
23+
else return A[j] - A[i];
24+
});
25+
let n2 = st(d);
26+
27+
let h = new Array(n), l = new Array(n);
28+
h.fill(0); l.fill(0);
29+
h[n - 1] = l[n - 1] = 1;
30+
for (let i = n - 2; i >= 0; i--) {
31+
h[i] = l[n1[i]]
32+
l[i] = h[n2[i]]
33+
}
34+
let res = 0;
35+
for (let i of h) {
36+
if (i) res++;
37+
}
38+
return res;
39+
};

src/0975-Odd-Even-Jump/0975.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution:
2+
def oddEvenJumps(self, A: List[int]) -> int:
3+
n = len(A)
4+
def st(data):
5+
s, res = [], [0]*n
6+
for i in data:
7+
while s and s[-1] < i:
8+
res[s.pop()] = i
9+
s.append(i)
10+
return res
11+
12+
d = sorted(range(n), key=lambda i: A[i])
13+
n1, n2 = st(d), st(sorted(d, key=lambda i: -A[i]))
14+
h, l = [0] * n, [0] * n
15+
h[-1] = l[-1] = 1
16+
for i in range(n - 2, -1, -1):
17+
h[i] = l[n1[i]]
18+
l[i] = h[n2[i]]
19+
return sum(h)

0 commit comments

Comments
 (0)