485. 最大连续 1 的个数
思路
双指针遍历找到当前连续的长度,并保存最大值
代码
/*** @param {number[]} nums* @return {number}*/var findMaxConsecutiveOnes = function(nums) {let l = 0, r = 0, ret = 0;const len = nums.lengthwhile(r < len) {if (!nums[r]) {l = r + 1;r++;} else {r++;ret = Math.max(ret, r - l)}}return ret;};
复杂度分析
时间复杂度 #card=math&code=O%28N%29)
空间复杂度 #card=math&code=O%281%29)
495. 提莫攻击
思路
双指针,每次改变当前的持续时间范围,找到最新可持续时间
代码
/*** @param {number[]} timeSeries* @param {number} duration* @return {number}*/var findPoisonedDuration = function(timeSeries, duration) {let start = 0, end = 0, count = 0;for(let i = 0; i < timeSeries.length; i ++) {let cur = timeSeries[i], curEnd = cur + duration;if (cur > end) {start = cur;end = curEnd;count += duration} else {start = end;end = curEnd;count += end - start;}}return count;};
复杂度分析
时间复杂度 #card=math&code=O%28N%29)
空间复杂度 #card=math&code=O%281%29)
414. 第三大的数
思路
遍历比大小
代码
/*** @param {number[]} nums* @return {number}*/var thirdMax = function(nums) {let min = Number.MIN_SAFE_INTEGER, mid = Number.MIN_SAFE_INTEGER, max = Number.MIN_SAFE_INTEGER, len = nums.lengthfor(let i = 0; i < len; i ++) {let cur = nums[i];if (cur < min) continue;if (cur > max) {min = mid;mid = max;max = cur;} else if (cur > mid && cur < max) {min = mid;mid = cur;} else if (cur > min && cur < mid) {min = cur;}}return (len >= 3 && min != Number.MIN_SAFE_INTEGER) ? min : max;};
复杂度分析
时间复杂度 #card=math&code=O%28N%29)
空间复杂度 #card=math&code=O%281%29)
628. 三个数的最大乘积
思路
先排序。然后考虑有负数和都为正的情况。
代码
/*** @param {number[]} nums* @return {number}*/var maximumProduct = function(nums) {nums = nums.sort((a, b) => a - b)let len = nums.lengthreturn Math.max(nums[0] * nums[1] * nums[len-1], nums[len-3]*nums[len-2]*nums[len-1])};
复杂度分析
时间复杂度 #card=math&code=O%28nlogN%29)
空间复杂度 #card=math&code=O%281%29)
