又到了愉快的周赛时刻啦,这周前两道题出奇的简单的,但后两道出奇的难,我就只做出来了前两道摸摸鱼,重在参与嘛。
第一题
Leetcode 链接:5697. 检查二进制字符串字段(easy)
题目描述
给你一个二进制字符串 s ,该字符串 不含前导零。
如果 s 最多包含 一个由连续的 '1' 组成的字段 ,返回 true。否则,返回 false。
示例:
输入:s = "1001"
输出:false
解释:字符串中的 1 没有形成一个连续字段。
输入:s = "110"
输出:true
提示:
- 1 <= s.length <= 100
- s[i] 为 '0' 或 '1'
- s[0] 为 '1'
JavaScript 模板:
/**
* @param {string} s
* @return {boolean}
*/
var checkOnesSegment = function(s) {
};
思路分析
以 '0' 分割输入字符串,然后判断其中的连续的 1 的元素数量等不等于 1 即可。
时间复杂度为 O(n) 空间复杂度为 O(n)
var checkOnesSegment = function (s) {
return s.split("0").filter(el => el.length > 0).length === 1;
};
第二题
Leetcode 链接:5698. 构成特定和需要添加的最少元素(medium)
题目描述
给你一个整数数组 nums,和两个整数 limit 与 goal。数组 nums 有一条重要属性:abs(nums[i]) <= limit。
返回使数组元素总和等于 goal 所需要向数组中添加的最少元素数量 ,添加元素不应改变数组中 abs(nums[i]) <= limit 这一属性。
注意,如果 x >= 0,那么 abs(x) 等于 x;否则,等于 -x。
示例:
输入:nums = [1,-1,1], limit = 3, goal = -4
输出:2
解释:可以将 -2 和 -3 添加到数组中,数组的元素总和变为 1 - 1 + 1 - 2 - 3 = -4 。
输入:nums = [1,-10,9,1], limit = 100, goal = 0
输出:1
提示:
- 1 <= nums.length <= 105
- 1 <= limit <= 106
- limit <= nums[i] <= limit
- 109 <= goal <= 109
JavaScript 模板:
/**
* @param {number[]} nums
* @param {number} limit
* @param {number} goal
* @return {number}
*/
var minElements = function(nums, limit, goal) {
};
思路分析
求出数组总和和和目标 goal 的差值的绝对值,然后除于 limit 即可。
时间复杂度为 O(n) 空间复杂度为 O(n)
var minElements = function (nums, limit, goal) {
return Math.ceil(Math.abs(goal - nums.reduce((a, b) => a + b)) / limit);
};
总结一下
-
小伙伴们一起来用 JavaScript 刷算法吧:LeetCode-JavaScript
-
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情