Day 50

Two Sum

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int temp = target - nums[i];
if (map.containsKey(temp)) {
return new int[]{map.get(temp), i};
}
map.put(nums[i], i);
}
return null;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
func twoSum(nums []int, target int) []int {
m := make(map[int]int)

for i, v := range nums {
temp := target - v
if _, ok := m[temp]; ok {
return []int{m[temp], i}
}
m[nums[i]] = i
}
return nil
}

4Sum II

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
Map<Integer, Integer> map = new HashMap<>();
int res = 0;
for (int i = 0; i < nums1.length; i++) {
for (int j = 0; j < nums2.length; j++) {
int sum = nums1[i] + nums2[j];
map.put(sum, map.getOrDefault(sum, 0) + 1);
}
}

for (int i = 0; i < nums3.length; i++) {
for (int j = 0; j < nums4.length; j++) {
int sum = -(nums3[i] + nums4[j]);
if (map.containsKey(sum)) {
res += map.get(sum);
}
}
}
return res;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func fourSumCount(nums1 []int, nums2 []int, nums3 []int, nums4 []int) int {
m, res := make(map[int]int), 0

for _, v1 := range nums1 {
for _, v2 := range nums2 {
m[v1+v2]++
}
}

for _, v3 := range nums3 {
for _, v4 := range nums4 {
res += m[-(v3 + v4)]
}
}
return res
}

Ransom Note

Magazine first, then ransomNote

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
if (ransomNote.length() > magazine.length()) return false;
int[] record = new int[26];

for (char c : magazine.toCharArray()) {
record[c - 'a']++;
}

for (char c : ransomNote.toCharArray()) {
record[c - 'a']--;
if (record[c - 'a'] < 0) {
return false;
}
}

for (int v : record) {
if (v < 0) {
return false;
}
}
return true;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func canConstruct(ransomNote string, magazine string) bool {
record := make([]int, 26)
for _, v := range magazine {
record[v-'a']++
}

for _, v := range ransomNote {
record[v-'a']--
if record[v-'a'] < 0 {
return false
}
}
return true
}