File tree Expand file tree Collapse file tree 12 files changed +327
-0
lines changed
2873.Maximum Value of an Ordered Triplet I
2874.Maximum Value of an Ordered Triplet II
2875.Minimum Size Subarray in Infinite Array
2876.Count Visited Nodes in a Directed Graph Expand file tree Collapse file tree 12 files changed +327
-0
lines changed Original file line number Diff line number Diff line change 68
68
<!-- 这里可写当前语言的特殊实现逻辑 -->
69
69
70
70
``` java
71
+ class Solution {
72
+ public long maximumTripletValue (int [] nums ) {
73
+ long max, maxDiff, ans;
74
+ max = 0 ;
75
+ maxDiff = 0 ;
76
+ ans = 0 ;
77
+ for (int num : nums) {
78
+ ans = Math . max(ans, num * maxDiff);
79
+ max = Math . max(max, num);
80
+ maxDiff = Math . max(maxDiff, max - num);
81
+ }
82
+ return ans;
83
+ }
84
+ }
71
85
72
86
```
73
87
Original file line number Diff line number Diff line change @@ -58,6 +58,20 @@ It can be shown that there are no ordered triplets of indices with a value great
58
58
### ** Java**
59
59
60
60
``` java
61
+ class Solution {
62
+ public long maximumTripletValue (int [] nums ) {
63
+ long max, maxDiff, ans;
64
+ max = 0 ;
65
+ maxDiff = 0 ;
66
+ ans = 0 ;
67
+ for (int num : nums) {
68
+ ans = Math . max(ans, num * maxDiff);
69
+ max = Math . max(max, num);
70
+ maxDiff = Math . max(maxDiff, max - num);
71
+ }
72
+ return ans;
73
+ }
74
+ }
61
75
62
76
```
63
77
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public long maximumTripletValue (int [] nums ) {
3
+ long max , maxDiff , ans ;
4
+ max = 0 ;
5
+ maxDiff = 0 ;
6
+ ans = 0 ;
7
+ for (int num : nums ) {
8
+ ans = Math .max (ans , num * maxDiff );
9
+ max = Math .max (max , num );
10
+ maxDiff = Math .max (maxDiff , max - num );
11
+ }
12
+ return ans ;
13
+ }
14
+ }
Original file line number Diff line number Diff line change 68
68
<!-- 这里可写当前语言的特殊实现逻辑 -->
69
69
70
70
``` java
71
+ class Solution {
72
+ public long maximumTripletValue (int [] nums ) {
73
+ long max, maxDiff, ans;
74
+ max = 0 ;
75
+ maxDiff = 0 ;
76
+ ans = 0 ;
77
+ for (int num : nums) {
78
+ ans = Math . max(ans, num * maxDiff);
79
+ max = Math . max(max, num);
80
+ maxDiff = Math . max(maxDiff, max - num);
81
+ }
82
+ return ans;
83
+ }
84
+ }
71
85
72
86
```
73
87
Original file line number Diff line number Diff line change @@ -58,6 +58,20 @@ It can be shown that there are no ordered triplets of indices with a value great
58
58
### ** Java**
59
59
60
60
``` java
61
+ class Solution {
62
+ public long maximumTripletValue (int [] nums ) {
63
+ long max, maxDiff, ans;
64
+ max = 0 ;
65
+ maxDiff = 0 ;
66
+ ans = 0 ;
67
+ for (int num : nums) {
68
+ ans = Math . max(ans, num * maxDiff);
69
+ max = Math . max(max, num);
70
+ maxDiff = Math . max(maxDiff, max - num);
71
+ }
72
+ return ans;
73
+ }
74
+ }
61
75
62
76
```
63
77
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public long maximumTripletValue (int [] nums ) {
3
+ long max , maxDiff , ans ;
4
+ max = 0 ;
5
+ maxDiff = 0 ;
6
+ ans = 0 ;
7
+ for (int num : nums ) {
8
+ ans = Math .max (ans , num * maxDiff );
9
+ max = Math .max (max , num );
10
+ maxDiff = Math .max (maxDiff , max - num );
11
+ }
12
+ return ans ;
13
+ }
14
+ }
Original file line number Diff line number Diff line change 71
71
<!-- 这里可写当前语言的特殊实现逻辑 -->
72
72
73
73
``` java
74
+ class Solution {
75
+ public int shortestSubarray (int [] nums , int k ) {
76
+ int n = nums. length;
77
+
78
+ int minLength = n * 2 + 1 ;
79
+ int l = 0 ;
80
+ int sum = 0 ;
81
+
82
+ for (int r = 0 ; r < n * 2 ; r++ ) {
83
+ int start = l % n;
84
+ int end = r % n;
85
+ sum += nums[end];
86
+
87
+ while (sum > k && l <= r) {
88
+ start = l % n;
89
+ sum -= nums[start];
90
+ l++ ;
91
+ }
92
+
93
+ if (sum == k) {
94
+ minLength = Math . min(minLength, r - l + 1 );
95
+ start = l % n;
96
+ sum -= nums[start];
97
+ l++ ;
98
+ }
99
+ }
100
+
101
+ return minLength == n * 2 + 1 ? - 1 : minLength;
102
+ }
103
+ public int minSizeSubarray (int [] nums , int target ) {
104
+ int n = nums. length;
105
+ int sum = 0 ;
106
+
107
+ for (int num : nums) {
108
+ sum += num;
109
+ }
110
+ int k = target % sum;
111
+ int ans = target / sum * n;
112
+ if (k == 0 ) {
113
+ return ans;
114
+ }
115
+ int res = shortestSubarray(nums, k);
116
+ return res == - 1 ? - 1 : ans + res;
117
+ }
118
+ }
74
119
75
120
```
76
121
Original file line number Diff line number Diff line change @@ -62,6 +62,51 @@ It can be proven that there is no subarray with sum equal to target = 3.
62
62
### ** Java**
63
63
64
64
``` java
65
+ class Solution {
66
+ public int shortestSubarray (int [] nums , int k ) {
67
+ int n = nums. length;
68
+
69
+ int minLength = n * 2 + 1 ;
70
+ int l = 0 ;
71
+ int sum = 0 ;
72
+
73
+ for (int r = 0 ; r < n * 2 ; r++ ) {
74
+ int start = l % n;
75
+ int end = r % n;
76
+ sum += nums[end];
77
+
78
+ while (sum > k && l <= r) {
79
+ start = l % n;
80
+ sum -= nums[start];
81
+ l++ ;
82
+ }
83
+
84
+ if (sum == k) {
85
+ minLength = Math . min(minLength, r - l + 1 );
86
+ start = l % n;
87
+ sum -= nums[start];
88
+ l++ ;
89
+ }
90
+ }
91
+
92
+ return minLength == n * 2 + 1 ? - 1 : minLength;
93
+ }
94
+ public int minSizeSubarray (int [] nums , int target ) {
95
+ int n = nums. length;
96
+ int sum = 0 ;
97
+
98
+ for (int num : nums) {
99
+ sum += num;
100
+ }
101
+ int k = target % sum;
102
+ int ans = target / sum * n;
103
+ if (k == 0 ) {
104
+ return ans;
105
+ }
106
+ int res = shortestSubarray(nums, k);
107
+ return res == - 1 ? - 1 : ans + res;
108
+ }
109
+ }
65
110
66
111
```
67
112
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int shortestSubarray (int [] nums , int k ) {
3
+ int n = nums .length ;
4
+ int minLength = n * 2 + 1 ;
5
+ int l = 0 ;
6
+ int sum = 0 ;
7
+
8
+ for (int r = 0 ; r < n * 2 ; r ++) {
9
+ int start = l % n ;
10
+ int end = r % n ;
11
+ sum += nums [end ];
12
+
13
+ while (sum > k && l <= r ) {
14
+ start = l % n ;
15
+ sum -= nums [start ];
16
+ l ++;
17
+ }
18
+
19
+ if (sum == k ) {
20
+ minLength = Math .min (minLength , r - l + 1 );
21
+ start = l % n ;
22
+ sum -= nums [start ];
23
+ l ++;
24
+ }
25
+ }
26
+
27
+ return minLength == n * 2 + 1 ? -1 : minLength ;
28
+ }
29
+
30
+ public int minSizeSubarray (int [] nums , int target ) {
31
+ int n = nums .length ;
32
+ int sum = 0 ;
33
+
34
+ for (int num : nums ) {
35
+ sum += num ;
36
+ }
37
+ int k = target % sum ;
38
+ int ans = target / sum * n ;
39
+ if (k == 0 ) {
40
+ return ans ;
41
+ }
42
+ int res = shortestSubarray (nums , k );
43
+ return res == -1 ? -1 : ans + res ;
44
+ }
45
+ }
Original file line number Diff line number Diff line change 70
70
<!-- 这里可写当前语言的特殊实现逻辑 -->
71
71
72
72
``` java
73
+ class Solution {
74
+ void dfs (int curr , List<Integer > edges , int [] ans ) {
75
+
76
+ List<Integer > path = new ArrayList<> ();
77
+ int prev = - 1 ;
78
+ while (ans[curr] == 0 ) {
79
+ path. add(curr);
80
+ ans[curr] = prev == - 1 ? - 1 : ans[prev] - 1 ;
81
+ prev = curr;
82
+ curr = edges. get(curr);
83
+ }
84
+ int idx = path. size() - 1 ;
85
+ if (ans[curr] < 0 ) {
86
+ int cycle = ans[curr] - ans[path. get(idx)] + 1 ;
87
+ int start = ans[curr];
88
+ for (; idx >= 0 && ans[path. get(idx)] <= start; idx-- ) {
89
+ ans[path. get(idx)] = cycle;
90
+ }
91
+ }
92
+ for (; idx >= 0 ; idx-- ) {
93
+ ans[path. get(idx)] = ans[edges. get(path. get(idx))] + 1 ;
94
+ }
95
+ }
96
+
97
+ public int [] countVisitedNodes (List<Integer > edges ) {
98
+ int n = edges. size();
99
+ int [] ans = new int [n];
100
+ for (int i = 0 ; i < n; i++ ) {
101
+ if (ans[i] > 0 ) {
102
+ continue ;
103
+ }
104
+ dfs(i, edges, ans);
105
+ }
106
+ return ans;
107
+ }
108
+ }
73
109
74
110
```
75
111
You can’t perform that action at this time.
0 commit comments