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
题目 旋转链表(中等难度)
代码
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @param {number} k * @return {ListNode} */ var rotateRight = function(head, k) { // 不旋转 或 空节点 或 单节点,则直接返回 if (!k || !head || !head.next) return head; // 链表长度(初始假定值) let len = k; // 第二指针 let second = head; // 先移动第二指针 k 次 while (k--) { second = second.next; // 如果移动到了 null 节点 if (!second) { // 重新计算 k len -= k; k = k % len; // 如果 k !== 0 则从头移动 if (k) { second = head; } // 如果 k === 0 则直接返回头节点(因为无需移动) else { return head; } } } // 如果出了上一个循环而没有直接返回 // 则设置第一指针 let first = head; // 然后移动双指针 while (true) { if (second.next) { first = first.next; second = second.next; } // 如果第二指针的下一个节点为 null else { // 此时 // 第一指针的下一个节点作为新的头节点 let newHead = first.next; // 第一指针的节点作为新的尾节点 first.next = null; // 第二指针的下一个节点设为原来的头节点 second.next = head; // 完成旋转 return newHead; } } };
执行结果:通过 执行用时:64 ms,在所有 javascript 提交中击败了 99.45% 的用户 内存消耗:35.5 MB,在所有 javascript 提交中击败了 36.90% 的用户
思路: 使用递归,详见注释: // 不旋转 或 空节点 或 单节点,则直接返回 // 链表长度(初始假定值) // 第二指针 // 先移动第二指针 k 次 // 如果移动到了 null 节点 // 重新计算 k // 如果 k !== 0 则从头移动 // 如果 k === 0 则直接返回头节点(因为无需移动) // 如果出了上一个循环而没有直接返回 // 则设置第一指针 // 然后移动双指针 // 如果第二指针的下一个节点为 null,此时 // 第一指针的下一个节点作为新的头节点 // 第一指针的节点作为新的尾节点 // 第二指针的下一个节点设为原来的头节点 // 完成旋转
对比: 与高分对比: 本代码运行 231 个测试用例花费约 64ms,平均一个测试用例约 0.28ms; 高分代码运行 231 个测试用例花费约 64ms,平均一个测试用例约 0.28ms。 思路一致代码略。
阅读: Developer Tools to Increase Your Productivity
点评: 本文推荐了几款提升效率的在线工具:
在运行 Docker 容器时,我们可能有这样一种排除法做数据卷映射的需求,如:
/path/to/container/appFolder
/path/to/host/appFolder
/path/to/container/appFolder/node_modules
node_modules
此时可以直接将映射的左边写为该数据卷的名称(而非路径)即可,如:
docker run -it \ -v /path/to/host/appFolder:/path/to/container/appFolder \ -v node_modules:/path/to/container/appFolder/node_modules \ --name $容器名称 $镜像名称 $命令
分享一篇极客专栏《数据结构与算法之美》 01 | 为什么要学习数据结构和算法
课后思考 你为什么要学习数据结构和算法呢?在过去的软件开发中,数据结构和算法在哪些地方帮到了你? : 因为数据结构和算法是程序开发的基本功。
基本功没练好就能开发出好的程序,那是假象
——我们以为使用封装好的框架和工具写出能运行和满足业务需求的程序就是高手了, 却往往忽略了性能的重要性。
因此作为一个程序开发者,不论当前的工作是应届毕业生,还是业务工程师,或是业务架构师, 都应该学好数据结构与算法,用好数据结构与算法,才能使自己的代码更优秀,从而自己的水平也能更高更有竞争力。
在工作中,时间复杂度和空间复杂度的分析往往能让我写出的代码区别于其它随性暴力的遍历代码,运行更省时。 虽然公司也没有对这方面的评价,但是只有保持力求上进的精神,才能使自己立于不败之地。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
ARTS 第二十二周(2019.11.25~2019.12.01)
Algorithm 旋转链表(中等难度)
题目
旋转链表(中等难度)
代码
执行结果:通过
执行用时:64 ms,在所有 javascript 提交中击败了 99.45% 的用户
内存消耗:35.5 MB,在所有 javascript 提交中击败了 36.90% 的用户
思路:
使用递归,详见注释:
// 不旋转 或 空节点 或 单节点,则直接返回
// 链表长度(初始假定值)
// 第二指针
// 先移动第二指针 k 次
// 如果移动到了 null 节点
// 重新计算 k
// 如果 k !== 0 则从头移动
// 如果 k === 0 则直接返回头节点(因为无需移动)
// 如果出了上一个循环而没有直接返回
// 则设置第一指针
// 然后移动双指针
// 如果第二指针的下一个节点为 null,此时
// 第一指针的下一个节点作为新的头节点
// 第一指针的节点作为新的尾节点
// 第二指针的下一个节点设为原来的头节点
// 完成旋转
对比:
与高分对比:
本代码运行 231 个测试用例花费约 64ms,平均一个测试用例约 0.28ms;
高分代码运行 231 个测试用例花费约 64ms,平均一个测试用例约 0.28ms。
思路一致代码略。
Review 推荐几款提升开发效率的在线工具
阅读:
Developer Tools to Increase Your Productivity
点评:
本文推荐了几款提升效率的在线工具:
:通过 Web-API 名称搜索其在不同平台上的可用性,以及相关资料如规范等
:对压缩过的代码进行反压缩,提高可读性
:平均压缩率 50% 以上,且肉眼看不出区别
:目前只支持 AWS,付费
:支持部署各种语言的开发环境,并且直接安装和使用所需的依赖包或库,而无需下载
:提供一个地址,当客户端向这个地址发送请求时,可以对其进行观察或启动一个工作流
:输入需求自动生成 Web 开发相关代码如 HTML CSS JSON 等并提供预览
:输入 npm 包名,计算其原始与打包后的大小,以及不同网络环境中的预计下载时间
:一行代码生成浏览器指纹,所谓浏览器指纹,是一种用来区别不同用户浏览器的唯一编码
:参考 Browser Fingerprinting - What Is It and What Should You Do About It?
Tip 排除法做 Docker 容器数据卷映射
在运行 Docker 容器时,我们可能有这样一种排除法做数据卷映射的需求,如:
/path/to/container/appFolder
映射到宿主机/path/to/host/appFolder
/path/to/container/appFolder/node_modules
不做映射(因为
node_modules
映射到宿主机,要么会出现意想不到的问题,要么需要重新安装)此时可以直接将映射的左边写为该数据卷的名称(而非路径)即可,如:
Share [极客专栏:数据结构与算法之美] 01 | 为什么要学习数据结构和算法
分享一篇极客专栏《数据结构与算法之美》
01 | 为什么要学习数据结构和算法
课后思考
你为什么要学习数据结构和算法呢?在过去的软件开发中,数据结构和算法在哪些地方帮到了你?
:
因为数据结构和算法是程序开发的基本功。
基本功没练好就能开发出好的程序,那是假象
——我们以为使用封装好的框架和工具写出能运行和满足业务需求的程序就是高手了,
却往往忽略了性能的重要性。
因此作为一个程序开发者,不论当前的工作是应届毕业生,还是业务工程师,或是业务架构师,
都应该学好数据结构与算法,用好数据结构与算法,才能使自己的代码更优秀,从而自己的水平也能更高更有竞争力。
在工作中,时间复杂度和空间复杂度的分析往往能让我写出的代码区别于其它随性暴力的遍历代码,运行更省时。
虽然公司也没有对这方面的评价,但是只有保持力求上进的精神,才能使自己立于不败之地。
The text was updated successfully, but these errors were encountered: