回溯算法编程题集合(leetcode)

news2025/1/23 7:55:21

给定一个整数数组  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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/partition-to-k-equal-sum-subsets

本题一开始本人打算使用动态规划,一开始的思路是求得nums数组的和然后除以k赋值为target,然后利用动态规划01背包求nums数组中可以组成target的方案数,但是运用此题理解有偏差,因为是划分子集所以有些数组元素不能重复使用。

选用leetcode精选题解

力扣

 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;
        // 排序优化
        Arrays.sort(nums);
        int l = 0, r = nums.length - 1;
        while (l <= r) {
            int temp = nums[l];
            nums[l] = nums[r];
            nums[r] = temp;
            l++;
            r--;
        }
        return backtrack(nums, 0, new int[k], k, target);
    }
    private boolean backtrack(int[] nums, int index, int[] bucket, int k, int target) {
        // 结束条件优化
        if (index == nums.length) return true;
        for (int i = 0; i < k; i++) {
            // 优化点二
            if (i > 0 && bucket[i] == bucket[i - 1]) continue;
            // 剪枝
            if (bucket[i] + nums[index] > target) continue;
            bucket[i] += nums[index];
            if (backtrack(nums, index + 1, bucket, k, target)) return true;
            bucket[i] -= nums[index];
        }
        return false;
    }

491. 递增子序列

难度中等639收藏分享切换为英文接收动态反馈

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。

示例 1:

输入:nums = [4,6,7,7]
输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]

示例 2:

输入:nums = [4,4,3,2,1]
输出:[[4,4]]
 public static List<List<Integer>> findSubsequences(int[] nums) {
        List<List<Integer>> lists=new ArrayList<>();
        if(nums.length<2)
            return lists;
        List<Integer> list=new ArrayList<>();
        backtreeing(lists,list,0,nums);
        return lists;

    }
    public static void backtreeing(List<List<Integer>> lists,List<Integer> list,int start,int nums[]){
         if(list.size()>=2){
             lists.add(new ArrayList<>(list));
         }
         //set做树层剪枝,同一层已经使用过的元素再此使用就跳出
        HashSet<Integer> set=new HashSet<>();
        for(int i=start;i<nums.length;i++){
            if(i>start&&set.contains(nums[i]))
                continue;
            if(list.size()==0||nums[i]>=list.get(list.size()-1)){
                list.add(nums[i]);
                set.add(nums[i]);
                backtreeing(lists,list,i+1,nums);
                list.remove(list.size()-1);
            }

        }
    }

17. 电话号码的字母组合

