Skip to content

Commit d4116be

Browse files
authored
Merge pull request #152 from clingoram/mavis
解題
2 parents 8db9e3d + 8567eee commit d4116be

6 files changed

Lines changed: 243 additions & 0 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/LeetCode/Array/3074.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* 3074. Apple Redistribution into Boxes
3+
*
4+
* 最少需要幾個箱子才能將重新分配的apple裝進去
5+
*
6+
* @param {number[]} apple
7+
* @param {number[]} capacity
8+
* @return {number}
9+
*/
10+
var minimumBoxes = function(apple, capacity) {
11+
// sort box desc
12+
capacity.sort((a,b) => b - a);
13+
let sum = apple.reduce((a,b) => a + b,0);
14+
let ans = 0;
15+
while(sum > 0){
16+
sum -= capacity[ans++];
17+
}
18+
return ans;
19+
20+
};
21+
let apple = [5,5,5], capacity = [2,4,2,7];
22+
// 4
23+
console.log(minimumBoxes(apple,capacity))

javascript/LeetCode/Array/66.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* 66. Plus One
3+
*
4+
* 參數為數值陣列,將該參數+1並以數字陣列回傳
5+
* 只需要知道最後一個數字是什麼並將它+1
6+
* @param {number[]} digits
7+
* @return {number[]}
8+
*/
9+
var plusOne = function(digits) {
10+
// 只需要知道最後一個數字是什麼並將它+1
11+
// 若 +1 位數 >= 2,則拆開
12+
13+
for(let i = digits.length - 1;i >= 0;--i) {
14+
if(digits[i] + 1 < 10){
15+
digits[i]++;
16+
return digits;
17+
}
18+
digits[i] = 0;
19+
}
20+
digits.unshift(1);
21+
return digits;
22+
};
23+
let digits = [1,2,3];
24+
//[1,2,4]
25+
// Explanation: The array represents the integer 123.
26+
// Incrementing by one gives 123 + 1 = 124.
27+
// Thus, the result should be [1,2,4].
28+
// let digits = [9];
29+
// [1,0]
30+
// let digits = [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3];
31+
// [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4]
32+
console.log(plusOne(digits));

javascript/LeetCode/String/3794.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* 3794. Reverse String Prefix
3+
*
4+
* 反轉s中前k個字母並回傳
5+
* @param {string} s
6+
* @param {number} k
7+
* @return {string}
8+
*/
9+
var reversePrefix = function(s, k) {
10+
return s.substring(0,k).split("").reverse().join("") + s.substring(k);
11+
};
12+
// let s = "abcd", k = 2;
13+
// "bacd"
14+
let s = "hey", k = 1;
15+
// "hey"
16+
console.log(reversePrefix(s,k));

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: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { format } from 'node:path';
33
import {ExecutionTimer} from './time.js';
44
import assert from 'node:assert/strict';
5+
import { count } from 'node:console';
56

67
/*
78
22. Generate Parentheses
@@ -1159,3 +1160,43 @@ var specialTriplets = function(nums) {
11591160
*/
11601161
// console.log(specialTriplets(nums));
11611162

1163+
1164+
1165+
/**
1166+
* 345. Reverse Vowels of a String
1167+
*
1168+
* 找出所有母音(不分大小寫),其餘子音維持原位,唯獨反轉母音
1169+
* @param {string} s
1170+
* @return {string}
1171+
*/
1172+
var reverseVowels = function(s) {
1173+
let vowels = ["a","e","i","o","u","A","E","I","O","U"];
1174+
let splitS = s.split("");
1175+
// 2 pointer?
1176+
let j = splitS.length - 1,i = 0;
1177+
while(i < j){
1178+
if(!vowels.includes(splitS[i],i)){
1179+
i++;
1180+
continue;
1181+
}
1182+
if(!vowels.includes(splitS[j],j)){
1183+
j--;
1184+
continue;
1185+
}
1186+
let char = splitS[i];
1187+
splitS[i] = splitS[j];
1188+
splitS[j] = char;
1189+
i++;
1190+
j--;
1191+
}
1192+
return splitS.join("");
1193+
};
1194+
let s = "IceCreAm";
1195+
/**
1196+
* Output: "AceCreIm"
1197+
* Explanation:
1198+
* The vowels in s are ['I', 'e', 'e', 'A']. On reversing the vowels, s becomes "AceCreIm".
1199+
*
1200+
*/
1201+
// console.log(reverseVowels(s));
1202+

0 commit comments

Comments
 (0)