We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
题目:
实现strStr()
代码
/** * @param {string} haystack * @param {string} needle * @return {number} */ var strStr = function(haystack, needle) { if (!needle) return 0; let i = 0, // haystack 的索引 j = 1, // needle 的索引,从 1 开始,因为只有 needle[0] === haystack[i] 才会开始遍历 needle haystackLen = haystack.length, needleLen = needle.length, needleHead = needle[0]; // needle 的首个元素 while (haystackLen - i >= needleLen) { // 遍历 haystack,如果 haystack 剩下的长度不足以覆盖 needle 的长度,此时还没找到满足条件的索引,那么不用再遍历了,返回 -1 if (haystack[i] === needleHead) { // 期间,如果 haystack[i] === needle[0] 则说明有戏 if (needleLen === 1) return 0; // 而如果此时 needle 的长度为 1 那么就可以直接返回结果是 0 // 否则就从第 1 个元素开始遍历 needle let k = i + 1; // 注意不要直接在 i 上递增,因为此时的 i 值今后还要用到(不论此次遍历能确认满足条件与否) while (j < needleLen) { if (haystack[k] !== needle[j]) { // 一旦出现不相等的 j = 1; // 就重置 j break; // 停止对 needle 的遍历,然后从 i++ 开始继续遍历 haystack } else { k++; j++; } } if (j === needleLen) return i; // 全等,返回结果 i } i++; } return -1; };
思路: 见注释。
对比: 与高分对比: 本代码运行 74 个测试用例花费约 68ms,平均一个测试用例约 0.9ms; 高分代码运行 74 个测试用例花费约 68ms,平均一个测试用例约 0.9ms。
附最高分代码:
/** * @param {string} haystack * @param {string} needle * @return {number} */ var strStr = function(haystack, needle) { return haystack.indexOf(needle); }
我们的代码就是手动实现了原生的 indexOf 函数的这种功能。
indexOf
阅读: How to get rid of node_modules with Yarn Plug’n’Play
点评: node_moduels 三大罪状:
用 yarn 来替代 npm 作为模块管理器,优化了下载模式,使得 yarn install 速度远高于 npm install
但是 yarn 还是继承了 npm 的 node_module 的三个问题,根本原因在于 yarn 没有抛弃 node_modules
现在,从 yarn 1.12 版本开始,就可以启用 yarn 的 pnp 特性,来彻底摆脱 node_modules 文件夹
说来也很简单,就是用 yarn 的缓存文件夹代替 node_modules 文件夹就好了, 这样不同项目的依赖就可以共用,而且其它项目安装过的依赖本项目就可以不用安装
而且当我们需要调试依赖时,也就是修改本项目依赖模块中的代码(但是不想影响其它项目的使用), 还可以使用 yarn unplug packageName 来将某个指定依赖拷贝到项目中的 .pnp/unplugged 目录下, 之后 .pnp.js 中的 resolver 就会自动加载这个 unplug 的版本, 调试完毕后,再执行 yarn unplug --clear packageName 可移除本地 .pnp/unplugged 中的对应依赖。
yarn unplug packageName
.pnp/unplugged
.pnp.js
yarn unplug --clear packageName
风险: yarn pnp 直接删除了 node_modules 可能导致某些依赖这个文件夹的第三方模块工作异常。 yarn pnp 还是个新特性,甚至是实验性质的,因此慎用。
另外还参考了:
原因:下载 electron 相关包速度太慢,甚至慢到拉取不到(甚至翻墙也没用) 解决方法就是更换 electron 包的镜像源:在 ~/.npmrc 中添加一行:electron_mirror="https://npm.taobao.org/mirrors/electron/" 注意:如果要用 sudo,则应修改 /root/.npmrc
~/.npmrc
electron_mirror="https://npm.taobao.org/mirrors/electron/"
/root/.npmrc
参考:eletron安装卡在 node install.js
否则一些在 start 中指定的参数就不会生效。
本周原创停更一回,分享一篇他山之玉 理解OAuth 2.0 我们的项目以后可能会用到 OAuth,提前了解下,下周再原创一篇对 OAuth 的理解总结。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
ARTS 第十六周(2019.7.15~2019.7.21)
Algorithm 实现strStr()
题目:
实现strStr()
代码
思路:
见注释。
对比:
与高分对比:
本代码运行 74 个测试用例花费约 68ms,平均一个测试用例约 0.9ms;
高分代码运行 74 个测试用例花费约 68ms,平均一个测试用例约 0.9ms。
附最高分代码:
我们的代码就是手动实现了原生的
indexOf
函数的这种功能。Review Yarn PnP 助你摆脱 node_modules
阅读:
How to get rid of node_modules with Yarn Plug’n’Play
点评:
node_moduels 三大罪状:
用 yarn 来替代 npm 作为模块管理器,优化了下载模式,使得 yarn install 速度远高于 npm install
但是 yarn 还是继承了 npm 的 node_module 的三个问题,根本原因在于 yarn 没有抛弃 node_modules
现在,从 yarn 1.12 版本开始,就可以启用 yarn 的 pnp 特性,来彻底摆脱 node_modules 文件夹
说来也很简单,就是用 yarn 的缓存文件夹代替 node_modules 文件夹就好了,
这样不同项目的依赖就可以共用,而且其它项目安装过的依赖本项目就可以不用安装
而且当我们需要调试依赖时,也就是修改本项目依赖模块中的代码(但是不想影响其它项目的使用),
还可以使用
yarn unplug packageName
来将某个指定依赖拷贝到项目中的.pnp/unplugged
目录下,之后
.pnp.js
中的 resolver 就会自动加载这个 unplug 的版本,调试完毕后,再执行
yarn unplug --clear packageName
可移除本地 .pnp/unplugged 中的对应依赖。风险: yarn pnp 直接删除了 node_modules 可能导致某些依赖这个文件夹的第三方模块工作异常。
yarn pnp 还是个新特性,甚至是实验性质的,因此慎用。
另外还参考了:
Tips
Tip1 解决 electron 安装卡在 node install.js
原因:下载 electron 相关包速度太慢,甚至慢到拉取不到(甚至翻墙也没用)
解决方法就是更换 electron 包的镜像源:在
~/.npmrc
中添加一行:electron_mirror="https://npm.taobao.org/mirrors/electron/"
注意:如果要用 sudo,则应修改
/root/.npmrc
参考:eletron安装卡在 node install.js
Tip2 pm2 在 start 之前应先 delete
否则一些在 start 中指定的参数就不会生效。
Share [他]理解OAuth 2.0
本周原创停更一回,分享一篇他山之玉 理解OAuth 2.0
我们的项目以后可能会用到 OAuth,提前了解下,下周再原创一篇对 OAuth 的理解总结。
The text was updated successfully, but these errors were encountered: