Leetcode 698-划分为k个相等的子集
给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。
示例 1:
输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4
输出: True
说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。
示例 2:
输入: nums = [1,2,3,4], k = 3
输出: false
提示:
1 <= k <= len(nums) <= 16
0 < nums[i] < 10000
每个元素的频率在 [1,4] 范围内
题解(回溯法)
题解参考自LFool
把集合中数字想象成球,把子集想象成桶
遍历数组计算总和sum,如果sum%k!=0直接返回false
否则令target=sum/k,计算每个桶内球的值之和是否等于sum/k
法一、球选择桶

dfs(nums,target,idx,bucket)
- 递归终止:idx越界,已经处理完所有球(idx==nums.length)
- 本层操作:bucket[i]+=nums[idx];
剪枝:nums[idx]+bucket[i]>target - 向下递归:如果有一个路径为true则返回true
if(dfs(nums,idx+1,bucket,k,target)) return true; - 回溯:
bucket[i]-=nums[idx]
class Solution {public boolean canPartitionKSubsets(int[] nums, int k) {int sum = 0;for (int i = 0; i < nums.length; i++) sum += nums[i];if (sum % k != 0) return false;int target = sum / k;int[] bucket = new int[k];return dfs(nums,0,bucket,k,target);}private boolean dfs(int[] nums, int idx, int[] bucket, int k, int target){// 递归终止:idx越过数组边界,此时已经处理完所有球if (idx == nums.length) {// 判断现在桶中的球是否符合要求 -> 路径是否满足要求for (int i = 0; i < k; i++) {if (bucket[i] != target) return false;}return true;}//遍历所有桶寻找当前球可以放置的位置for(int i=0;i<k;i++){if(nums[idx]+bucket[i]>target) continue;//本层操作bucket[i]+=nums[idx];//向下递归:如果有一个路径为true则返回trueif(dfs(nums,idx+1,bucket,k,target)) return true;//回溯bucket[i]-=nums[idx];}return false;}
}
法二 桶选择球
class Solution {public boolean canPartitionKSubsets(int[] nums, int k) {int sum = 0;for (int i = 0; i < nums.length; i++) sum += nums[i];if (sum % k != 0) return false;int target = sum / k;int[] bucket = new int[k];return dfs(nums,0,bucket,k,target);}private boolean dfs(int[] nums, int idx, int[] bucket, int k, int target){// 递归终止:idx越过数组边界,此时已经处理完所有球if (idx == nums.length) {// 判断现在桶中的球是否符合要求 -> 路径是否满足要求for (int i = 0; i < k; i++) {if (bucket[i] != target) return false;}return true;}//遍历所有桶寻找当前球可以放置的位置for(int i=0;i<k;i++){if(nums[idx]+bucket[i]>target) continue;//本层操作bucket[i]+=nums[idx];//向下递归:如果有一个路径为true则返回trueif(dfs(nums,idx+1,bucket,k,target)) return true;//回溯bucket[i]-=nums[idx];}return false;}
}
收起相关文章:
Leetcode 698-划分为k个相等的子集
给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。 示例 1: 输入: nums [4, 3, 2, 3, 5, 2, 1], k 4 输出: True 说明: 有可能将其分成 4 个子集&#…...
Word 小黑第2套
对应大猫42 Word1 从文件中导入新样式 样式组 -管理样式 -导入导出 -关闭Normal文件 -打开文件 -修改文件 -选中所需 -复制 调整字符宽度 调整字符间距 -字体组 加宽 适当修改磅值 文字效果通过文字组修改 另起一页,分隔符(布局 -分隔符 -分节符 -下一…...
【最后203篇系列】014 AI机器人-1
说明 终于开张了,我觉得AI机器人是一件真正正确,具有商业价值的事。 把AI机器人当成一笔生意,我如何做好这笔生意?一端是业务价值,另一端是技术支撑。如何构造高质量的内容和服务,如何确保技术的广度和深度…...
沉浸式CSS学习路径
好的!我将以魔法学院成长故事为框架,为您设计一套沉浸式CSS学习路径。以下是叙事化学习提纲: 第一卷:像素学徒的觉醒 章节1:被封印的魔法书 发现HTML的"素颜"本质,通过<!DOCTYPE html>解除网页封印用style标签打开CSS魔法书,学会给文字穿上color斗篷和…...
ctfshow做题笔记—栈溢出—pwn69~pwn72
目录 前言 一、pwn69(可以尝试用ORW读flag flag文件位置为/ctfshow_flag) 二、pwn70(可以开始你的个人秀了 flag文件位置为/flag) 三、pwn71(32位的ret2syscall) 四、pwn72 前言 学了一些新的东西,pwn69的文档忘保存了(悲),…...
重要!!! 改进 梯度方差(Fisher 信息近似) 指数移动平均
改进 梯度方差(Fisher 信息近似) 指数移动平均 目录 改进 梯度方差(Fisher 信息近似) 指数移动平均1. 指数移动平均(Exponential Moving Average, EMA)2. 引入正则化项3. 分簇加权计算一、指数移动平均(EMA)概述二、EMA 公式参数作用三、举例说明场景 1:股票价格波动分…...
同盾v2 2025版 blackbox , wasm加解密,逆向协议算法生成,小盾安全
声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! # 欢迎交流 wjxch1004...
c++领域展开第十六幕——STL(vector容器的了解以及模拟实现、迭代器失效问题)超详细!!!!
文章目录 前言一、vector的介绍和使用1.1 vector的介绍1.2 vector的使用1.2.1 vector的定义1.2.2 vector iterator 的使用1.2.3 vector的空间增长问题1.2.4 vector的增删改查 二、vector在 oj 中的使用只出现一次的数删除有序数组中的重复项杨辉三角 总结 前言 在c专栏的上一篇…...
ubuntu2404 安装 过程中 手动设置网络
ubuntu2404 安装 过程中 手动设置网络 https://blog.csdn.net/2401_83947353/article/details/138454379 6.1 可以直接Done(不配置P) 6.2 可以配置ip地址,选择manual 6.2.1 search domains填 6.2.2 search domains不填 6.3 更深层次的…...
去北京的前端实习经历
趁现在对这部分还有深刻的感受记忆,赶紧记录下来。因为工作久了会发现真的对以前的事记不起来了。 公司: 北京的实习公司首先有学长学姐在,而且这个公司知名度还挺高的,但是工资比较低,3k左右吧,但是管2顿…...
QT创建项目(项目模板、构建系统、选择类、构建套件)
1. 项目模版 项目类型界面技术适用场景核心依赖模块开发语言Qt Widget ApplicationC Widgets传统桌面应用(复杂控件)Qt WidgetsCQt Console Application无 GUI命令行工具、服务Qt CoreCQt Quick ApplicationQML/Quick现代跨平台应用(动画/触…...
力扣热题 100:动态规划专题经典题解析
系列文章目录 力扣热题 100:哈希专题三道题详细解析(JAVA) 力扣热题 100:双指针专题四道题详细解析(JAVA) 力扣热题 100:滑动窗口专题两道题详细解析(JAVA) 力扣热题 100:子串专题三道题详细解析(JAVA) 力…...
变量赋值汇编
一、核心概念 寄存器:CPU内部的高速存储单元(如EAX、EBX、x86中的RAX、ARM中的R0等) 内存地址:变量存储在内存中的位置(如 0x1000) 指令:操作寄存器和内存的命令(如 MOV, STR, LDR…...
页面白屏出现的原因
🤖 作者简介:水煮白菜王,一位前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&#…...
【大模型统一集成项目】让 AI 聊天更丝滑:WebSocket 实现流式对话!
🌟 在这系列文章中,我们将一起探索如何搭建一个支持大模型集成项目 NexLM 的开发过程,从 架构设计 到 代码实战,逐步搭建一个支持 多种大模型(GPT-4、DeepSeek 等) 的 一站式大模型集成与管理平台ÿ…...
boarding_passes(登机牌)表的作用
boarding_passes(登机牌)表的作用 boarding_passes 这张表的主要作用是记录旅客的登机信息,包括: 票号 (ticket_no) - 关联到 tickets 表,表示这张票属于哪个旅客。航班 ID (flight_id) - 关联到 flights 表…...
【2025】Electron Git Desktop 实战一(上)(架构及首页设计开发)
源代码仓库: Github仓库【electron_git】 Commit : bb40040 Github Desktop 页面分析 本节目标: 1、实现类似Github Desktop的「空仓库」提示页 2、添加本地仓库逻辑编写从 Github Desktop 我们看到 他的 主要页面分为三个区域 Head头部区域…...
14 | fastgo 三层架构设计
提示: 所有体系课见专栏:Go 项目开发极速入门实战课; 在实现业务代码之前,还需要先设计一个合理的软件架构。一个好的软件架构不仅可以大大提高项目的迭代速度,还可以降低项目的阅读和维护难度。目前,行业中…...
【机器学习-基础知识】统计和贝叶斯推断
1. 概率论基本概念回顾 1. 概率分布 定义: 概率分布(Probability Distribution)指的是随机变量所有可能取值及其对应概率的集合。它描述了一个随机变量可能取的所有值以及每个值被取到的概率。 对于离散型随机变量,使用概率质量函数来描述。对于连续型随机变量,使用概率…...
面向对象Demo01
面向对象 什么是面向对象 回顾方法的定义 package oop; import java.io.IOException; public class Demo01 {public static void main(String[] args) {}//public String sayHello() {return "hello, world!";}public void sayHi() {return;}public int max(i…...
C++设计模式-抽象工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析
一、模式基本概念 1.1 定义与核心思想 抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的集大成者,它通过提供统一的接口来创建多个相互关联或依赖的对象族,而无需指定具体类。其核心思想体现在两个维度: …...
solana区块链地址生成
solana官网地址:https://solana.com 先引入相关依赖solana/web3.js;bip39;ethereumjs/wallet 生成助记词 const mnemonic bip39.generateMnemonic(); 生成种子 const seed bip39.mnemonicToSeedSync(mnemonic); 生成密钥对 const root hdkey.EthereumHDKey.from…...
基于python的升级队列加速决策
a-f大等级是3级 a-c建筑每升1级分别需要8天 d-f建筑每升1级分别需要10天 目前以下建筑队列正在从0级升至1级 建筑A升级需要7天05:16:20 建筑b升级需要06:06:54 建筑c升级需要00:37:00 建筑d升级需要…...
Ragflow技术栈分析及二次开发指南
Ragflow是目前团队化部署大模型+RAG的优质方案,不过其仍不适合直接部署使用,本文将从实际使用的角度,对其进行二次开发。 1. Ragflow 存在问题 Ragflow 开源仓库地址:https://github.com/infiniflow/ragflow Ragflow 当前版本: v0.17.0 Ragflow 目前主要存在以下问题: …...
vue上传文件的请求头携带token校验、和携带另外的参数请求
拿element plus UI库举例,(不使用element plus的话js方法通用): <template><el-upload class"upload-demo":http-request"myUploadHttp" action"https://run.mocky.io/v3/9d059bf9-4660-45f2-…...
MySQL的 where 1=1会不会影响性能?
在MySQL中,WHERE 11 是一种常见的SQL编写技巧,通常用于动态生成SQL语句时简化条件拼接。虽然它看起来多余,但在实际使用中,WHERE 11 对性能的影响可以忽略不计。以下是详细分析: 1. WHERE 11 的作用 WHERE 11 是一个恒…...
MyBatis 中SQL 映射文件是如何与 Mapper 接口关联起来的? MyBatis 如何知道应该调用哪个 SQL 语句?
1. 命名空间 (Namespace): SQL 映射文件 (XML): 在 SQL 映射文件的 <mapper> 根元素中,有一个 namespace 属性。这个 namespace 属性的值必须是 Mapper 接口的全限定名(包名 接口名)。 <mapper namespace"com.example.mapper.…...
SICK Ranger3源码分析——断线重连
前言 本文可在https://paw5zx.github.io/SICK-Ranger3-source-code-analysis-01/中阅读,体验更佳 简单分析一下SICK Ranger3源码中断线重连的实现,这一块算是比较容易的,先择出来分析一下。 代码示例仅贴出关键部分以便分析 使用SDK版本为…...
1.7 双指针专题:三数之和(medium)
1.题目链接 15. 三数之和 - 力扣(LeetCode)https://leetcode.cn/problems/3sum/submissions/609626561/ 2.题目描述 给你⼀个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满⾜ i ! j、i ! k 且 j ! k ,同时…...
【JavaEE】Spring Boot配置文件
目录 一、Spring Boot配置文件简介二、properties 配置⽂件说明2.1 properties 基本语法2.2 value("${}")读取配置⽂件 三、yml 配置文件说明3.1 yml 基本格式3.2 yml 配置数据类型 及 读取3.3 yml配置对象及读取ConfigurationProperties(prefix "")3.4 配…...
