Skip to content

Commit ca7fce8

Browse files
committed
fd
1 parent c5423a8 commit ca7fce8

File tree

2 files changed

+29
-26
lines changed

2 files changed

+29
-26
lines changed

solution/src/main/java/com/inuker/solution/MinimumSizeSubarraySum.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.inuker.solution;
22

3+
import java.util.Arrays;
4+
35
/**
46
* Created by dingjikerbo on 16/11/22.
57
*/
@@ -14,7 +16,7 @@ public int minSubArrayLen(int s, int[] nums) {
1416
* 这里别掉了等号
1517
*/
1618
if (sum >= s) {
17-
for ( ; j < i; j++) {
19+
for (; j < i; j++) {
1820
if (sum - nums[j] < s) {
1921
break;
2022
}
@@ -25,4 +27,26 @@ public int minSubArrayLen(int s, int[] nums) {
2527
}
2628
return min == Integer.MAX_VALUE ? 0 : min;
2729
}
30+
31+
/**
32+
* O(nlgn)的写法
33+
* sums[0]必须是0,TestCase[1,2,3,4,5],15
34+
*/
35+
public int minSubArrayLen2(int s, int[] nums) {
36+
int[] sums = new int[nums.length + 1];
37+
for (int i = 0; i < nums.length; i++) {
38+
sums[i + 1] = nums[i] + sums[i];
39+
}
40+
int minLen = Integer.MAX_VALUE;
41+
for (int i = 0; i < sums.length; i++) {
42+
int end = Arrays.binarySearch(sums, i + 1, sums.length, sums[i] + s);
43+
end = end < 0 ? -(end + 1) : end;
44+
if (end == sums.length) {
45+
break;
46+
}
47+
minLen = Math.min(end - i, minLen);
48+
}
49+
return minLen == Integer.MAX_VALUE ? 0 : minLen;
50+
}
51+
2852
}
Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.inuker.test;
22

3+
import com.inuker.solution.MinimumSizeSubarraySum;
34
import com.inuker.solution.NextPermutation;
45
import com.inuker.solution.SearchForARange;
56
import com.leetcode.library.ListNode;
@@ -30,31 +31,9 @@ public class main {
3031

3132
public static void main(String[] args) {
3233
int[] arr = new int[]{
33-
2, 2, 0, 4, 3, 1
34+
1, 2, 3, 4, 5
3435
};
35-
new NextPermutation().nextPermutation(arr);
36-
for (int n : arr) {
37-
System.out.print(n + " ");
38-
}
39-
}
40-
41-
public boolean searchMatrix(int[][] matrix, int target) {
42-
if (matrix.length == 0) {
43-
return false;
44-
}
45-
int row = matrix.length, col = matrix[0].length;
46-
int left = 0, right = row * col - 1;
47-
while (left <= right) {
48-
int mid = (left + right) / 2;
49-
int x = mid / col, y = mid % col;
50-
if (target == matrix[x][y]) {
51-
return true;
52-
} else if (target > matrix[x][y]) {
53-
left = mid + 1;
54-
} else {
55-
right = mid - 1;
56-
}
57-
}
58-
return false;
36+
int len = new MinimumSizeSubarraySum().minSubArrayLen2(15, arr);
37+
System.out.println(len);
5938
}
6039
}

0 commit comments

Comments
 (0)