Skip to content

Commit 82ecaf5

Browse files
committed
update
1 parent c0331a5 commit 82ecaf5

File tree

5 files changed

+49
-51
lines changed

5 files changed

+49
-51
lines changed

ContainerWithMostWater/ContainerWithMostWater.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,14 @@ using namespace std;
1919
class Solution {
2020
public:
2121
int maxArea(vector<int> &height) {
22-
int N = height.size();
23-
if (N < 2) return 0;
24-
int i = 0, j = N-1, res = 0;
22+
int i = 0, j = height.size() - 1, res = 0;
2523
while (i < j) {
26-
res = max(res, (j-i)*min(height[i], height[j]));
27-
if (height[i] < height[j]) {
28-
do { i++; } while (i < j && height[i] <= h);
24+
res = max(res, min(height[i], height[j])*(j - i));
25+
if (height[i] <= height[j]) {
26+
do { i++; } while (i < j && height[i] <= height[i - 1]);
2927
}
3028
else {
31-
do { j--; } while (i < j && height[j] <= h);
29+
do { j--; } while (i < j && height[j] <= height[j + 1]);
3230
}
3331
}
3432
return res;

MedianofTwoSortedArrays/MedianofTwoSortedArrays.cpp

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,38 @@ using namespace std;
1111
class Solution {
1212
public:
1313
double findMedianSortedArrays(int A[], int m, int B[], int n) {
14-
if (m == 0 && n == 0) return 0.0;
1514
return findMedianSortedArrays2(A, m, B, n);
1615
}
1716

1817
double findMedianSortedArrays1(int A[], int m, int B[], int n) {
19-
int i = 0, j = 0, m1 = -1, m2 = -1;
20-
for (int k = 0; k <= (m+n)/2; k++) {
21-
m1 = m2;
22-
if (j == n || (i < m && A[i] < B[j])) m2 = A[i++];
23-
else m2 = B[j++];
18+
int r1 = -1, r2 = -1, i = 0, j = 0;
19+
for (int k = (m + n) / 2; k >= 0; k--) {
20+
r1 = r2;
21+
if (j == n || (i < m && A[i] <= B[j])) r2 = A[i++];
22+
else r2 = B[j++];
2423
}
25-
26-
if ((m+n)%2) return (double)m2;
27-
return (m1+m2)/2.0;
24+
if ((m + n) % 2) return (double)r2;
25+
return (r1 + r2) / 2.0;
2826
}
2927

3028
double findMedianSortedArrays2(int A[], int m, int B[], int n) {
31-
if ((m+n)%2) return (double)findKth(A, m, B, n, (m+n)/2+1);
32-
return (findKth(A, m, B, n, (m+n)/2)+findKth(A, m, B, n, (m+n)/2+1))/2.0;
29+
int k = (m + n) / 2;
30+
if ((m + n) % 2) return findKth(A, m, B, n, k + 1);
31+
return (findKth(A, m, B, n, k) + findKth(A, m, B, n, k + 1)) / 2.0;
3332
}
3433

3534
int findKth(int A[], int m, int B[], int n, int k) {
36-
if (m > n) return findKth(B, n, A, m, k);
37-
if (m == 0) return B[k-1];
35+
if (n == 0) return A[k - 1];
36+
if (m == 0) return B[k - 1];
3837
if (k == 1) return min(A[0], B[0]);
39-
40-
int p1 = min(k/2, m), p2 = k-p1;
41-
if (A[p1-1] < B[p2-1]) return findKth(A+p1, m-p1, B, n, k-p1);
42-
if (A[p1-1] > B[p2-1]) return findKth(A, m, B+p2, n-p2, k-p2);
43-
return A[p1-1];
38+
if (m / 2 + n / 2 + 1 >= k) {
39+
if (A[m / 2] <= B[n / 2]) return findKth(A, m, B, n / 2, k);
40+
else return findKth(A, m / 2, B, n, k);
41+
}
42+
else {
43+
if (A[m / 2] <= B[n / 2]) findKth(A + m / 2 + 1, m - (m / 2 + 1), B, n, k - (m / 2 + 1));
44+
else return findKth(A, m, B + n / 2 + 1, n - (n / 2 + 1), k - (n / 2 + 1));
45+
}
4446
}
4547
};
4648

SearchInsertPosition/SearchInsertPosition.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ class Solution {
2828
if (A[m] < target) l = m+1;
2929
else u = m;
3030
}
31-
if (A[l] < target) return n;
32-
return l;
31+
if (A[u] < target) return n;
32+
return u;
3333
}
3434
};
3535

SearchforaRange/SearchforaRange.cpp

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,33 @@ using namespace std;
1919
class Solution {
2020
public:
2121
vector<int> searchRange(int A[], int n, int target) {
22-
int l = lower_bound(A, n, target);
23-
int u = upper_bound(A, n, target)-1;
22+
int l = lowerBound(A, n, target);
23+
int u = upperBound(A, n, target) - 1;
2424
vector<int> res(2, -1);
25-
if (l > u) return res;
26-
res[0] = l;
27-
res[1] = u;
25+
if (l <= u) res[0] = l, res[1] = u;
2826
return res;
2927
}
3028

31-
int lower_bound(int A[], int n, int target) {
32-
int l = 0, u = n-1;
29+
int lowerBound(int A[], int n, int target) {
30+
int l = 0, u = n - 1;
3331
while (l < u) {
34-
int m = l+(u-l)/2;
35-
if (A[m] < target) l = m+1;
32+
int m = l + (u - l) / 2;
33+
if (A[m] < target) l = m + 1;
3634
else u = m;
3735
}
38-
if (A[l] < target) return n;
39-
return l;
36+
if (A[u] < target) return n;
37+
return u;
4038
}
4139

42-
int upper_bound(int A[], int n, int target) {
43-
int l = 0, u = n-1;
40+
int upperBound(int A[], int n, int target) {
41+
int l = 0, u = n - 1;
4442
while (l < u) {
45-
int m = l+(u-l)/2;
46-
if (A[m] <= target) l = m+1;
43+
int m = l + (u - l) / 2;
44+
if (A[m] <= target) l = m + 1;
4745
else u = m;
4846
}
49-
if (A[l] <= target) return n;
50-
return l;
47+
if (A[u] <= target) return n;
48+
return u;
5149
}
5250
};
5351

SearchinRotatedSortedArray/SearchinRotatedSortedArray.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ using namespace std;
2020
class Solution {
2121
public:
2222
int search(int A[], int n, int target) {
23-
int l = 0, u = n-1;
23+
int l = 0, u = n - 1;
2424
while (l <= u) {
25-
int m = l+(u-l)/2;
25+
int m = l + (u - l) / 2;
2626
if (A[m] == target) return m;
27-
if (A[l] < A[m]) {
28-
if (A[l] <= target && target < A[m]) u = m-1;
29-
else l = m+1;
27+
if (A[l] <= A[m]) {
28+
if (A[l] <= target && target < A[m]) u = m - 1;
29+
else l = m + 1;
3030
}
3131
else {
32-
if (A[m] < target && target <= A[u]) l = m+1;
33-
else u = m-1;
32+
if (A[m] < target && target <= A[u]) l = m + 1;
33+
else u = m - 1;
3434
}
3535
}
3636
return -1;

0 commit comments

Comments
 (0)