Skip to content

Commit b8b525c

Browse files
committed
Add problem no.1390 in LeetCode,and no.17 in codewars.
1 parent 1e517c6 commit b8b525c

3 files changed

Lines changed: 131 additions & 62 deletions

File tree

javascript/LeetCode/Array/1390.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/**
2+
* 1390. Four Divisors
3+
*
4+
* 參數為數值陣列,找出元素能夠被整除4次的為何?並將能整除該元素的數字加總回傳
5+
* @param {number[]} nums
6+
* @return {number}
7+
*/
8+
var sumFourDivisors = function(nums) {
9+
// 能整除元素的除了最小的1之外,還有它自己,所以固定整除的有2個
10+
11+
// solution 1.此方法可用,但若用在大資料,會tle
12+
// let ans = 0;
13+
// for(let i = 0;i < nums.length;++i) {
14+
// let arr = divisors(nums[i]);
15+
// if(arr.length === 4){
16+
// ans += arr.reduce((a,b) => a + b,0);
17+
// }
18+
// }
19+
// return ans;
20+
// /**
21+
// * 每個元素能被整除的數字有哪些
22+
// * @param {number} e
23+
// * @returns {number[]}
24+
// */
25+
// function divisors(e){
26+
// let divisor = [];
27+
// for(let i = 1;i <= e;++i) {
28+
// if(e % i === 0){
29+
// divisor.push(i);
30+
// }
31+
// }
32+
// return divisor;
33+
// }
34+
35+
// solution 2.
36+
let ans = 0;
37+
for(const a of nums){
38+
let divisorsCount = 0;
39+
let sum = 0;
40+
for(let i = 1;i * i <= a;++i) {
41+
if(a % i === 0){
42+
divisorsCount++;
43+
sum += i;
44+
if (i * i !== a) {
45+
divisorsCount++;
46+
sum += a / i;
47+
}
48+
}
49+
}
50+
if(divisorsCount === 4){
51+
ans += sum;
52+
}
53+
}
54+
return ans;
55+
};
56+
let nums = [21,4,7];
57+
/***
58+
* ans: 32
59+
*
60+
* 21 has 4 divisors: 1, 3, 7, 21
61+
* 4 has 3 divisors: 1, 2, 4
62+
* 7 has 2 divisors: 1, 7
63+
* The answer is the sum of divisors of 21 only.
64+
*/
65+
// let nums = [21,21];
66+
// 64 (32 + 32)
67+
console.log(sumFourDivisors(nums));

javascript/codewar/array/17.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/**
2+
* 3kyu - How many are smaller than me II?
3+
*
4+
* 回傳arr[i]的右邊有幾個是小於自己的
5+
*
6+
* @param {number[]} arr
7+
* @returns {number[]}
8+
*/
9+
function smaller(arr) {
10+
// 這方法ok,但不適用於large test cases
11+
// let ans = [];
12+
// for(let i = 0;i < arr.length;++i) {
13+
// let count = 0;
14+
// for(let j = 0;j < arr.length;j++) {
15+
// // if(arr[i] === arr[j]){
16+
// // continue;
17+
// // }
18+
// if(arr[i] > arr[j]){
19+
// count++;
20+
// }
21+
// }
22+
// ans[i] = count;
23+
// }
24+
// return ans;
25+
26+
return arr.map((current, i) => {
27+
let count = 0;
28+
// 比較當前元素右邊所有的元素
29+
for (let j = 0; j < arr.length; j++) {
30+
if (arr[j] < current) {
31+
count++;
32+
}
33+
}
34+
return count;
35+
});
36+
37+
// binary search
38+
// const result = new Array(arr.length).fill(0);
39+
// const sortedArray = [];
40+
41+
// // 從右往左處理每個元素
42+
// for (let i = arr.length - 1; i >= 0; i--) {
43+
// const current = arr[i];
44+
45+
// // binary search
46+
// let left = 0;
47+
// let right = sortedArray.length;
48+
49+
// while (left < right) {
50+
// const mid = Math.floor((left + right) / 2);
51+
// if (sortedArray[mid] < current) {
52+
// left = mid + 1;
53+
// } else {
54+
// right = mid;
55+
// }
56+
// }
57+
// result[i] = left;
58+
59+
// sortedArray.splice(left, 0, current);
60+
// }
61+
// return result;
62+
}
63+
console.log(assert.deepEqual(smaller([5, 4, 7, 9, 2, 4, 1, 4, 5, 6]), [5, 2, 6, 6, 1, 1, 0, 0, 0, 0]));
64+
console.log(assert.deepEqual(smaller([5, 4, 3, 2, 1]), [4, 3, 2, 1, 0]))

javascript/index.js

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,67 +1160,5 @@ var specialTriplets = function(nums) {
11601160
*/
11611161
// console.log(specialTriplets(nums));
11621162

1163-
/**
1164-
* 3kyu - How many are smaller than me II?
1165-
*
1166-
* 回傳arr[i]的右邊有幾個是小於自己的
1167-
*
1168-
* @param {number[]} arr
1169-
* @returns {number[]}
1170-
*/
1171-
function smaller(arr) {
1172-
// 這方法ok,但不適用於large test cases
1173-
// let ans = [];
1174-
// for(let i = 0;i < arr.length;++i) {
1175-
// let count = 0;
1176-
// for(let j = 0;j < arr.length;j++) {
1177-
// // if(arr[i] === arr[j]){
1178-
// // continue;
1179-
// // }
1180-
// if(arr[i] > arr[j]){
1181-
// count++;
1182-
// }
1183-
// }
1184-
// ans[i] = count;
1185-
// }
1186-
// return ans;
1187-
1188-
return arr.map((current, i) => {
1189-
let count = 0;
1190-
// 比較當前元素右邊所有的元素
1191-
for (let j = 0; j < arr.length; j++) {
1192-
if (arr[j] < current) {
1193-
count++;
1194-
}
1195-
}
1196-
return count;
1197-
});
11981163

1199-
// binary search
1200-
// const result = new Array(arr.length).fill(0);
1201-
// const sortedArray = [];
12021164

1203-
// // 從右往左處理每個元素
1204-
// for (let i = arr.length - 1; i >= 0; i--) {
1205-
// const current = arr[i];
1206-
1207-
// // binary search
1208-
// let left = 0;
1209-
// let right = sortedArray.length;
1210-
1211-
// while (left < right) {
1212-
// const mid = Math.floor((left + right) / 2);
1213-
// if (sortedArray[mid] < current) {
1214-
// left = mid + 1;
1215-
// } else {
1216-
// right = mid;
1217-
// }
1218-
// }
1219-
// result[i] = left;
1220-
1221-
// sortedArray.splice(left, 0, current);
1222-
// }
1223-
// return result;
1224-
}
1225-
console.log(assert.deepEqual(smaller([5, 4, 7, 9, 2, 4, 1, 4, 5, 6]), [5, 2, 6, 6, 1, 1, 0, 0, 0, 0]));
1226-
console.log(assert.deepEqual(smaller([5, 4, 3, 2, 1]), [4, 3, 2, 1, 0]))

0 commit comments

Comments
 (0)