Skip to content

Commit c45165e

Browse files
committed
fd
1 parent 2927ff0 commit c45165e

File tree

4 files changed

+37
-72
lines changed

4 files changed

+37
-72
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@
369369
|535|[Encode and Decode TinyURL](https://leetcode.com/problems/encode-and-decode-tinyurl/)| [Java](https://github.com/dingjikerbo/leetcode/blob/master/solution/src/main/java/com/inuker/solution/EncodeAndDecodeTinyURL.java)|100||
370370
|541|[Reverse String II](https://leetcode.com/problems/reverse-string-ii/)| [Java](https://github.com/dingjikerbo/leetcode/blob/master/solution/src/main/java/com/inuker/solution/ReverseStringII.java)|100||
371371
|557|[Reverse Words in a String III](https://leetcode.com/problems/reverse-words-in-a-string-iii/)| [Java](https://github.com/dingjikerbo/leetcode/blob/master/solution/src/main/java/com/inuker/solution/ReverseWordsInAStringIII.java)|100||
372+
|560|[Subarray Sum Equals K](https://leetcode.com/problems/subarray-sum-equals-k/)| [Java](https://github.com/dingjikerbo/leetcode/blob/master/solution/src/main/java/com/inuker/solution/SubarraySumEqualsK.java)|70||
372373
|637|[Average of Levels in Binary Tree](https://leetcode.com/problems/average-of-levels-in-binary-tree/#/description)| [Java](https://github.com/dingjikerbo/leetcode/blob/master/solution/src/main/java/com/inuker/solution/AverageOfLevelsInBinaryTree.java)|100||
373374
|652|[Find Duplicate Subtrees](https://leetcode.com/problems/find-duplicate-subtrees/)| [Java](https://github.com/dingjikerbo/leetcode/blob/master/solution/src/main/java/com/inuker/solution/FindDuplicateSubtrees.java)|70|开始还没思路|
374375
|653|[Two Sum IV - Input is a BST](https://leetcode.com/problems/two-sum-iv-input-is-a-bst/)| [Java](https://github.com/dingjikerbo/leetcode/blob/master/solution/src/main/java/com/inuker/solution/TwoSumIV.java)|90||
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.inuker.solution;
2+
3+
import java.util.HashMap;
4+
5+
/**
6+
* Created by liwentian on 2017/12/5.
7+
* https://leetcode.com/articles/subarray-sum-equals-k/
8+
*/
9+
10+
public class SubarraySumEqualsK {
11+
12+
/**
13+
* 注意map.put(0,1),即当前数自己也算是一种
14+
*/
15+
public int subarraySum(int[] nums, int k) {
16+
HashMap<Integer, Integer> map = new HashMap<>();
17+
map.put(0, 1);
18+
int count = 0;
19+
for (int i = 0, sum = 0; i < nums.length; i++) {
20+
sum += nums[i];
21+
count += map.getOrDefault(sum - k, 0);
22+
map.put(sum, map.getOrDefault(sum, 0) + 1);
23+
}
24+
return count;
25+
}
26+
}
Lines changed: 10 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.inuker.test;
22

33
import java.util.Comparator;
4+
import java.util.HashMap;
45
import java.util.Map;
56
import java.util.TreeMap;
67

@@ -10,72 +11,15 @@
1011

1112
public class Test2 {
1213

13-
public double[] medianSlidingWindow(int[] nums, int k) {
14-
MyMap up = new MyMap();
15-
MyMap down = new MyMap(Comparator.reverseOrder());
16-
double[] result = new double[nums.length - k + 1];
17-
for (int i = 0; i < nums.length; i++) {
18-
up.myAdd(nums[i]);
19-
down.myAdd(up.myPollFirst());
20-
21-
if (i >= k) {
22-
if (up.containsKey(nums[i - k])) {
23-
up.myRemove(nums[i - k]);
24-
} else {
25-
down.myRemove(nums[i - k]);
26-
}
27-
}
28-
29-
if (up.size < down.size) {
30-
up.myAdd(down.myPollFirst());
31-
}
32-
if (i >= k - 1) {
33-
result[i - k + 1] = up.size == down.size
34-
? ((double) up.firstKey() + down.firstKey()) / 2 : up.firstKey();
35-
}
36-
}
37-
return result;
38-
}
39-
40-
class MyMap extends TreeMap<Integer, Integer> {
41-
int size;
42-
43-
MyMap() {
44-
super();
45-
}
46-
47-
MyMap(Comparator<Integer> comparator) {
48-
super(comparator);
49-
}
50-
51-
void myAdd(int n) {
52-
put(n, getOrDefault(n, 0) + 1);
53-
size++;
54-
}
55-
56-
boolean myRemove(int n) {
57-
int count = getOrDefault(n, 0);
58-
if (count == 0) {
59-
return false;
60-
}
61-
if (count == 1) {
62-
remove(n);
63-
} else {
64-
put(n, count - 1);
65-
}
66-
size--;
67-
return true;
68-
}
69-
70-
int myPollFirst() {
71-
Map.Entry<Integer, Integer> entry = firstEntry();
72-
if (entry.getValue() == 1) {
73-
pollFirstEntry();
74-
} else {
75-
put(entry.getKey(), entry.getValue() - 1);
76-
}
77-
size--;
78-
return entry.getKey();
14+
public int subarraySum(int[] nums, int k) {
15+
HashMap<Integer, Integer> map = new HashMap<>();
16+
map.put(0, 1);
17+
int count = 0;
18+
for (int i = 0, sum = 0; i < nums.length; i++) {
19+
sum += nums[i];
20+
count += map.getOrDefault(sum - k, 0);
21+
map.put(sum, map.getOrDefault(sum, 0) + 1);
7922
}
23+
return count;
8024
}
8125
}

test/src/main/java/com/inuker/test/main.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,5 @@
2727
public class main {
2828

2929
public static void main(String[] args) {
30-
double[] f = new Test2().medianSlidingWindow(new int[] {
31-
Integer.MAX_VALUE, 1, 2, 3, 4, 5, 6, 7, Integer.MAX_VALUE
32-
}, 2);
33-
for (double d : f) {
34-
System.out.print(d + " ");
35-
}
3630
}
3731
}

0 commit comments

Comments
 (0)