回溯算法习题其二-Java【力扣】【算法学习day.16】

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.非递增子序列

题目链接:491. 非递减子序列 - 力扣(LeetCode)

题面:

基本分析: 回溯暴力,可以维护一个set进行一些小剪枝

代码:

class Solution {List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> findSubsequences(int[] nums) {dfs(nums, -1, new ArrayList<>());return res;}private void dfs(int[] nums, int idx, List<Integer> curList) {if (curList.size() > 1) {res.add(new ArrayList<>(curList));}Set<Integer> set = new HashSet<>();for (int i = idx + 1; i < nums.length; i++) {if (set.contains(nums[i])) { continue;}set.add(nums[i]);if (idx == -1 || nums[i] >= nums[idx]) {curList.add(nums[i]);dfs(nums, i, curList);curList.remove(curList.size() - 1);}}}
}

2.全排列

题目链接:46. 全排列 - 力扣(LeetCode)

题面:

基本分析:在上一题的基础上维护一个数组来记录元素是否被使用

代码:

class Solution {List<List<Integer>> list = new ArrayList<>();int len;public List<List<Integer>> permute(int[] nums) {len = nums.length-1;List<Integer> stack = new ArrayList<>();int[] arr = new int[len+1];recursion(nums,stack,arr);return list;}public void recursion(int[] nums,List<Integer> stack,int[] arr){if(stack.size()==len+1){list.add(new ArrayList<>(stack));}for(int i = 0;i<=len;i++){if(arr[i]==0){arr[i]=1;stack.add(nums[i]);recursion(nums,stack,arr);arr[i]=0;stack.remove(stack.size()-1);}}}
}

3.全排列II

题目链接:47. 全排列 II - 力扣(LeetCode)

题面:

基本分析:元素重复导致重复答案,利用set去重

代码:

class Solution {Set<List<Integer>> list = new HashSet<>();int len;public List<List<Integer>> permuteUnique(int[] nums) {len = nums.length-1;List<Integer> stack = new ArrayList<>();int[] arr = new int[len+1];recursion(nums,stack,arr);return new ArrayList<>(list);}public void recursion(int[] nums,List<Integer> stack,int[] arr){if(stack.size()==len+1){list.add(new ArrayList<>(stack));}for(int i = 0;i<=len;i++){if(arr[i]==0){arr[i]=1;stack.add(nums[i]);recursion(nums,stack,arr);arr[i]=0;stack.remove(stack.size()-1);}}}
}

4.重新安排行程

题目链接:332. 重新安排行程 - 力扣(LeetCode)

题面:

基本分析:对list排序和回溯暴力会超时最后一个样例 ,但是排序必不可少,参照下面这位的做法:

代码:

class Solution {List<String> ans = new ArrayList<>();Map<String, TreeMap<String, Integer>> map = new HashMap<>();public List<String> findItinerary(List<List<String>> tickets) {for (List<String> list : tickets) {String start = list.get(0);TreeMap<String, Integer> tmap = map.getOrDefault(start, new TreeMap<>());String end = list.get(1);int sum = tmap.getOrDefault(end, 0) + 1;tmap.put(end, sum);map.put(start, tmap);}ans.add("JFK");try {recursion(tickets.size() + 1);} catch (RuntimeException e) {}System.out.println(tickets.size());System.out.println(ans.size());return ans;}public void recursion(int n) {if (ans.size() == n)throw new RuntimeException();String start = ans.getLast();if(map.containsKey(start)){for (Map.Entry<String, Integer> entry : map.get(start).entrySet()) {int count = entry.getValue();if (count > 0) {ans.add(entry.getKey());entry.setValue(count - 1);recursion(n);entry.setValue(count);ans.removeLast();}}}}
}

后言

上面是回溯算法的基本概念和部分习题,下一篇会讲解回溯算法的其他相关力扣习题,希望有所帮助,一同进步,共勉!  

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java小白图文教程】-05-数组和排序算法详解

