ARTS Week 5

Algorithm 本周的算法题为 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 **说明:**你不能倾斜容器。 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。 实现代码如下: var maxArea = function (height) { let left = 0; let right = height.length - 1; let area = 0; while (left < right) { let currentArea = Math.min(height[left], height[right]) * (right - left); area = Math.max(area, currentArea); if (height[left] < height[right]) { left++; } else { right--; } } return area; }; 解题思路:...

2023-11-25 · 1 分钟 · 152 字

ARTS Week 4

Algorithm 本周的算法题为 283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0] 实现代码如下: var moveZeroes = function(nums) { // 记录数组中存在0的个数 let count = 0 // 使用递归的方式,遍历删除数组中的0,并且记录数组中出现0的次数。 deleteZeroes(nums) function deleteZeroes(nums) { for (let i = 0; i < nums.length; i++) { if (nums[i] == 0) { nums.splice(i, 1) count++ return deleteZeroes(nums) } } return nums } // 根据数组中出现0的次数,将删除全部0后的数据,在尾部添加count次0元素。 for (let i = 0; i < count; i++) { nums....

2023-11-12 · 1 分钟 · 129 字

ARTS Week 3

Algorithm 本周的算法题为 128. 最长连续序列 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums = [100,4,200,1,3,2] 输出:4 解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。 实现代码如下: var longestConsecutive = function (nums) { // 如果数组为空,则值为0,否则最小为1 let sequenceMaxValue = nums.length == 0 ? 0 : 1 let category = {} // 去重,使用对象key唯一性的特性实现数组去重。 nums.forEach(item => { if (category[item]) { category[item].push(item) } else { category[item] = [item] } }) let result = [] // 获取最终的去重后的数组 for (const key in category) { if (Object....

2023-11-08 · 2 分钟 · 247 字

ARTS Week 2

Algorithm 本周的算法题为 49. 字母异位词分组 - 力扣(LeetCode) 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]] 实现代码如下所示: let strs = ["eat", "tea", "tan", "ate", "nat", "bat"] var groupAnagrams = function (strs) { let sortedStrs = [] strs.forEach(str => { let sortedStr = str.split("").sort().join(""); sortedStrs.push(sortedStr) }) let categories = {} sortedStrs.forEach((str, index) => { if (categories[str]) { categories[str].push(strs[index]) } else { categories[str] = [strs[index]] } }) let result = [] for (const key in categories) { result....

2023-10-29 · 1 分钟 · 209 字

关于ARTS

ARTS是陈皓在课程《左耳听风》中提出的原创概念,以周为单位,循环反复的学习活动。 Algorithm: 在 LeetCode 上做一道算法题,这一步主要是为了编程的训练和学习,如果不训练,看再多的书籍也是没有用的。 Review: 读一篇英文文章,主要是为了训练英文,英文能力不行,无法成为技术高手。 Tips: 分享一个小技术,可以总结和归纳日常生活中的知识点。 Share: 分享一个观点,为了让你建立影响力,能够输出价值观。

2023-10-08 · 1 分钟 · 11 字