当前位置: 首页 > news >正文

网站开发算前端吗seo优化百度技术排名教程

网站开发算前端吗,seo优化百度技术排名教程,金花站长工具,上海做app开发公司好的!我们来详细分析 LeetCode 1497. 检查数组对是否可以被 k 整除 这道题的解法和思路。 题目: https://leetcode.cn/problems/check-if-array-pairs-are-divisible-by-k/description/ 题目分析 问题描述: 给定一个整数数组 arr 和一个整数 k&#x…

好的!我们来详细分析 LeetCode 1497. 检查数组对是否可以被 k 整除 这道题的解法和思路。

题目: https://leetcode.cn/problems/check-if-array-pairs-are-divisible-by-k/description/

题目分析

问题描述
给定一个整数数组 arr 和一个整数 k,判断数组中的元素是否可以分成若干对,使得每对元素的和都能被 k 整除。

示例
输入:arr = [1, 2, 3, 4, 5, 10, 6, 7, 8, 9], k = 5
输出:true
解释:可以分成如下五对:(1, 9), (2, 8), (3, 7), (4, 6), (5, 10),每对的和都是 10,能被 5 整除。

核心思路

  1. 余数分解:将每个元素 numk 取余,得到余数 r = num % k
  2. 互补余数:对于每个余数 r,其互补余数为 (k - r) % k
  3. 哈希表统计:使用哈希表统计每个余数的出现次数,检查余数 r 和互补余数 (k - r) % k 的次数是否匹配。

解法步骤

  1. 预处理余数:遍历数组,计算每个元素的余数 r,并将余数 r 的计数加 1。
  2. 检查余数对
    • 余数 0:出现次数必须为偶数,否则无法配对。
    • 其他余数:余数 r 的次数必须等于互补余数 (k - r) % k 的次数。

代码实现

class Solution {
public:bool canArrange(vector<int>& arr, int k) {vector<int> remainderCount(k, 0);// 统计每个余数的出现次数for (int num : arr) {int r = (num % k + k) % k;  // 处理负数余数,确保结果在 [0, k-1] 范围内remainderCount[r]++;}// 检查余数0的次数是否为偶数if (remainderCount[0] % 2 != 0) {return false;}// 检查其他余数 i 和 k-i 的次数是否匹配for (int i = 1; i <= k/2; i++) {if (i == k - i) {  // 当 k 为偶数且 i 是 k/2 时if (remainderCount[i] % 2 != 0) {return false;}} else {if (remainderCount[i] != remainderCount[k - i]) {return false;}}}return true;}
};

详细解释

  1. 余数预处理

    • 使用 (num % k + k) % k 确保负数余数正确转换为正数(例如,-3 % 5 转换为 2)。
  2. 余数 0 的处理

    • 余数为 0 的元素必须两两配对,因此其出现次数必须为偶数。
  3. 互补余数的处理

    • 对于每个余数 i(1 ≤ i ≤ k/2),其互补余数为 k - i
    • k 为偶数且 i = k/2 时,余数 i 必须自身配对,因此其出现次数必须为偶数。

示例验证

输入:arr = [1, 2, 3, 4], k = 5
步骤如下:

  1. 计算余数

    • 1 % 5 = 1, 2 % 5 = 2, 3 % 5 = 3, 4 % 5 = 4
    • 余数计数:remainderCount = [0, 1, 1, 1, 1]
  2. 检查余数对

    • 余数 0:次数为 0,符合条件。
    • 余数 1 和 4:次数均为 1,匹配。
    • 余数 2 和 3:次数均为 1,匹配。

输出:true(可以配对为 (1, 4)(2, 3))。

复杂度分析