精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

论文概览 |《Computers, Environment and Urban Systems》2024.10 Vol.113

本次给大家整理的是《Computers, Environment and Urban Systems》杂志2024年10月第113期的论文的题目和摘要&#xff0c;一共包括13篇SCI论文&#xff01; 论文1 Can consumer big data reveal often-overlooked urban poverty? Evidence from Guangzhou, China 消费者大数…

百度SEO中的关键词密度与内容优化研究【百度SEO专家】

大家好&#xff0c;我是百度SEO专家&#xff08;林汉文&#xff09;&#xff0c;在百度SEO优化中&#xff0c;关键词密度和关键词内容的优化对提升页面排名至关重要。关键词的合理布局与内容的质量是确保网页在百度搜索结果中脱颖而出的关键因素。下面我们将从关键词密度和关键…

通俗易懂的餐厅例子来讲解JVM

餐厅版本 JVM&#xff08;Java虚拟机&#xff09;可以想象成一个虚拟的计算机&#xff0c;它能够运行Java程序。为了让你更容易理解&#xff0c;我们可以用一个餐厅的比喻来解释JVM&#xff1a; 菜单&#xff08;Java源代码&#xff09;&#xff1a; 想象一下&#xff0c;Java…

BLFAasia2025广州国际酒饮料制造设备及液态加工技术展览会(广州酒饮料液态加工技术展)

Asia Beer and Beverage Technology and Liquid Food Processing Equipment Exhibition BLFAasia2025广州国际酒饮料制造设备及液态加工技术展览会&#xff08;以下简称&#xff1a;“BLFAasia”&#xff09;展会于2025年8月22-24日在粤港澳大湾区核心城市广州隆重举行。是专注…

自动驾驶-传感器简述

自动驾驶车辆上的传感器类型包含激光雷达、毫米波雷达、相机、imu、rtk、超声波雷达等&#xff0c;这些传感器用来接收外部世界多姿多彩的信号&#xff0c;根据接收到的信号&#xff0c;车载大脑对信号进行处理&#xff0c;那信号的准确程度就尤为重要。 本文将各个传感器的特性…

【acwing】算法基础课-搜索与图论

目录 1、dfs(深度优先搜索) 1.1 排列数字 1.2 n皇后问题 搜索顺序1 搜索顺序2 2、bfs(广度优先搜索) 2.1 走迷宫 2.2 八数码 3、树与图的存储 4、树与图的遍历 4.1 树的重心 4.2 图中点的层次 5、拓扑排序 6、最短路问题 6.1 朴素Dijkstra算法 6.2 堆优化Dijks…

Qt | windows视频播放器小项目

点击上方"蓝字"关注我们 01、前言 >>> Windows平台如果播放不了视频,记得下载编解码工具:https://www.mediaplayercodecpack.com/#google_vignette media.player.codec.pack.v4.6.0.setup.exe 下载后双击安装。 02、videowidget.pro >>> (.pro…

Python: Print Table on console

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a; # 描述&#xff1a; # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # OS : windows 10 # Datetime : 2024/10/28 22:08 # User : geo…

鸿蒙网络编程系列34-Wifi热点扫描及连接示例

1. Wifi热点简介 Wifi热点是移动设备接入网络的重要形式&#xff0c;特别是在不具备固定网络接入点的情况下&#xff0c;可以通过Wifi热点灵活方便的接入网络&#xff0c;因此在日常生活中具有广泛的应用。鸿蒙系统也提供了方便的Wifi管理API&#xff0c;支持热点扫描&#xf…

十四:Python学习笔记--基础知识完结(12)写几个案例 打包exe出来 齐活

目录 案例一&#xff1a;系统监控工具 案例二&#xff1a; 假设 多台电脑 在局域网中 只有一台电脑可以连接外网&#xff0c; 内网的数据必须要传递到外网电脑 内网&#xff1a; 外网&#xff1a; 程序打包 案例一&#xff1a;系统监控工具 加载配置&#xff1a;从 config…

