From 7d186242d02b2278d62ae20fa63f66b26c5b0287 Mon Sep 17 00:00:00 2001 From: mmdapl <2237221210@qq.com> Date: Wed, 5 May 2021 15:19:58 +0800 Subject: [PATCH] =?UTF-8?q?5.5=20=E7=AE=97=E6=B3=95=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +- 算法/剑指/.DS_Store | Bin 0 -> 8196 bytes 算法/剑指/数学/LastRemaining_Solution.js | 72 ++++++++++++++++++ 算法/剑指/数学/MoreThanHalfNum_Solution.js | 40 ++++++++++ ...olution.js => NumberOf1Between1AndN_Solution.js} | 6 +- 5 files changed, 118 insertions(+), 7 deletions(-) create mode 100644 算法/剑指/.DS_Store create mode 100644 算法/剑指/数学/LastRemaining_Solution.js create mode 100644 算法/剑指/数学/MoreThanHalfNum_Solution.js rename 算法/剑指/数学/{JZ43.NumberOf1Between1AndN_Solution.js => NumberOf1Between1AndN_Solution.js} (80%) diff --git a/README.md b/README.md index 08fd072..e6603ec 100644 --- a/README.md +++ b/README.md @@ -272,10 +272,9 @@ #### 数学问题 -- 数组中出现次数超过一半的数字 -- 圆圈中最后剩下的数 -- 从1到n整数中1出现的次数 - +- [【简单】数组中出现次数超过一半的数字](./算法/剑指/数学/MoreThanHalfNum_Solution.js) +- [【中等】圆圈中最后剩下的数 约瑟夫问题](./算法/剑指/数学/LastRemaining_Solution.js) +- [【中等】从1到n整数中1出现的次数](./算法/剑指/数学/NumberOf1Between1AndN_Solution.js) #### 位运算 - 二进制中1的个数 diff --git a/算法/剑指/.DS_Store b/算法/剑指/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5e00245078d3d905f70ac0d432d8bfacbc7626df GIT binary patch literal 8196 zcmeHML2DC16n>MY?WR&%s*oxa<3SK9lGs)SDa2TndZ;BSDpqN-$+n3myCK;aYD~#R zs8BCbis&Cu{0ScINd%An0uP>hSHF3?mfdaIlVG7UW#>(H-uKO$Z+3QhQz8QZFCy!MokdnXDjfG1j_I@y$?JU!Xtt!^j!ej=LO} z!7oTG&fvMa*Cb}BH zk1_rdqvf2Pcyx?j!+MyMhJNxqMk;XNZ0SRQS>v^AGEI$kLX3vzSvfF1e)9Zin~K1jyaLXQEv#&OU){av@Z3haZ{>%+=8v&w8Y+1G zLg~Kpr-0ALfKNF6J}X{sr$_vLLO$nSuAa=-eE;TpzzaJ{XdWFy`Pb>F-$yFv_c5xA z%YGk@+`BVF(noLBtM2aoqF2kMx*d;y7onbTZ(qNr4QK;{1CKIAtC_KLcB7uk)fVNi z`J7$U-S&cIm3P}Y{cg!bE3401&)aKnp&N>DKlC)@{NAnK zp~bU%nyHy(%UqGpxO$E1+V;Xm^XJx7KpVMYUTwlfZR>P8dcV)_$2;D;V&PZkmp*65 zvO9i1A>Tb-ztHBd^`hTL?hoIZ0iudh;7}>h<3uwm^Zy(BpZ_1Km{l-J0j0pdRX~Ji zGBYV~{{7?z>1D1R!1) + +function LastRemaining_Solution (n, m) { + // write code here + // 递推公式: f(0)=-1 f(1)=0 f(i)={f(i-1)+m}%i + + if (n === 0) { + return -1; + } + + if (n === 1) { + return 0; + } + + // 递归 + return (LastRemaining_Solution(n - 1, m) + m) % n; + +} + +// 非递归实现 +function LastRemaining_Solution01 (n, m) { + + // 当然,这里也可以添加上负数的校验情况 + if (n === 0) { + return -1; + } + + if (n === 1) { + return 0 + } + + // 循环处理 + let result = 0 + for (let index = 2; index <= n; index++) { + // f(n,m)=[f(n-1,m)+m]%n + result = (result + m) % index + } + // 返回 + return result; +} +module.exports = { + LastRemaining_Solution: LastRemaining_Solution +}; \ No newline at end of file diff --git a/算法/剑指/数学/MoreThanHalfNum_Solution.js b/算法/剑指/数学/MoreThanHalfNum_Solution.js new file mode 100644 index 0000000..21de050 --- /dev/null +++ b/算法/剑指/数学/MoreThanHalfNum_Solution.js @@ -0,0 +1,40 @@ +/* + * @Description: 【 简单】数组中出现次数超过一半的数字 + * @Version: Beta1.0 + * @Author: 【B站&公众号】Rong姐姐好可爱 + * @Date: 2021-05-05 14:28:36 + * @LastEditors: 【B站&公众号】Rong姐姐好可爱 + * @LastEditTime: 2021-05-05 14:29:22 + */ + +// 借助map计数即可 +function MoreThanHalfNum_Solution (numbers) { + // write code here + let map = new Map(); + + numbers.forEach(item => { + if (map.has(item)) { + map.set(item, map.get(item) + 1) + } else { + map.set(item, 1) + } + }) + + const arr = [...new Set(numbers)]; + + // console.log(map,arr) + let result = 0; + + arr.map(item => { + if (2 * map.get(item) > numbers.length) { + result = item; + } + }) + + + return result; + +} +module.exports = { + MoreThanHalfNum_Solution: MoreThanHalfNum_Solution +}; \ No newline at end of file diff --git a/算法/剑指/数学/JZ43.NumberOf1Between1AndN_Solution.js b/算法/剑指/数学/NumberOf1Between1AndN_Solution.js similarity index 80% rename from 算法/剑指/数学/JZ43.NumberOf1Between1AndN_Solution.js rename to 算法/剑指/数学/NumberOf1Between1AndN_Solution.js index ce27205..e927a1d 100644 --- a/算法/剑指/数学/JZ43.NumberOf1Between1AndN_Solution.js +++ b/算法/剑指/数学/NumberOf1Between1AndN_Solution.js @@ -1,10 +1,10 @@ /* - * @Description: + * @Description: 【中等】从1到n整数中1出现的次数 * @Version: Beta1.0 * @Author: 【B站&公众号】Rong姐姐好可爱 * @Date: 2021-04-26 22:23:17 * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-04-26 22:27:23 + * @LastEditTime: 2021-05-05 15:15:56 */ @@ -28,7 +28,7 @@ function NumberOf1Between1AndN_Solution(n) return count; } -console.log(NumberOf1Between1AndN_Solution(13)) +// console.log(NumberOf1Between1AndN_Solution(13)) module.exports = { NumberOf1Between1AndN_Solution : NumberOf1Between1AndN_Solution }; \ No newline at end of file