LeetCode 周赛 231,冲!|刷题打卡

111 阅读1分钟

又到了愉快的周赛时刻啦,这周前两道题出奇的简单的,但后两道出奇的难,我就只做出来了前两道摸摸鱼,重在参与嘛。

第一题

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);
};

总结一下