HDU - 2588 GCD

题目大意&#xff1a;两个正整数 a 和 b 的最大公约数 GCD&#xff08;a&#xff0c;b&#xff09;&#xff0c;有时写成 &#xff08;a&#xff0c;b&#xff09;&#xff0c;是 a 和 b 的最大公约数&#xff0c;例如&#xff0c;&#xff08;1,2&#xff09;1&#xff0c;&am…

【笔记】大模型长度外推技术 NTK-Aware Scaled RoPE

NTK-Aware Scaled RoPE 正弦编码(Sinusoidal)旋转位置编码RoPE编码步骤&#xff1a;旋转位置编码的优势 NTK-Aware Scaled RoPE直接外推线性内插进制转换高频外推、低频内插的理解位置编码 总结参考&#xff1a; 长度外推技术是自然语言处理&#xff08;NLP&#xff09;领域中&…

java中的二叉树

二叉树 树型结构概念相关概念树的表示形式树的应用 二叉树概念两种特殊的二叉树二叉树的性质二叉树的存储二叉树的基本操作前置说明二叉树的遍历二叉树的基本操作 二叉树相关OJ题 树型结构 概念 树是一种非线性的的数据结构&#xff0c;它是由n(n>0)个有限结点组成一个具有…

防静电监控系统为汽车电子工厂打造安全生产环境

汽车电子产品对静电极其敏感&#xff0c;微小的静电放电 (ESD) 都会导致元器件损坏&#xff0c;造成巨大的经济损失和产品质量问题。因此&#xff0c;在汽车电子工厂构建完善的ESD防静电防护体系至关重要。传统的防静电措施主要依赖人工巡检&#xff0c;效率低且难以保证实时监…

如何挑选项目管理软件?8款免费工具推荐

本文提及的8款免费优质项目管理软件有: 1.PingCode&#xff1b; 2.Worktile&#xff1b; 3.钉钉&#xff08;Dingtalk&#xff09;&#xff1b; 4.金蝶项目管理&#xff1b; 5.ProcessOn&#xff1b; 6.简道云&#xff1b; 7.Jira&#xff1b; 8.Basecamp。 在如今快速发展的商…

51单片机 复位电路

上电复位 上电复位是为了程序执行到后面&#xff0c;突然关机&#xff0c;能够让电路能够回到初始状况 使用阻容(通交流隔直流)电路完成复位 电容上电有一个过程&#xff0c;充满电所需世界大于两个机器周期 电容电充满之后&#xff0c;电压拉为0v, 整个电路就复位了 如果电压一…

面向对象(下)

7.继承 继承的基础语法 学习目标&#xff1a;理解继承的概念&#xff0c;掌握继承的使用方式&#xff0c;掌握pass关键字的作用 就是把老的设计图继承下来&#xff0c;然后修修改改成为新的设计图 我们可以使用继承&#xff0c;来完成此需求。 单继承 从头写一个新的类&…

利用Django实现MySQL数据库的内容在网页的增删改写

利用Django实现MySQL数据库的内容在网页的增删改写 1.建立项目2.定义模型3.创建视图4.创建模板5.创建表单和配置url6.最后修改7.效果 1.建立项目 输入命令django-admin startproject aaa 新建项目&#xff0c;项目名称命名为aaa&#xff0c;打开aaa文件夹&#xff0c;命令提示…

Puppeteer 与浏览器版本兼容性:自动化测试的最佳实践

Puppeteer 支持的浏览器版本映射&#xff1a;从 v20.0.0 到 v23.6.0 自 Puppeteer v20.0.0 起&#xff0c;这个强大的自动化库开始支持与 Chrome 浏览器的无头模式和有头模式共享相同代码路径&#xff0c;为自动化测试带来了更多便利。从 v23.0.0 开始&#xff0c;Puppeteer 进…