Skip to content

Commit 7524bd3

Browse files
committed
✅ [1679] hashmap, faster
1 parent b9c1e04 commit 7524bd3

File tree

2 files changed

+155
-34
lines changed

2 files changed

+155
-34
lines changed

1679/my_solution.js

+82-24
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,101 @@
1+
// /**
2+
// * @param {number[]} nums
3+
// * @param {number} k
4+
// * @return {number}
5+
// */
6+
// var maxOperations = function (nums, k) {
7+
// let l = 0, r = nums.length - 1, operationCount = 0, visited = new Set();
8+
//
9+
// console.log(nums)
10+
// console.log(nums.sort((a, b) => a - b))
11+
// // [1, 1, 1, 2, 2, 2, 3, 4]
12+
// nums = nums.sort((a, b) => a - b);
13+
// while (l < r) {
14+
// console.log(`l: ${l}, r: ${r}`)
15+
// console.log(`nums[l]: ${nums[l]}, nums[r]: ${nums[r]}`)
16+
//
17+
// if ((nums[l] + nums[r]) > k) {
18+
// r--;
19+
// console.log("~> this is > k")
20+
// continue;
21+
// }
22+
//
23+
// if ((nums[l] + nums[r]) === k) {
24+
// operationCount++;
25+
// r--;
26+
// l++;
27+
// } else {
28+
// l++;
29+
// }
30+
// }
31+
//
32+
// return operationCount;
33+
// };
34+
135
/**
236
* @param {number[]} nums
337
* @param {number} k
438
* @return {number}
539
*/
640
var maxOperations = function (nums, k) {
7-
let l = 0, r = nums.length - 1, operationCount = 0, visited = new Set();
8-
9-
console.log(nums)
10-
console.log(nums.sort((a, b) => a - b))
11-
// [1, 1, 1, 2, 2, 2, 3, 4]
12-
nums = nums.sort((a, b) => a - b);
13-
while (l < r) {
14-
console.log(`l: ${l}, r: ${r}`)
15-
console.log(`nums[l]: ${nums[l]}, nums[r]: ${nums[r]}`)
16-
17-
if ((nums[l] + nums[r]) > k) {
18-
r--;
19-
console.log("~> this is > k")
20-
continue;
21-
}
41+
let complimentMap = new Map(), operationCount = 0
42+
43+
44+
for (let i = 0; i < nums.length; i++) {
45+
let compliment = k - nums[i]
46+
// map.set(nums[i], { comp: k - nums[i], count: (map.get(nums[i]) ?? 0) + 1 })
47+
if (compliment > 0) complimentMap.set(compliment, (complimentMap.get(compliment) ?? 0) + 1)
48+
}
2249

23-
if ((nums[l] + nums[r]) === k) {
50+
console.log("k")
51+
console.log(k)
52+
console.log("complimentMap")
53+
console.log(complimentMap)
54+
console.log("____________________________________")
55+
// console.log(complimentMap.get(1).count)
56+
57+
for (let i = 0; i < nums.length; i++) {
58+
if (nums[i] >= k) continue;
59+
60+
let x = (nums[i] === (k - nums[i])) ? 1 : 0;
61+
console.log(`nums[i]: ${nums[i]}, x: ${x}`)
62+
63+
console.log(complimentMap.has(nums[i]))
64+
console.log(complimentMap.get(nums[i]))
65+
console.log(complimentMap.get(k - nums[i]))
66+
if (complimentMap.has(nums[i]) && complimentMap.get(nums[i]) > x && (complimentMap.get(k - nums[i])) > x) {
67+
console.log("-> Has comp")
68+
console.log(complimentMap)
69+
complimentMap.set(nums[i], complimentMap.get(nums[i]) - 1);
70+
complimentMap.set(k - nums[i], complimentMap.get(k - nums[i]) - 1);
2471
operationCount++;
25-
r--;
26-
l++;
27-
} else {
28-
l++;
72+
console.log(complimentMap)
2973
}
3074
}
3175

76+
// for (let [key, value] of complimentMap) {
77+
// let x = (key === (k - key)) ? 1 : 0;
78+
// console.log(`key: ${key}, value: ${value}, x: ${x}`)
79+
// if (complimentMap.has(key) && complimentMap.get(key) > x) {
80+
// operationCount++;
81+
// complimentMap.set(key, complimentMap.get(key) - 1);
82+
// complimentMap.set(k - key, complimentMap.get(k - key) - 1);
83+
// }
84+
// }
85+
86+
console.log("final")
87+
console.log(complimentMap)
3288
return operationCount;
3389
};
3490

91+
3592
let x =
3693
// maxOperations([1, 2, 3, 4], 5) // 2
37-
// maxOperations([3, 1, 3, 4, 3], 6) // 1
38-
// maxOperations([4, 4, 1, 3, 1, 3, 2, 2, 5, 5, 1, 5, 2, 1, 2, 3, 5, 4], 2) // 2
39-
// maxOperations([2, 2, 2, 3, 1, 1, 4, 1], 4) // 2
40-
maxOperations([63, 10, 28, 31, 90, 53, 75, 77, 72, 47, 45, 6, 49, 13, 77, 61, 68, 43, 33, 1, 14, 62, 55, 55, 38, 54, 8, 79, 89, 14, 50, 68, 85, 12, 42, 57, 4, 67, 75, 6, 71, 8, 61, 26, 11, 20, 22, 3, 70, 52, 82, 70, 67, 18, 66, 79, 84, 51, 78, 23, 19, 84, 46, 61, 63, 73, 80, 61, 15, 12, 58, 3, 21, 66, 42, 55, 7, 58, 85, 60, 23, 69, 41, 61, 35, 64, 58, 84, 61, 77, 45, 14, 1, 38, 4, 8, 42, 16, 79, 60, 80, 39, 67, 10, 24, 15, 6, 37, 68, 76, 30, 53, 63, 87, 11, 71, 86, 82, 77, 76, 37, 21, 85, 7, 75, 83, 80, 8, 19, 25, 11, 10, 41, 66, 70, 14, 23, 74, 33, 76, 35, 89, 68, 85, 83, 57, 6, 72, 34, 21, 57, 72, 79, 29, 65, 3, 67, 8, 24, 24, 18, 26, 27, 68, 78, 64, 57, 55, 68, 28, 9, 11, 38, 45, 61, 37, 81, 89, 38, 43, 45, 26, 84, 62, 22, 37, 51, 15, 30, 67, 75, 24, 66, 40, 81, 74, 48, 43, 78, 14, 33, 19, 73, 5, 1, 2, 53, 29, 49, 73, 23, 5], 59) // 42
94+
// maxOperations([3, 1, 3, 4, 3], 6) // 1
95+
// maxOperations([4, 4, 1, 3, 1, 3, 2, 2, 5, 5, 1, 5, 2, 1, 2, 3, 5, 4], 2) // 2
96+
// maxOperations([2, 2, 2, 3, 1, 1, 4, 1], 4) // 2
97+
maxOperations([63, 10, 28, 31, 90, 53, 75, 77, 72, 47, 45, 6, 49, 13, 77, 61, 68, 43, 33, 1, 14, 62, 55, 55, 38, 54, 8, 79, 89, 14, 50, 68, 85, 12, 42, 57, 4, 67, 75, 6, 71, 8, 61, 26, 11, 20, 22, 3, 70, 52, 82, 70, 67, 18, 66, 79, 84, 51, 78, 23, 19, 84, 46, 61, 63, 73, 80, 61, 15, 12, 58, 3, 21, 66, 42, 55, 7, 58, 85, 60, 23, 69, 41, 61, 35, 64, 58, 84, 61, 77, 45, 14, 1, 38, 4, 8, 42, 16, 79, 60, 80, 39, 67, 10, 24, 15, 6, 37, 68, 76, 30, 53, 63, 87, 11, 71, 86, 82, 77, 76, 37, 21, 85, 7, 75, 83, 80, 8, 19, 25, 11, 10, 41, 66, 70, 14, 23, 74, 33, 76, 35, 89, 68, 85, 83, 57, 6, 72, 34, 21, 57, 72, 79, 29, 65, 3, 67, 8, 24, 24, 18, 26, 27, 68, 78, 64, 57, 55, 68, 28, 9, 11, 38, 45, 61, 37, 81, 89, 38, 43, 45, 26, 84, 62, 22, 37, 51, 15, 30, 67, 75, 24, 66, 40, 81, 74, 48, 43, 78, 14, 33, 19, 73, 5, 1, 2, 53, 29, 49, 73, 23, 5], 59) // 42
98+
// maxOperations([2, 5, 4, 4, 1, 3, 4, 4, 1, 4, 4, 1, 2, 1, 2, 2, 3, 2, 4, 2], 3) // 4
4199

42100
console.log("Result")
43101
console.log(x)

1679/solution.js

+73-10
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,84 @@
1+
// /**
2+
// * @param {number[]} nums
3+
// * @param {number} k
4+
// * @return {number}
5+
// */
6+
// var maxOperations = function (nums, k) {
7+
// let l = 0, r = nums.length - 1, operationCount = 0
8+
//
9+
// nums = nums.sort((a, b) => a - b);
10+
// while (l < r) {
11+
// if ((nums[l] + nums[r]) === k) {
12+
// operationCount++;
13+
// r--;
14+
// l++;
15+
// } else if ((nums[l] + nums[r]) > k) {
16+
// r--;
17+
// } else {
18+
// l++;
19+
// }
20+
// }
21+
//
22+
// return operationCount;
23+
// };
24+
// /**
25+
// * @param {number[]} nums
26+
// * @param {number} k
27+
// * @return {number}
28+
// */
29+
// var maxOperations = function (nums, k) {
30+
// let l = 0, r = nums.length - 1, operationCount = 0, visited = new Set();
31+
//
32+
// console.log(nums)
33+
// console.log(nums.sort((a, b) => a - b))
34+
// // [1, 1, 1, 2, 2, 2, 3, 4]
35+
// nums = nums.sort((a, b) => a - b);
36+
// while (l < r) {
37+
// console.log(`l: ${l}, r: ${r}`)
38+
// console.log(`nums[l]: ${nums[l]}, nums[r]: ${nums[r]}`)
39+
//
40+
// if ((nums[l] + nums[r]) > k) {
41+
// r--;
42+
// console.log("~> this is > k")
43+
// continue;
44+
// }
45+
//
46+
// if ((nums[l] + nums[r]) === k) {
47+
// operationCount++;
48+
// r--;
49+
// l++;
50+
// } else {
51+
// l++;
52+
// }
53+
// }
54+
//
55+
// return operationCount;
56+
// };
57+
158
/**
259
* @param {number[]} nums
360
* @param {number} k
461
* @return {number}
562
*/
663
var maxOperations = function (nums, k) {
7-
let l = 0, r = nums.length - 1, operationCount = 0
64+
let complimentMap = new Map(), operationCount = 0
65+
66+
67+
for (let i = 0; i < nums.length; i++) {
68+
let compliment = k - nums[i]
69+
if (compliment > 0) complimentMap.set(compliment, (complimentMap.get(compliment) ?? 0) + 1)
70+
}
71+
72+
73+
for (let i = 0; i < nums.length; i++) {
74+
if (nums[i] >= k) continue;
75+
76+
let x = (nums[i] === (k - nums[i])) ? 1 : 0;
877

9-
nums = nums.sort((a, b) => a - b);
10-
while (l < r) {
11-
if ((nums[l] + nums[r]) === k) {
78+
if (complimentMap.has(nums[i]) && complimentMap.get(nums[i]) > x && complimentMap.get(k - nums[i]) > x) {
79+
complimentMap.set(nums[i], complimentMap.get(nums[i]) - 1);
80+
complimentMap.set(k - nums[i], complimentMap.get(k - nums[i]) - 1);
1281
operationCount++;
13-
r--;
14-
l++;
15-
} else if ((nums[l] + nums[r]) > k) {
16-
r--;
17-
} else {
18-
l++;
1982
}
2083
}
2184

0 commit comments

Comments
 (0)