day22 77. 组合

news/2025/2/14 1:35:17/文章来源:https://www.cnblogs.com/lin0304/p/18714652

方法 1:使用数组模拟栈(注释掉的代码)
优点:
使用数组 stack 来存储当前的组合,这种方法在空间上更节省,因为不需要为每个组合创建一个新的列表对象。
直接使用数组索引 stop 来控制当前组合的长度,这种方法在操作上更直接和高效。
缺点:
代码中使用了手动管理的数组,这可能会使代码的可读性和易维护性降低。
在递归回溯时,需要手动管理数组的索引 stop,这增加了代码的复杂性。
性能:
这种方法的性能相对较好,因为它减少了对象创建的开销。在您提供的注释中,这种方法的运行时间为 16ms。
方法 2:使用 LinkedList 作为栈
优点:
使用 LinkedList 来存储当前的组合,这种方法在操作上更简单,因为 LinkedList 提供了方便的 push 和 pop 操作。
代码的可读性更好,因为使用了更常见的数据结构。
缺点:
每次添加或删除元素时,LinkedList 可能需要更多的时间,尤其是当列表很大时。
创建新的 ArrayList 对象来存储每个组合可能会增加额外的空间开销。
性能:
这种方法的性能稍逊于第一种方法,因为它涉及到更多的对象创建和可能的额外开销。在您提供的注释中,这种方法的运行时间为 21ms。

//77. 组合
//模拟栈,16ms
/*public List<List> combine(int n, int k) {
List<List> res = new ArrayList<List>();
int[] stack=new int[k];//记录路径
int stop=-1;
dfsCombine(n,k,res,stack,1,stop);
return res;
}

private void dfsCombine(int n, int k, List<List<Integer>> res,int[] stack,int start,int stop) {if(stop+1 == k) {List<Integer> list=new ArrayList<>();for (int i : stack) {list.add(i);}res.add(list);return;}for (int i = start; i <= n; i++) {if (k-(stop+1)>n-start+1) return;stack[++stop]=i;dfsCombine(n, k, res, stack, i+1,stop);stop--;}
}*/
//21ms
public List<List<Integer>> combine(int n, int k) {List<List<Integer>> res = new ArrayList<List<Integer>>();LinkedList<Integer> stack = new LinkedList<>();//记录路径dfsCombine(n,k,res,stack,1);return res;
}private void dfsCombine(int n, int k, List<List<Integer>> res,LinkedList<Integer> stack,int start) {if(stack.size() == k) {res.add(new ArrayList<>(stack));return;}for (int i = start; i <= n; i++) {if (k-stack.size()>n-start+1) return;stack.push(i);dfsCombine(n, k, res, stack, i+1);stack.pop();}
}

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

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

相关文章

图解支付系统订单号设计与最佳实践

本文主要讲清楚支付系统订单号(或业务ID)各种设计方案对比,各子域的订单号(或业务ID)为什么要统一规范,以及最佳实践。最后还会简单分析微信支付和支付宝的对客订单号的组成差异。 假如你也好奇为什么有了数据库自增ID外还需要业务ID,或者想了解如何在业务ID中编织进业务…

Windows 网络存储ISCSI

本文介绍网络存储ISCSI的主要知识点以及如何通过代码控制挂载。 Windows网络存储有很多协议,我目前学习、稍微有了解的是FTP、SMB、ISCSI,FTP、SMB类似可以用来添加共享文件夹,或者添加映射网络驱动器:我使用FTP都是先建个映射,再将内部的文件夹固定到快速访问。平时使用效…

2022-03-17-hello-world

📌 Thinking No emotion; no journal; less platitude I have a habit of writing diaries in high school, to decrease the pressure and anxiety. So blog inherit it. As time going by, I realize I have to make a review of my life, in every single post, and its r…

2023-01-01-one-wisdom

2023 新年伊始,整理 2022 的陳年筆記時發現有很多不知名,但是又捨不得丟棄的句子,想着乾脆把他們做成引用得了。連着建倉庫,設計頁面,寫腳本一套下來也沒花太多時間,一個簡單的靜態自動部署的網站就建好了: One[1].Tech stackJekyll Github ActionHighlightsEvery single…

小米 R3G 路由器(Pandavan)实现网络打印机功能

通过小米 R3G 路由器的 USB 3.0 接口和 Pandavan 固件,轻松将没有网络打印功能的打印机接入网络。本文详细讲解如何通过无线桥接、设置内外网、端口映射和启用打印服务,让 PC 通过 TCP/IP 方式添加打印机,实现多设备共享打印,解决传统共享打印的高耗电问题。小米 R3G 路由器…

[MoE] Tutel源码解读

[MoE] Tutel源码解读 前言 最近MoE变得火了起来。但我在和别人讨论MoE时,总有一些不清楚的地方,就算读了论文也不确定内部到底是怎么实现的。于是我决定还是要看一看已有的代码,看看每个细节究竟都是怎么实现的。 作为实现参考,Tutel这篇工作就很不错。最近的工作基本都拿T…

Java笔记-15、Web后端基础 分层解耦

三层架构 满足单一职责原则。Controller控制层:接收前端发送的请求,对请求进行处理并响应数据。 Service业务逻辑层:处理具体的业务逻辑。 Dao数据访问层(持久层):负责数据访问操作,包括数据的增删改查。浏览器发过来请求,首先访问Controller层,Controller调用Service…

框架ThinkPHP

引子:本章主要介绍ThinkPHP(PHP开发框架)的简单使用和一些安全问题。免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!! 附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 1.5 🐘框架&a…

我的“DeepSeek服务不忙了”,腾讯云671B满血模型无限量调用攻略!

DeepSeek R1虽然免费,但是基本到了无法使用的状态。一两轮对话后,就开始服务忙了。好在这是一个开源模型,大量的第三方平台开始上线了。上一篇我们就讲过硅基流动。最近听闻腾讯云也上线了 DeepSeek-V3、DeepSeek-R1 满血版模型。而且可以免费不限量使用。具体规则如下: 添…

ACM寒假集训第五次专题任务

ACM寒假集训第五次专题任务 一、自然数的拆分问题 题目:解题思路: 使用了深度优先搜索,通过he判断何时输出,c标记长度控制输出,qs标记起始位置从小到大拆分。 AC代码: #include<iostream> using namespace std; int n,a[10],ans; void dfs(int he,int c,int qs) {i…

DeepSeekR1+Cherry Studio使用白嫖API和开源软件使用满血版模型!

使用Ollama本地运行,使用Ollama+ChatWise可视化运行,使用Ollama+ChatWise在Macbook Air M1 上运行。今天再来说一个方案。这个方案不是完全离线,但是模型能力会比离线的强。可以完全免费尝试,有几百到几千万的Token可以用。可以缓解DeepSeek R1官方服务繁忙无法使用的问题。…

DeepSeekR1 苹果macbook M1本地可视化运行!

过年了,就带了一台 macbook air 8g,DeepSeekR1的消息还是铺天盖地的来,我就想着在这台电脑上也装一个吧。经过简单的配置,最终也运行起来了,速度还可以。我这是首款M系列笔记本,也是现在最低配的 M 系列笔记本。这也就意味着所有M系列的苹果电脑都可以轻松运行DeepSeekR1…