广州网站设计公司济南兴田德润o简介图片,网站开发网站设计素材,中国有色金属建设协会网站,免费的ai作图软件525. 连续数组 M
:::details
给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组#xff0c;并返回该子数组的长度。
示例 1:
输入: nums [0,1]
输出: 2
说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。示例 2:
输入: nums [0,1,0]
输出: …525. 连续数组 M
:::details
给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组并返回该子数组的长度。
示例 1:
输入: nums [0,1]
输出: 2
说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。示例 2:
输入: nums [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。提示
1 nums.length 105nums[i] 不是 0 就是 1
解题思路 因为只会出现0或1求相同数量的最长连续子数组所以为了方便我们把0定义为-1当前缀和等于0时说明当前子数组的01相等。 func findMaxLength(nums []int) (maxLength int) {n : len(nums)/**记录前缀和出现的下标*/hash : map[int]int{0: -1}k : 0for i : 0; i n; i {if nums[i] 0 {k--} else {k}if prevIndex, ok : hash[k]; ok {maxLength max(maxLength, i-prevIndex)} else {hash[k] i}}return maxLength
}func max(a, b int) int {if a b {return a}return b
}:::
523. 连续的子数组和 - 力扣LeetCodeM
:::details
给你一个整数数组 nums 和一个整数 k 编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组
子数组大小 至少为 2 且 子数组元素总和为 k 的倍数。 如果存在返回 true 否则返回 false 。
如果存在一个整数 n 令整数 x 符合 x n * k 则称 x 是 k 的一个倍数。0 始终视为 k 的一个倍数。
示例 1
输入nums [23,2,4,6,7], k 6 输出true 解释[2,4] 是一个大小为 2 的子数组并且和为 6 。 示例 2
输入nums [23,2,6,4,7], k 6 输出true 解释[23, 2, 6, 4, 7] 是大小为 5 的子数组并且和为 42 。 42 是 6 的倍数因为 42 7 * 6 且 7 是一个整数。 示例 3
输入nums [23,2,6,4,7], k 13 输出false
提示
1 nums.length 105 0 nums[i] 109 0 sum(nums[i]) 231 - 1 1 k 231 - 1
来源力扣LeetCode 链接https://leetcode.cn/problems/continuous-subarray-sum 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
解题思路 因为题目要求的是子数组元素总和是k的倍数也就是说需要取模运算。 所以在求前缀和的时候直接求余数当出现相同余数的时候说明当前子数组的前缀和符合倍数要求然后判断子数组长度如果符合条件则直接返回。 func checkSubarraySum(nums []int, k int) bool {n : len(nums)if n 2 {return false}/**规定空的前缀的结束下标为 -1由于空的前缀的元素和为 0因此在哈希表中存入键值对 (0,-1)。*/prevSum : map[int]int{0: -1}remainder : 0for i, num : range nums {remainder (remainder num) % kif prevIndex, ok : prevSum[remainder]; ok {if i-prevIndex 2 {return true}} else {prevSum[remainder] i}}return false}:::