  • 时间复杂度:O(n + k),其中 n 是数组长度,k 是给定的除数。
  • 空间复杂度:O(k),主要用于存储余数的计数。

总结

通过余数分解和互补余数的配对检查,我们可以高效地判断数组是否能被分成若干对,使得每对的和都能被 k 整除。这种方法利用了模运算的性质,将问题转化为余数的匹配问题,时间复杂度为线性级。

这行代码检查的是当 k 为偶数且 i 恰好是 k/2 时,余数为 i 的元素数量必须是偶数。这是因为当 i = k/2 时,其互补余数仍然是 i 自身,因此这些元素必须两两配对。

补充:详细解释条件判断

  • 代码: if (i == k - i) // 当 k 为偶数且 i 是 k/2 时

k 为偶数时,存在一个特殊的余数 i = k/2(例如,当 k=4 时,i=2)。此时:

  1. 余数 i 的互补性
    余数 i 的互补余数是 (k - i) % k。当 i = k/2 时,k - i = k/2,因此互补余数仍然是 i

    • 示例:若 k=4,余数 2 的互补余数是 4-2=2
  2. 配对规则
    余数为 i 的元素只能与同样余数为 i 的元素配对。因此,余数为 i 的元素数量必须是偶数,否则无法完全配对。

    • 示例:若余数 2 出现了 3 次(奇数),则必然有一个元素无法配对,导致无法满足条件。

代码逻辑验证

在代码中,当 i == k - i 时(即 ik/2),检查 remainderCount[i] 是否为偶数:

if (i == k - i) {  // 当 k 为偶数且 i 是 k/2 时if (remainderCount[i] % 2 != 0) {  // 若余数为 i 的元素数量为奇数return false;  // 无法两两配对,返回 false}
}

示例验证

假设 k=4,数组为 [2, 2, 2, 6],余数统计为:

  • 余数 2 出现了 3 次(元素 2, 2, 6)。
  • 互补余数检查时,i=2 的互补余数仍为 2,但 3 % 2 != 0,因此无法配对,返回 false

总结

k 为偶数时,余数 k/2 的元素必须两两配对,因此其数量必须为偶数。这是代码中检查 remainderCount[i] % 2 != 0 的核心原因。

http://www.dtcms.com/a/589646.html

相关文章:

  • 64.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--预算报表
  • 永久免费白嫖多个域名,一键托管Cloudflare,免费申请SSL加密证书,轻松建站、搭建线路伪装
  • RT thread 的看门狗框架分析
  • 分销商城网站开发证书兼职的人才网站
  • 11.9 脚本网页 消消乐
  • Spring AI Alibaba 1.x 源码分析-架构设计
  • 有哪些做海岛的网站上海网站建设排名公司哪家好
  • 太原市建设局网站网站建设经验典型
  • AIGC(生成式AI)试用 40 -- 程序(Python + OCR)-2
  • 3.Python基础:函数
  • 中山市西区建设局网站wordpress 获取导航
  • RHCSA笔记1
  • 用户按下字符键后的vk键状态是win32k!xxxSkipSysMsg函数里面的win32k!UpdateKeyState函数设置的====非常重要
  • Zynq-7000嵌入式开发100问全解析解答共十万字回答,适用入门嵌入式软件初级工程师,筑牢基础,技术积累,校招面试。
  • 有没有专门做化妆品小样的网站国内的有什么好wordpress主题
  • 帝国cms 网站搬家python编程课哪个机构最好
  • 响应式网站代码规范河南省工程建设信息网官网入口
  • 做网站 分工深圳软件开发工作室
  • 一周学习总结
  • 长沙品牌网站设计做网站app要注册哪类商标
  • 【AIGC面试面经第五期】AI绘画-AI绘画框架相关问答
  • 音乐网站设计外国手做网站
  • 网站有什么采集网站后台数据
  • Linux33 网络编程-多线程TCP并发
  • Tomcat和负载均衡
  • 【算力】AI万卡GPU集群交付确认项与日常运维(算力压测、数据倒腾、日常运维)
  • 网站建设 东八区学校网站建设的意义的主要负责人
  • 网站开发招商计划书c 网站开发框架有
  • 成都企业网站开发网站主页设计费用
  • 数据结构——四十、折半查找(王道408)