Skip to content

Commit 9797686

Browse files
committed
fd
1 parent 4a2da8f commit 9797686

File tree

2 files changed

+43
-55
lines changed

2 files changed

+43
-55
lines changed

leetcode/solution/src/ValidParentheses.java

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,34 @@
33
*/
44
public class ValidParentheses {
55

6-
// 耗时5ms
6+
// 耗时4ms
77
public boolean isValid(String s) {
8-
char[] stack = new char[s.length()];
9-
int top = -1;
10-
11-
for (char c : s.toCharArray()) {
12-
switch (c) {
8+
int[] stack = new int[s.length()];
9+
int index = 0;
10+
for (int i = 0; i < s.length(); i++) {
11+
switch (s.charAt(i)) {
12+
case '(':
13+
case '[':
14+
case '{':
15+
stack[index++] = i;
16+
break;
1317
case ')':
14-
if (top >= 0 && stack[top] == '(') {
15-
top--;
16-
} else {
18+
if (index == 0 || s.charAt(stack[--index]) != '(') {
1719
return false;
1820
}
1921
break;
20-
case '}':
21-
if (top >= 0 && stack[top] == '{') {
22-
top--;
23-
} else {
22+
case ']':
23+
if (index == 0 || s.charAt(stack[--index]) != '[') {
2424
return false;
2525
}
2626
break;
27-
case ']':
28-
if (top >= 0 && stack[top] == '[') {
29-
top--;
30-
} else {
27+
case '}':
28+
if (index == 0 || s.charAt(stack[--index]) != '{') {
3129
return false;
3230
}
3331
break;
34-
default:
35-
stack[++top] = c;
36-
break;
3732
}
3833
}
39-
40-
return top < 0;
34+
return index == 0;
4135
}
4236
}

leetcode/src/Main.java

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,36 @@
22

33
public class Main {
44

5-
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
6-
int len1 = nums1.length;
7-
int len2 = nums2.length;
8-
int total = len1 + len2;
9-
if (total % 2 == 0) {
10-
return (findKth(nums1, nums2, 0, len1 - 1, 0, len2 - 1, total/2) +
11-
findKth(nums1, nums2, 0, len1 - 1, 0, len2 - 1, total/2 + 1))/2.0f;
12-
} else {
13-
return findKth(nums1, nums2, 0, len1 - 1, 0, len2 - 1, total/2 + 1);
5+
public boolean isValid(String s) {
6+
int[] stack = new int[s.length()];
7+
int index = 0;
8+
for (int i = 0; i < s.length(); i++) {
9+
switch (s.charAt(i)) {
10+
case '(':
11+
case '[':
12+
case '{':
13+
stack[index++] = i;
14+
break;
15+
case ')':
16+
if (index == 0 || s.charAt(stack[--index]) != '(') {
17+
return false;
18+
}
19+
break;
20+
case ']':
21+
if (index == 0 || s.charAt(stack[--index]) != '[') {
22+
return false;
23+
}
24+
break;
25+
case '}':
26+
if (index == 0 || s.charAt(stack[--index]) != '{') {
27+
return false;
28+
}
29+
break;
30+
}
1431
}
32+
return index == 0;
1533
}
1634

17-
public double findKth(int[] nums1, int[] nums2, int start1, int end1, int start2, int end2, int k) {
18-
int len1 = end1 - start1 + 1;
19-
int len2 = end2 - start2 + 1;
20-
if (len1 > len2) {
21-
return findKth(nums2, nums1, start2, end2, start1, end1, k);
22-
}
23-
if (len1 == 0) {
24-
return nums2[start2 + k - 1];
25-
}
26-
if (k == 1) {
27-
return Math.min(nums1[start1], nums2[start2]);
28-
}
29-
int ia = Math.min(k/2, len1);
30-
int ib = k - ia;
31-
if (nums1[start1 + ia - 1] > nums2[start2 + ib - 1]) {
32-
return findKth(nums1, nums2, start1, end1, start2 + ib, end2, k - ib);
33-
} else if (nums1[start1 + ia - 1] < nums2[start2 + ib - 1]) {
34-
return findKth(nums1, nums2, start1 + ia, end1, start2, end2, k - ia);
35-
} else {
36-
return nums1[start1 + ia - 1];
37-
}
38-
}
39-
40-
4135
public static void main(String[] args) {
4236

4337
}

0 commit comments

Comments
 (0)