Skip to content

Commit 00de989

Browse files
committed
2 problems
1 parent 4f21847 commit 00de989

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

Diff for: README.md

+2
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,8 @@ Golang solution for leetcode. For each problem, there is a simple *_test.go to t
234234
#### [319. Bulb Switcher](https://github.com/hitzzc/go-leetcode/tree/master/bulb_switcher)
235235
#### [322. Coin Change](https://github.com/hitzzc/go-leetcode/tree/master/coin_change)
236236
#### [326. Power of Three](https://github.com/hitzzc/go-leetcode/tree/master/power_of_three)
237+
#### [327. Count of Range Sum](https://github.com/hitzzc/go-leetcode/tree/master/count_of_range_sum)
238+
#### [329. Longest Increasing Path in a Matrix](https://github.com/hitzzc/go-leetcode/tree/master/longest_increasing_path_in_a_matrix)
237239

238240

239241

Diff for: count_of_range_sum/count_of_range_sum.cpp

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
class Solution {
2+
public:
3+
int countRangeSum(vector<int>& nums, int lower, int upper) {
4+
vector<long> sums(nums.size()+1, 0);
5+
for (int i = 0; i < nums.size(); ++i) {
6+
sums[i+1] = sums[i] + nums[i];
7+
}
8+
return count_when_merging_sort(sums, 0, sums.size(), lower, upper);
9+
}
10+
int count_when_merging_sort(vector<long>& array, int start, int end, int lower, int upper) {
11+
if (end-start <= 1) return 0;
12+
int mid = start + (end-start)/2;
13+
int j = mid, k = mid, t = mid;
14+
int count = count_when_merging_sort(array, start, mid, lower, upper) + count_when_merging_sort(array, mid, end, lower, upper);
15+
vector<long> cache(end-start);
16+
for (int i = start, r = 0; i < mid; ++i, ++r) {
17+
while (k < end && array[k]-array[i] <= upper) ++k;
18+
while (j < end && array[j]-array[i] < lower) ++j;
19+
while (t < end && array[t] < array[i]) cache[r++] = array[t++];
20+
cache[r] = array[i];
21+
count += k - j;
22+
}
23+
for (int i = start; i < t; ++i) {
24+
array[i] = cache[i-start];
25+
}
26+
return count;
27+
}
28+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution {
2+
public:
3+
int longestIncreasingPath(vector<vector<int>>& matrix) {
4+
int row = matrix.size();
5+
int col = row ? matrix[0].size() : 0;
6+
vector<vector<int>> path(row, vector<int>(col, 0));
7+
vector<vector<bool>> visited(row, vector<bool>(col, 0));
8+
int ret = 0;
9+
for (int i = 0; i < row; ++i) {
10+
for (int j = 0; j < col; ++j) {
11+
ret = max(ret, helper(matrix, path, row, col, i , j, visited));
12+
}
13+
}
14+
return ret;
15+
}
16+
17+
int helper(vector<vector<int>>& matrix, vector<vector<int>>& path, const int row, const int col, int r, int c, vector<vector<bool>>& visited) {
18+
if (path[r][c] > 0) return path[r][c];
19+
visited[r][c] = true;
20+
int ret = 0;
21+
if (r > 0 && !visited[r-1][c] && matrix[r][c] < matrix[r-1][c]) {
22+
ret = max(ret, helper(matrix, path, row, col, r-1, c, visited));
23+
}
24+
if (r < row-1 && !visited[r+1][c] && matrix[r][c] < matrix[r+1][c]) {
25+
ret = max(ret, helper(matrix, path, row, col, r+1, c, visited));
26+
}
27+
if (c > 0 && !visited[r][c-1] && matrix[r][c] < matrix[r][c-1]) {
28+
ret = max(ret, helper(matrix, path, row, col, r, c-1, visited));
29+
}
30+
if (c < col-1 && !visited[r][c+1] && matrix[r][c] < matrix[r][c+1]) {
31+
ret = max(ret, helper(matrix, path, row, col, r, c+1, visited));
32+
}
33+
visited[r][c] = false;
34+
path[r][c] = ret+1;
35+
return path[r][c];
36+
}
37+
};

0 commit comments

Comments
 (0)