From abc188d96d317ea0d769243ceff8dd1f3db141c7 Mon Sep 17 00:00:00 2001 From: Mavis Date: Fri, 26 Dec 2025 14:14:53 +0800 Subject: [PATCH 01/10] practice --- javascript/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/javascript/index.js b/javascript/index.js index b9f992c..49cce4f 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -1159,3 +1159,18 @@ var specialTriplets = function(nums) { */ // console.log(specialTriplets(nums)); +/** + * 3074. Apple Redistribution into Boxes + * + * @param {number[]} apple + * @param {number[]} capacity + * @return {number} + */ +var minimumBoxes = function(apple, capacity) { + // sort box desc + capacity.sort((a,b) => a - b); + console.log(capacity) +}; +let apple = [5,5,5], capacity = [2,4,2,7]; +// 4 +console.log(minimumBoxes(apple,capacity)) \ No newline at end of file From 8d1f1a44443e7d7312bf000e00e80cab2dcd08ea Mon Sep 17 00:00:00 2001 From: Mavis Date: Mon, 29 Dec 2025 13:57:47 +0800 Subject: [PATCH 02/10] add 3074 --- javascript/LeetCode/Array/3074.js | 23 +++++++++++++++++++++++ javascript/index.js | 15 --------------- 2 files changed, 23 insertions(+), 15 deletions(-) create mode 100644 javascript/LeetCode/Array/3074.js diff --git a/javascript/LeetCode/Array/3074.js b/javascript/LeetCode/Array/3074.js new file mode 100644 index 0000000..e100a35 --- /dev/null +++ b/javascript/LeetCode/Array/3074.js @@ -0,0 +1,23 @@ +/** + * 3074. Apple Redistribution into Boxes + * + * 最少需要幾個箱子才能將重新分配的apple裝進去 + * + * @param {number[]} apple + * @param {number[]} capacity + * @return {number} + */ +var minimumBoxes = function(apple, capacity) { + // sort box desc + capacity.sort((a,b) => b - a); + let sum = apple.reduce((a,b) => a + b,0); + let ans = 0; + while(sum > 0){ + sum -= capacity[ans++]; + } + return ans; + +}; +let apple = [5,5,5], capacity = [2,4,2,7]; +// 4 +console.log(minimumBoxes(apple,capacity)) \ No newline at end of file diff --git a/javascript/index.js b/javascript/index.js index 49cce4f..b9f992c 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -1159,18 +1159,3 @@ var specialTriplets = function(nums) { */ // console.log(specialTriplets(nums)); -/** - * 3074. Apple Redistribution into Boxes - * - * @param {number[]} apple - * @param {number[]} capacity - * @return {number} - */ -var minimumBoxes = function(apple, capacity) { - // sort box desc - capacity.sort((a,b) => a - b); - console.log(capacity) -}; -let apple = [5,5,5], capacity = [2,4,2,7]; -// 4 -console.log(minimumBoxes(apple,capacity)) \ No newline at end of file From 38270f51c88688060b5360b773e647f24ca72ecb Mon Sep 17 00:00:00 2001 From: Mavis Date: Tue, 30 Dec 2025 13:46:38 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E7=B7=B4=E7=BF=92codewars?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/javascript/index.js b/javascript/index.js index b9f992c..2202563 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -1159,3 +1159,27 @@ var specialTriplets = function(nums) { */ // console.log(specialTriplets(nums)); +/** + * 3kyu - How many are smaller than me II? + * + * @param {number[]} arr + * @returns {number[]} + */ +function smaller(arr) { + // 回傳arr[i]的右邊有幾個是小於自己的 + let ans = []; + for(let i = 0;i < arr.length;++i) { + let count = 0; + for(let j = i + 1;j < arr.length;j++) { + if(arr[i] === arr[j]){ + continue; + } + if(arr[i] > arr[j]){ + count++; + } + } + ans[i] = count; + } + return ans; +} +console.log(assert.equal(smaller([5, 4, 7, 9, 2, 4, 1, 4, 5, 6]), [5, 2, 6, 6, 1, 1, 0, 0, 0, 0])) \ No newline at end of file From f6c804203f5c62a4be6d30bbf6a66b67b0a87105 Mon Sep 17 00:00:00 2001 From: Mavis Date: Wed, 31 Dec 2025 13:57:06 +0800 Subject: [PATCH 04/10] still try to solve a problem which is run time out. --- javascript/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/javascript/index.js b/javascript/index.js index 2202563..ebf3357 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -1162,11 +1162,13 @@ var specialTriplets = function(nums) { /** * 3kyu - How many are smaller than me II? * + * 回傳arr[i]的右邊有幾個是小於自己的 + * * @param {number[]} arr * @returns {number[]} */ function smaller(arr) { - // 回傳arr[i]的右邊有幾個是小於自己的 + // 這方法ok,但不適用於large test cases let ans = []; for(let i = 0;i < arr.length;++i) { let count = 0; @@ -1182,4 +1184,5 @@ function smaller(arr) { } return ans; } -console.log(assert.equal(smaller([5, 4, 7, 9, 2, 4, 1, 4, 5, 6]), [5, 2, 6, 6, 1, 1, 0, 0, 0, 0])) \ No newline at end of file +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])); +console.log(assert.deepEqual(smaller([5, 4, 3, 2, 1]), [4, 3, 2, 1, 0])) \ No newline at end of file From 1e517c677ac625b68e14cb9d086ec603eb636c28 Mon Sep 17 00:00:00 2001 From: Mavis Date: Fri, 2 Jan 2026 14:42:33 +0800 Subject: [PATCH 05/10] try to solve 3 kyu --- javascript/index.js | 64 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/javascript/index.js b/javascript/index.js index ebf3357..e7b0077 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -2,6 +2,7 @@ import { format } from 'node:path'; import {ExecutionTimer} from './time.js'; import assert from 'node:assert/strict'; +import { count } from 'node:console'; /* 22. Generate Parentheses @@ -1169,20 +1170,57 @@ var specialTriplets = function(nums) { */ function smaller(arr) { // 這方法ok,但不適用於large test cases - let ans = []; - for(let i = 0;i < arr.length;++i) { + // let ans = []; + // for(let i = 0;i < arr.length;++i) { + // let count = 0; + // for(let j = 0;j < arr.length;j++) { + // // if(arr[i] === arr[j]){ + // // continue; + // // } + // if(arr[i] > arr[j]){ + // count++; + // } + // } + // ans[i] = count; + // } + // return ans; + + return arr.map((current, i) => { let count = 0; - for(let j = i + 1;j < arr.length;j++) { - if(arr[i] === arr[j]){ - continue; - } - if(arr[i] > arr[j]){ - count++; - } - } - ans[i] = count; - } - return ans; + // 比較當前元素右邊所有的元素 + for (let j = 0; j < arr.length; j++) { + if (arr[j] < current) { + count++; + } + } + return count; + }); + + // binary search + // const result = new Array(arr.length).fill(0); + // const sortedArray = []; + + // // 從右往左處理每個元素 + // for (let i = arr.length - 1; i >= 0; i--) { + // const current = arr[i]; + + // // binary search + // let left = 0; + // let right = sortedArray.length; + + // while (left < right) { + // const mid = Math.floor((left + right) / 2); + // if (sortedArray[mid] < current) { + // left = mid + 1; + // } else { + // right = mid; + // } + // } + // result[i] = left; + + // sortedArray.splice(left, 0, current); + // } + // return result; } 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])); console.log(assert.deepEqual(smaller([5, 4, 3, 2, 1]), [4, 3, 2, 1, 0])) \ No newline at end of file From b8b525cda2d438de95281700c8798fd5f7c21ca6 Mon Sep 17 00:00:00 2001 From: Mavis Date: Mon, 5 Jan 2026 14:00:50 +0800 Subject: [PATCH 06/10] Add problem no.1390 in LeetCode,and no.17 in codewars. --- javascript/LeetCode/Array/1390.js | 67 +++++++++++++++++++++++++++++++ javascript/codewar/array/17.js | 64 +++++++++++++++++++++++++++++ javascript/index.js | 62 ---------------------------- 3 files changed, 131 insertions(+), 62 deletions(-) create mode 100644 javascript/LeetCode/Array/1390.js create mode 100644 javascript/codewar/array/17.js diff --git a/javascript/LeetCode/Array/1390.js b/javascript/LeetCode/Array/1390.js new file mode 100644 index 0000000..ee30293 --- /dev/null +++ b/javascript/LeetCode/Array/1390.js @@ -0,0 +1,67 @@ +/** + * 1390. Four Divisors + * + * 參數為數值陣列,找出元素能夠被整除4次的為何?並將能整除該元素的數字加總回傳 + * @param {number[]} nums + * @return {number} + */ +var sumFourDivisors = function(nums) { + // 能整除元素的除了最小的1之外,還有它自己,所以固定整除的有2個 + + // solution 1.此方法可用,但若用在大資料,會tle + // let ans = 0; + // for(let i = 0;i < nums.length;++i) { + // let arr = divisors(nums[i]); + // if(arr.length === 4){ + // ans += arr.reduce((a,b) => a + b,0); + // } + // } + // return ans; + // /** + // * 每個元素能被整除的數字有哪些 + // * @param {number} e + // * @returns {number[]} + // */ + // function divisors(e){ + // let divisor = []; + // for(let i = 1;i <= e;++i) { + // if(e % i === 0){ + // divisor.push(i); + // } + // } + // return divisor; + // } + + // solution 2. + let ans = 0; + for(const a of nums){ + let divisorsCount = 0; + let sum = 0; + for(let i = 1;i * i <= a;++i) { + if(a % i === 0){ + divisorsCount++; + sum += i; + if (i * i !== a) { + divisorsCount++; + sum += a / i; + } + } + } + if(divisorsCount === 4){ + ans += sum; + } + } + return ans; +}; +let nums = [21,4,7]; +/*** + * ans: 32 + * + * 21 has 4 divisors: 1, 3, 7, 21 + * 4 has 3 divisors: 1, 2, 4 + * 7 has 2 divisors: 1, 7 + * The answer is the sum of divisors of 21 only. + */ +// let nums = [21,21]; +// 64 (32 + 32) +console.log(sumFourDivisors(nums)); \ No newline at end of file diff --git a/javascript/codewar/array/17.js b/javascript/codewar/array/17.js new file mode 100644 index 0000000..94ab83e --- /dev/null +++ b/javascript/codewar/array/17.js @@ -0,0 +1,64 @@ +/** + * 3kyu - How many are smaller than me II? + * + * 回傳arr[i]的右邊有幾個是小於自己的 + * + * @param {number[]} arr + * @returns {number[]} + */ +function smaller(arr) { + // 這方法ok,但不適用於large test cases + // let ans = []; + // for(let i = 0;i < arr.length;++i) { + // let count = 0; + // for(let j = 0;j < arr.length;j++) { + // // if(arr[i] === arr[j]){ + // // continue; + // // } + // if(arr[i] > arr[j]){ + // count++; + // } + // } + // ans[i] = count; + // } + // return ans; + + return arr.map((current, i) => { + let count = 0; + // 比較當前元素右邊所有的元素 + for (let j = 0; j < arr.length; j++) { + if (arr[j] < current) { + count++; + } + } + return count; + }); + + // binary search + // const result = new Array(arr.length).fill(0); + // const sortedArray = []; + + // // 從右往左處理每個元素 + // for (let i = arr.length - 1; i >= 0; i--) { + // const current = arr[i]; + + // // binary search + // let left = 0; + // let right = sortedArray.length; + + // while (left < right) { + // const mid = Math.floor((left + right) / 2); + // if (sortedArray[mid] < current) { + // left = mid + 1; + // } else { + // right = mid; + // } + // } + // result[i] = left; + + // sortedArray.splice(left, 0, current); + // } + // return result; +} +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])); +console.log(assert.deepEqual(smaller([5, 4, 3, 2, 1]), [4, 3, 2, 1, 0])) \ No newline at end of file diff --git a/javascript/index.js b/javascript/index.js index e7b0077..6bd6943 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -1160,67 +1160,5 @@ var specialTriplets = function(nums) { */ // console.log(specialTriplets(nums)); -/** - * 3kyu - How many are smaller than me II? - * - * 回傳arr[i]的右邊有幾個是小於自己的 - * - * @param {number[]} arr - * @returns {number[]} - */ -function smaller(arr) { - // 這方法ok,但不適用於large test cases - // let ans = []; - // for(let i = 0;i < arr.length;++i) { - // let count = 0; - // for(let j = 0;j < arr.length;j++) { - // // if(arr[i] === arr[j]){ - // // continue; - // // } - // if(arr[i] > arr[j]){ - // count++; - // } - // } - // ans[i] = count; - // } - // return ans; - - return arr.map((current, i) => { - let count = 0; - // 比較當前元素右邊所有的元素 - for (let j = 0; j < arr.length; j++) { - if (arr[j] < current) { - count++; - } - } - return count; - }); - // binary search - // const result = new Array(arr.length).fill(0); - // const sortedArray = []; - // // 從右往左處理每個元素 - // for (let i = arr.length - 1; i >= 0; i--) { - // const current = arr[i]; - - // // binary search - // let left = 0; - // let right = sortedArray.length; - - // while (left < right) { - // const mid = Math.floor((left + right) / 2); - // if (sortedArray[mid] < current) { - // left = mid + 1; - // } else { - // right = mid; - // } - // } - // result[i] = left; - - // sortedArray.splice(left, 0, current); - // } - // return result; -} -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])); -console.log(assert.deepEqual(smaller([5, 4, 3, 2, 1]), [4, 3, 2, 1, 0])) \ No newline at end of file From 660e4d8fa8ce63fb5010fa029a0c9542b4ade972 Mon Sep 17 00:00:00 2001 From: Mavis Date: Tue, 6 Jan 2026 13:54:49 +0800 Subject: [PATCH 07/10] add 3794 --- javascript/LeetCode/String/3794.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 javascript/LeetCode/String/3794.js diff --git a/javascript/LeetCode/String/3794.js b/javascript/LeetCode/String/3794.js new file mode 100644 index 0000000..522b84f --- /dev/null +++ b/javascript/LeetCode/String/3794.js @@ -0,0 +1,16 @@ +/** + * 3794. Reverse String Prefix + * + * 反轉s中前k個字母並回傳 + * @param {string} s + * @param {number} k + * @return {string} + */ +var reversePrefix = function(s, k) { + return s.substring(0,k).split("").reverse().join("") + s.substring(k); +}; +// let s = "abcd", k = 2; +// "bacd" +let s = "hey", k = 1; +// "hey" +console.log(reversePrefix(s,k)); \ No newline at end of file From 35994ff63fe6a977e30f630e88c9270401f9aa50 Mon Sep 17 00:00:00 2001 From: Mavis Date: Wed, 7 Jan 2026 13:51:30 +0800 Subject: [PATCH 08/10] practice --- javascript/index.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/javascript/index.js b/javascript/index.js index 6bd6943..d69956e 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -1162,3 +1162,40 @@ var specialTriplets = function(nums) { +/** + * 345. Reverse Vowels of a String + * + * 找出所有母音(不分大小寫),其餘子音維持原位,唯獨反轉母音 + * @param {string} s + * @return {string} + */ +var reverseVowels = function(s) { + let vowels = ["a","e","i","o","u","A","E","I","O","U"]; + let splitS = s.split(""); + // 2 pointer? + let j = splitS.length - 1,i = 0; + while(i < j){ + if(!vowels.includes(splitS[i],i)){ + i++; + continue; + } + if(!vowels.includes(splitS[j],j)){ + j--; + continue; + } + let char = splitS[i]; + splitS[i] = splitS[j]; + splitS[j] = char; + i++; + j--; + } + return splitS.join(""); +}; +let s = "IceCreAm"; +/** + * Output: "AceCreIm" + * Explanation: + * The vowels in s are ['I', 'e', 'e', 'A']. On reversing the vowels, s becomes "AceCreIm". + * + */ +console.log(reverseVowels(s)); From e4065127777364dc1b07cde71b11e0859c8eae14 Mon Sep 17 00:00:00 2001 From: Mavis Date: Thu, 15 Jan 2026 14:26:21 +0800 Subject: [PATCH 09/10] practicet to solve pluse one: --- javascript/index.js | 47 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/javascript/index.js b/javascript/index.js index d69956e..aca7a88 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -1198,4 +1198,49 @@ let s = "IceCreAm"; * The vowels in s are ['I', 'e', 'e', 'A']. On reversing the vowels, s becomes "AceCreIm". * */ -console.log(reverseVowels(s)); +// console.log(reverseVowels(s)); + +/** + * 66. Plus One + * + * 參數為數值陣列,將該參數+1並以數字陣列回傳 + * 只需要知道最後一個數字是什麼並將它+1 + * @param {number[]} digits + * @return {number[]} + */ +var plusOne = function(digits) { + // 只需要知道最後一個數字是什麼並將它+1 + // 若 +1 位數 >= 2,則拆開 + + // let toInt = parseInt(digits.join(""))+1; + // let splitToArray = toInt.toString().split(""); + // let res = []; + // for(let i = 0;i < splitToArray.length;++i) { + // res.push(parseInt(splitToArray[i])); + // } + // return res; + + // let lastElePlusOne = digits[digits.length -1]+1; + // digits.pop() + // digits.push(lastElePlusOne) + // return digits; + + let lastElePlusOne = 0; + let last = digits[digits.length -1]; + if(last <= 9){ + lastElePlusOne = (last + 1).toString().split(""); + }else{ + lastElePlusOne = (last + 1); + } + digits.pop(); + digits.push(lastElePlusOne) + return digits; +}; +// let digits = [1,2,3]; +//[1,2,4] +// Explanation: The array represents the integer 123. +// Incrementing by one gives 123 + 1 = 124. +// Thus, the result should be [1,2,4]. +let digits = [9]; +// [1,0] +console.log(plusOne(digits)); \ No newline at end of file From 8567eeec09608cdc6e210c68ff073cfc68b4b746 Mon Sep 17 00:00:00 2001 From: Mavis Date: Fri, 16 Jan 2026 13:05:15 +0800 Subject: [PATCH 10/10] add problem no.66 --- javascript/LeetCode/Array/66.js | 32 ++++++++++++++++++++++++ javascript/index.js | 44 --------------------------------- 2 files changed, 32 insertions(+), 44 deletions(-) create mode 100644 javascript/LeetCode/Array/66.js diff --git a/javascript/LeetCode/Array/66.js b/javascript/LeetCode/Array/66.js new file mode 100644 index 0000000..c317008 --- /dev/null +++ b/javascript/LeetCode/Array/66.js @@ -0,0 +1,32 @@ +/** + * 66. Plus One + * + * 參數為數值陣列,將該參數+1並以數字陣列回傳 + * 只需要知道最後一個數字是什麼並將它+1 + * @param {number[]} digits + * @return {number[]} + */ +var plusOne = function(digits) { + // 只需要知道最後一個數字是什麼並將它+1 + // 若 +1 位數 >= 2,則拆開 + + for(let i = digits.length - 1;i >= 0;--i) { + if(digits[i] + 1 < 10){ + digits[i]++; + return digits; + } + digits[i] = 0; + } + digits.unshift(1); + return digits; +}; +let digits = [1,2,3]; +//[1,2,4] +// Explanation: The array represents the integer 123. +// Incrementing by one gives 123 + 1 = 124. +// Thus, the result should be [1,2,4]. +// let digits = [9]; +// [1,0] +// let digits = [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]; +// [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4] +console.log(plusOne(digits)); \ No newline at end of file diff --git a/javascript/index.js b/javascript/index.js index aca7a88..1218a05 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -1200,47 +1200,3 @@ let s = "IceCreAm"; */ // console.log(reverseVowels(s)); -/** - * 66. Plus One - * - * 參數為數值陣列,將該參數+1並以數字陣列回傳 - * 只需要知道最後一個數字是什麼並將它+1 - * @param {number[]} digits - * @return {number[]} - */ -var plusOne = function(digits) { - // 只需要知道最後一個數字是什麼並將它+1 - // 若 +1 位數 >= 2,則拆開 - - // let toInt = parseInt(digits.join(""))+1; - // let splitToArray = toInt.toString().split(""); - // let res = []; - // for(let i = 0;i < splitToArray.length;++i) { - // res.push(parseInt(splitToArray[i])); - // } - // return res; - - // let lastElePlusOne = digits[digits.length -1]+1; - // digits.pop() - // digits.push(lastElePlusOne) - // return digits; - - let lastElePlusOne = 0; - let last = digits[digits.length -1]; - if(last <= 9){ - lastElePlusOne = (last + 1).toString().split(""); - }else{ - lastElePlusOne = (last + 1); - } - digits.pop(); - digits.push(lastElePlusOne) - return digits; -}; -// let digits = [1,2,3]; -//[1,2,4] -// Explanation: The array represents the integer 123. -// Incrementing by one gives 123 + 1 = 124. -// Thus, the result should be [1,2,4]. -let digits = [9]; -// [1,0] -console.log(plusOne(digits)); \ No newline at end of file