难度中等2418收藏分享切换为英文接收动态反馈

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

 public List<String> letterCombinations(String digits) {
        List<String> list=new ArrayList<>();
        if(digits==null||digits.length()==0)
            return list;
        char[] chars = digits.toCharArray();
        StringBuilder stringBuilder=new StringBuilder();
        Map<Character, String> phoneMap = new HashMap<Character, String>() {{
            put('2', "abc");
            put('3', "def");
            put('4', "ghi");
            put('5', "jkl");
            put('6', "mno");
            put('7', "pqrs");
            put('8', "tuv");
            put('9', "wxyz");
        }};
        backtreeing(chars,list,phoneMap,stringBuilder,0);
        return list;
    }
    public void backtreeing(char[] chars,List<String> list,Map<Character,String> map,   StringBuilder stringBuilder,int start){
       if(start==chars.length){
           list.add(stringBuilder.toString());
           return;
       }
        String s1 = map.get(chars[start]);
        for(int i=0;i<s1.length();i++){
           stringBuilder.append(s1.charAt(i));
           backtreeing(chars,list,map,stringBuilder,start+1);
           stringBuilder.deleteCharAt(stringBuilder.length()-1);
       }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【springboot】ApplicationListener用法及源码

用法 方法一&#xff1a;继承ApplicationListener 传递事件 继承于ApplicationEvent public class ForDebuggerEvent extends ApplicationEvent {public ForDebuggerEvent(Object source) {super(source);}public void executeEvent() {System.out.println("ForDebugge…

第四章 网络层

网络层服务 网络层需要实现的两项重要功能&#xff1a; 转发&#xff1b;当通过一条输入链路接收到一个分组后&#xff0c;路由器需要决策通过哪条输出链路将分组发送出去&#xff0c;并将分组从输入接口转移到输出接口路由选择&#xff1b;当分组从源主机流向目的主机时&…

24.SSM-SpringMVC延续--拦截器

目录 一、拦截器。 &#xff08;1&#xff09;拦截器的作用。 &#xff08;2&#xff09;拦截器与过滤器的区别。 &#xff08;3&#xff09;拦截器的方法。 &#xff08;4&#xff09;拦截器的快速入门。 &#xff08;5&#xff09;多拦截器。 &#xff08;5.1&#xf…

libui的简单使用

libui是一个 C 中简单且可移植&#xff08;但并非不灵活&#xff09;的 GUI 库&#xff0c;它使用每个平台原生的GUI技术进行绘制。 官网地址&#xff1a;链接 相关文件&#xff1a;链接 一、配置说明 1. 所需链接的库 在使用libui的过程中至少需要链接以下库 user32.lib ke…

NumPy 秘籍中文第二版:一、使用 IPython

原文&#xff1a;NumPy Cookbook - Second Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 在本章中&#xff0c;我们将介绍以下秘籍&#xff1a; 安装 IPython使用 IPython 作为 Shell阅读手册页安装 matplotlib运行 IPython 笔记本导出 IPython 笔记本导入网…

分享:如何给 DBA 减负?

欢迎访问 OceanBase 官网获取更多信息&#xff1a;https://www.oceanbase.com/ 本文来自OceanBase社区分享&#xff0c;仅限交流探讨。原作者肖杨&#xff0c;OceanBase 软件开发工程师。 研发、数据分析师及运维内部人员有数据查询、数据订正等需求&#xff0c;若无管控平台&…

vscode推送文件至github步骤

@目录 1、步骤: 提交到本地仓库从本地仓库再提交到远程仓库2、具体操作: 2.1 准备工作 设置提交代码时的用户信息 开始前我们需要先设置提交的用户信息,包括用户名和邮箱: git config --global user.name "runoob" git config --global user.email "tes…

【mysql性能调优 • 二】mysql的启动关闭原理和实战,及常见的错误排查

前言 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关系…

【CSS】定位 ⑥ ( 使用绝对定位在父容器任意位置显示子容器 | 代码示例 )

文章目录一、需求分析及核心开发要点二、完整代码示例一、需求分析及核心开发要点 要实现如下功能 , 下图 粉色 部分是 整体 父容器 , 紫色元素 是 中心的核心位置 , 蓝色是左上角的浮标 , 红色是右下角的浮标 ; 首先分析父容器元素 ; 由于 子元素 需要使用 绝对定位 , 此处的…

【权限维持】Windows自启动映像劫持粘滞键辅助屏保后门WinLogon

文章目录权限维持-域环境&单机版-自启动权限维持-域环境&单机版-粘滞键权限维持-域环境&单机版-映像劫持权限维持-域环境&单机版-屏保&登录权限维持-域环境&单机版-自启动 1、自启动路径加载 C:\Users\Administrator\AppData\Roaming\Microsoft\Wind…

家装产业的数字化,正在成为越来越多人的新共识

一场数字化的浪潮&#xff0c;正在各行各业上演着。家装行业&#xff0c;亦不例外。可以说&#xff0c;家装产业的数字化&#xff0c;正在成为越来越多人的新共识。如何借助数字化的手段改造家装行业&#xff0c;如何乘着数字化的东风实现家装行业的全面转型升级&#xff0c;正…

uni-app--》如何实现网上购物小程序(中下)?

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

STM32 W25QXX芯片

W25QXX芯片介绍 W25QXX芯片是华邦公司推出的大容量SPI FLASH产品&#xff0c;该系列有W25Q16/32/62/128等。本例程使用W25Q64&#xff0c;W25Q64容量为64Mbits&#xff08;8M字节&#xff09;&#xff1a;8MB的容量分为128个块(Block)&#xff08;块大小为64KB&#xff09;&…

Python每日一练(20230413)

目录 1. 最后一个单词的长度 ※ 2. 全排列 &#x1f31f;&#x1f31f; 3. 计数质数 ※ &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 最后一个单词的长度 给你一个字符串 s&…

clickhouse布隆过滤器跳数索引最佳实践

背景 本文来聊一下clickhouse的这个列式存储数据库的布隆过滤器的跳数索引类型,来了解它的数据结构&#xff0c;它可以为那些查询类型提供查询优化。 跳数索引-布隆过滤器 首先布隆过滤器家族的跳数索引分成三种类型&#xff1a; ngrambf_v1,tokenbf_v1,bloom_filter其原理是…

Visual Studio 2022如何安装和使用MSDN

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;在后台收到提问&#xff0c;问我Visual Studio 2022如何安装和使用MSDN&#xff0c;这个我之前也没有在这个版本上装过MSDN&#xff0c;我之前是在Visual Studio 2017版上装过MSDN&#xff0c;那既然有人问了…

蓝桥杯【第14届省赛】Python B组

测试链接&#xff1a;https://www.dotcpp.com/oj/train/1093/ 测试结果还是蛮惨烈&#xff0c;主要原因有几个&#xff1a; C 语言网的时间限制是 3 s&#xff1a;但实际比赛的时间限制都是 10 s 起步&#xff0c;甚至有 30 s 的莫名其妙的运行报错&#xff1a;我不知道 D 题…

浅谈ChatGPT的关键技术与落地发展

分享嘉宾 | 刘焕勇 文稿整理 | William 1、从大规模语言模型看ChatGPT的起源与本质 ChatGPT可以拆开分为Chat和GPT去理解&#xff0c;前一个表示一种应用形式&#xff0c;后一个是生成式的模型。在百度百科里面定义为ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c…

数组与字符串C语言代码总结

《array》 arr.c #include <stdio.h>int main(int argc, char *argv[]) {int a[2][3]; int i, j;for (i 0; i < 2; i) {for (j 0; j < 3; j) printf("%p ", &a[i][j]); //验证二维数组连续性}printf("%p %…

d2l Markov序列模型

本节的任务是使用Markov模型对后续序列进行预测&#xff0c;使用sin函数&#xff0b;噪声绘制1000个样本点&#xff0c;取tau为4&#xff0c;即利用后四个的信息预测第五个。 目录 1.构造样本点 2.抽取iter 3.构造网络 4.训练 5.预测 5.1单步 5.1多步 1.构造样本点 T …