Skip to content

Commit 098c75a

Browse files
committed
Added 4 solutions
1 parent 6db2572 commit 098c75a

4 files changed

+151
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public int numSubmatrixSumTarget(int[][] matrix, int target) {
3+
int rows = matrix.length;
4+
int cols = matrix[0].length;
5+
int res = 0;
6+
7+
for (int i = 0; i < rows; i++) {
8+
for (int j = 1; j < cols; j++) {
9+
matrix[i][j] += matrix[i][j - 1];
10+
}
11+
}
12+
13+
for (int i = 0; i < cols; i++) {
14+
for (int j = i; j < cols; j++) {
15+
Map<Integer, Integer> map = new HashMap<>();
16+
map.put(0, 1);
17+
int sum = 0;
18+
for (int k = 0; k < rows; k++) {
19+
sum += matrix[k][j] - (i > 0 ? matrix[k][i - 1] : 0);
20+
res += map.getOrDefault(sum - target, 0);
21+
22+
map.put(sum, map.getOrDefault(sum, 0) + 1);
23+
}
24+
}
25+
}
26+
27+
return res;
28+
}
29+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
public int missingElement(int[] nums, int k) {
3+
int idx = 0;
4+
while (idx < nums.length - 1) {
5+
if (nums[idx] != nums[idx + 1] - 1) {
6+
int diff = nums[idx + 1] - nums[idx] - 1;
7+
if (diff >= k) {
8+
int step = nums[idx] + 1;
9+
while (k > 1) {
10+
step++;
11+
k--;
12+
}
13+
14+
return step;
15+
}
16+
else {
17+
k -= diff;
18+
}
19+
}
20+
21+
idx++;
22+
}
23+
24+
return nums[nums.length - 1] + k;
25+
}
26+
}

Medium/Range Sum Query - Mutable.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
class NumArray {
2+
int[] fen;
3+
int[] nums;
4+
int n;
5+
public NumArray(int[] nums) {
6+
this.nums = nums;
7+
n = nums.length;
8+
fen = new int[n + 1];
9+
init();
10+
}
11+
12+
private void init () {
13+
if (n == 0) {
14+
return;
15+
}
16+
17+
// Compute the pre-sum
18+
fen[1] = nums[0];
19+
for (int i = 1; i < n; i++) {
20+
fen[i + 1] = fen[i] + nums[i];
21+
}
22+
23+
for (int i = n; i > 0; i--) {
24+
// Removing the value of parent for each node
25+
int parent = i - (i & -i);
26+
if (parent >= 0) {
27+
fen[i] -= fen[parent];
28+
}
29+
}
30+
}
31+
32+
public void update(int i, int val) {
33+
// Find the difference between previous and current value
34+
int extra = val - nums[i];
35+
36+
// Update the actual array with the new val
37+
nums[i] = val;
38+
39+
// Update the tree with the extra value to all the parents
40+
increment(i, extra);
41+
}
42+
43+
private void increment (int i, int extra) {
44+
i++;
45+
while (i <= n) {
46+
fen[i] += extra;
47+
i = i + (i & -i);
48+
}
49+
}
50+
51+
public int sumRange(int i, int j) {
52+
// Similar to pre sum from 0 to j - pre sum from 0 to i
53+
return getSum(j + 1) - getSum(i);
54+
}
55+
56+
private int getSum (int i) {
57+
int res = 0;
58+
while (i > 0) {
59+
res += fen[i];
60+
i = i - (i & -i);
61+
}
62+
63+
return res;
64+
}
65+
}
66+
/**
67+
* Your NumArray object will be instantiated and called as such:
68+
* NumArray obj = new NumArray(nums);
69+
* obj.update(i,val);
70+
* int param_2 = obj.sumRange(i,j);
71+
*/

Medium/Uncrossed Lines.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public int maxUncrossedLines(int[] A, int[] B) {
3+
Integer[][] dp = new Integer[A.length][B.length];
4+
return helper(A, 0, B, 0, dp);
5+
}
6+
7+
private int helper(int[] A, int i, int[] B, int j, Integer[][] dp) {
8+
if (i >= A.length || j >= B.length) {
9+
return 0;
10+
}
11+
12+
if (dp[i][j] != null) {
13+
return dp[i][j];
14+
}
15+
16+
if (A[i] == B[j]) {
17+
dp[i][j] = 1 + helper(A, i + 1, B, j + 1, dp);
18+
}
19+
else {
20+
dp[i][j] = Math.max(helper(A, i + 1, B, j, dp), helper(A, i, B, j + 1, dp));
21+
}
22+
23+
return dp[i][j];
24+
}
25+
}

0 commit comments

Comments
 (0)