遍历m个元素取k个的递归解法

二叉搜索树第K小元素:中序遍历与进阶优化全解析 在数据结构与算法面试中,树形结构的有序性利用是高频考点。二叉搜索树凭借“左小右大”的严格约束,天然支持高效的排名查询。其核心在于中序遍历会产生升序序列,这一特性使“查找第K小元素”转化为遍历顺序问题。本文从递归与迭代两种实现切入,分析剪枝细节与复杂度差异,并深入讲解节点计数法、自平衡树等进阶优化方案,同时讨论重复值、退化树、区间查询等边界场景。无论你是准备面试还是提升工程中动态排名的设计能力,掌握这些思路都能事半功倍。 阅读详情

今天帮人做蓝桥杯题目,正好需要用到m个元素取k个值,把其中的方法提炼出来作为工具类:


import java.util.Arrays;
import java.util.ArrayList;

/**
 * 遍历m个元素取k个。
 * 将问题抽象为在数组arr[m]中取k个元素,将所有取法存入ArrayList<int[]>中。
 */
public class Combination{
    private static ArrayList<int[]> list = new ArrayList<int[]>(); //用于储存所有的下标组合
    private static int[] tempArr; //用于存储每一次遍历的下标组合

    //输入需求
    public static void set(int m, int k){ //m个元素中取k个
        tempArr = new int[k];
        getNum(m-1, k);
    }

    //返回遍历结果
    public static ArrayList<int[]> get(){
        return list;
    }

    //不返回,直接输出遍历结果
    public static void print(){
        int[] temp;
        for(int i = 0; i <list.size(); i++){
            temp = list.get(i);
                System.out.println(Arrays.toString(temp));
        }
    }

    private static void getNum(int mMax, int k){ //mMax为待选取子数组的最大下标,k为须取的个数,取出存入tempArr[k]中
        if(k == 1) {
            for(int i = mMax ; i >= 0; i--){
                tempArr[k-1] = i; //既然是最后一位,下标不需再自增
                int[] copy = Arrays.copyOf(tempArr, tempArr.length);
                list.add(copy);//直接add原数组会导致所有list元素都指向原数组
            } 
        }
        else{ 
            for(int i = mMax; i >= k-1; i--){                
                tempArr[k-1] = i;
                getNum(i-1, k-1); //这里如果用自增符号,会直接改变i,k的值,进而影响其他循环
            }
        }
    }

}


算法典型例题:N皇后问题,五种解法,逐步优化(非递归版) 本文将介绍N皇后问题的五种解法,包括朴素回溯法、对称优化、标记优化、可用优化、位运算优化,对于每种解题思路,提供相应的非递归版代码实现。 阅读详情

相关推荐

用递归法计算从n个正整数中选择k个数的不同组合数

用递归法计算从n个正整数中选择k个数的不同组合数

优先队列的经典题leedcode(java)(M个元素取出前N个)

Given a non-empty array of integers, return thekmost frequent elements. Example 1: Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2] Example 2: Input: nums = [1], k = 1 Output: [1] 给定一个非空的...

m493096871的博客 717

从X86到ARM:全面解析服务器CPU架构的演变与未来趋势

本文深入解析了服务器CPU架构从X86到ARM的演变历程与未来趋势。文章从CISC与RISC两种设计哲学切入,分析了X86凭借生态建立的帝国地位及其面临的功耗挑战,并重点阐述了ARM架构凭借其卓越的能效比优势,正从移动端向数据中心市场发起冲击。未来,异构计算、软硬协同与专用芯片将成为服务器CPU发展的核心方向。

gold的博客 1127

18712 递归实现组合

Description 找出从自然数1、2、……、m中任取k个数的所有组合,组合中字典序小的先输出。 例如m=5,k=3,应输出 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5 输入格式 两个整数m和k,(1<=k<=m<=10) 输出格式 按字典序输出所有组合 输入样例 5 2 输出样例 1 2 1 3 1 4 1 5 2 3 2 4

weixin_63551790的博客 987

eLabRadio软件无线电虚实结合仿真开发平台简介

在使用仿真平台时,不要关闭设备或断开设备与PC机之间的网络连接,否则,仿真平台将无法正常工作。注:采用eNodeX设备认证方式,当出现“设备不存在”的报错时,请检查计算机IP是否和硬件设备IP处于同一网段,或者是否是先连接好网线,再开启硬件设备的。①此登录方式下,需要先建立软件与硬件的通信:在登录窗口点击【网络配置】,参照下图输入设备IP,服务器地址无需设置,设置完成后点击确认,此时登录界面无需设置账号密码;,拷贝到电脑上,使用管理员权限运行setup.exe,下一步直到安装完成,桌面会生成快捷方式。

weixin_55349105的博客 6319

用 n8n 提取静态网页内容:从 HTTP Request 到 HTML 节点全解析

本文介绍了如何使用n8n的HTTP Request和HTML节点组合提取静态网页内容。首先通过HTTP Request节点获取网页HTML源码,然后使用HTML节点解析并提取所需数据。关键点包括:1)HTTP Request节点设置URL和GET方法;2)HTML节点配置Source Data为JSON并指定data字段;3)重点掌握Extraction Values参数,特别是CSS选择器(使用.和#定位元素)、Key命名、Return Value类型选择等。文章通过实例演示了标题和正文的提取方法,并提供

muyouking 4568

用递归方法求解组合问题

【问题描述】 求从1~n的正整数中取k(k<=n)个不重复整数的所有组合 【问题求解】 求解k个数的不同组合,我们可以用一维数组a[0]~a[k-1]来保存其中的一个结果,因为组合元素是不重复的,我们约定其递增排列。 设 f(n,k)-----(k<=n)是从1~n中人取出k个数的所有组合,这是一个“大问题” 则 f(m,k-1)----- (m<=k-1<=n) 从1~...

qq_40871196的博客 3389

通俗易通解释SLAM问题的数学描述:运动方程和观测方程

高翔博士在他的《视觉SLAM十四讲》中把SLAM问题的数学描述抽象成了两个数学方程,以下对此做个总结,并且对此做一些通俗易懂的解释: 一、方程的总体形式 作为理性层次的描述,我们引入数学方程来描述SLAM过程,其中第一个方程叫做运动方程、第二个方程叫做观测方程,想象一下我们在研究SLAM的时候肯定需要观测机器人(无人汽车、无人机等都可以统称为机器人)的运动(画面感很强哈哈),这样很容易理解并且记忆这两个方程的名称和意义: 二、变量的含义 我们看到,这两个方程中有大量的英文字母作为变量存在其中,下面介绍一下

weixin_41855010的博客 7114

递归:从m个数中选出k个数的全排列

#include<iostream> using namespace std; int a[100]; void Combine(int m, int k,int n) //从m个数里面选出k个数 { if (m < k) return; if (k == 0) { for (int i = 0; i < n; i++) cout << a[i]; cout << '\n'; } else { //选m .

weixin_58707952的博客 961

openEuler 22.03 安装及配置Gitlab容器

在 openEuler 22.03 上安装及配置Gitlab容器

轻步玉阶 3314

倍福--手动加入第三方伺服的配置

客户在没有硬件情况下,希望手动配置硬件,添加第三方驱动器,本文介绍其操作流程 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制软件 3 操作步骤 3 2.1. 添加电机XML文件 3 2.2. 创建EtherCAT 3 2.3. 添加新建项 3 2.4. 选择型号 4 2.5. 关联NC轴 5 软硬件版本 1.1. 倍福Beckhoff 1.1.1. 控制器硬件 TwinCAT控制制器,PC或者EPC,包括: 嵌入式控制器:CX5020-

weixin_41883890的博客 5325

JAVA练习341- 寻找两个正序数组的中位数

给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的。算法的时间复杂度应该为。2.00000合并数组 = [1,2,3] ,中位数 22.50000合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。

qq_48772498的博客 181

【系统分析师】高分论文:论基于构件的软件开发(气象灾害影响评估系统)

本文以某手机气象灾害影响评估系统为例,探讨了基于构件技术的软件开发实践。通过分析开发中常见的功能模块重复问题,提出建立企业构件库、针对性选择构件和加强构件管理的解决方案。项目实施中成功复用登录模块等通用构件,并针对气象数据转换需求开发新构件,最终在8个月内高质量完成系统建设。文章总结了构件开发的三个关键点:构件库建设是基础、构件选择需精准、构件管理要规范。同时指出需注意全新需求开发、性能优化等问题,建议通过培训提升团队对构件的理解力。该案例证明构件技术能有效缩短周期、降低成本,为企业积累可复用的技术资产。

数据知道的博客 4253

递归遍历与for循环遍历:递归遍历实现、理解简单

1、想法来源:力扣题14- I. 剪绳子 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0] x k[1] x ... x k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1 示例 2: 输入: 10 输出: 36

个人工作中学到的专业技术与职业发展知识笔记 3236

第4节:cesium 0基础发布离线地图(含源码+视频)

cesium发布离线地图

qq_29384639的博客 1597

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

约瑟夫环问题(简单解法和递归解法)(python)

约瑟夫环问题的简单解法和递归解法简单解法使用双向队列(deque) 函数使用列表加指针双层遍历递归解法 相关题:剑指offer 46 - 孩子们的游戏 简单解法 思路:刚开始把所有的人放到一个列表里面去,报的数字不是k就把这个人放到列表的最后一个位置上面去,如果是k就把这个数字从列表中去掉,直到列表剩下1个人为止。 使用双向队列(deque) 函数 deque函数简介 from collections import deque #deque是一种双向队列,底层据说也是同样用双链表实现的 deque.r

王叔叔 2872

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode 215:数组中的第 K 个最大元素——快速选择、小根堆与计数排序三种 O(n) 级解法全解析

本篇技术指南以 doocs/leetcode 仓库中 [215. 数组中的第K个最大元素](https://link.gitcode.com/i/b8307dc6ce9281f3c25dd99cc158fcec) 的题解文档为主体,系统讲解如何在不全排序的前提下,用快速选择、优先队列(小根堆)、计数排序三种思路在 O(n) 或 O(n log k) 时间内求解第 k 大元素。读完本文,你将掌握"第

gitblog_00949的博客 881

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LeetCode-Tree-230-M:二叉搜索树中第K小的元素

文章目录思路解法 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 思路 (1)最初想的是存到链表中,比较大小来取得。 (2)发现用链表的中序遍历即可。 (3)最初k1用的就是k,在递归中使用,发现输出一直不对。因为在递归第一层记录的k值,底层递归时虽然发生了改变,但是并没有影响上层,...

Heorin X的博客 177

找钱方式:递归,循环的解法

题目:给定一个金额m,以及几种钱币面值(比如1,2,5),求m有多少种找钱方式 解答: a(m, c): 金额m的找钱方式,此时最大钱币面值为c a(m, c) = sigma( a(m - k*c, next_c) ); k=0~m/c, next_c=比c小的下一个面值的钱币,比如c=5, next_c = 2 按照以上递推式,可以写出递归函数: int exchangeWays(i

Peerlessbloom 1709

二叉搜索树中序遍历与第K小元素查找优化

二叉搜索树(BST)是一种基于二叉树的高效查找结构,通过左小右大的节点分布特性实现O(log n)的查询效率。中序遍历作为BST的核心算法,遵循'左-根-右'的递归访问顺序,能自然产生有序序列。在工程实践中,针对查找第K小元素的典型场景,可通过剪枝策略优化递归过程,将时间复杂度从O(n)降至O(k)。结合显式栈的迭代实现能进一步控制空间复杂度为树高O(h),适合处理大规模数据。这些优化技术在数据库索引、游戏排行榜等需要快速顺序访问的场景中具有重要应用价值,特别是预处理节点计数的方法能显著提升频繁查询场景下的

weixin_29597551的博客 263

地宫取宝 DP以及dfs解法

地宫取宝 问题描述   X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。 请你帮...

Jacksqh的博客 1073

链表倒数第k个节点:双指针的单次遍历解法

链表是一种不可索引、不可回溯的线性数据结构,其‘倒数第k个节点’问题本质是将绝对位置查询转化为相对距离控制。双指针法通过快指针先行k步、再同步推进的机制,在O(n)时间与O(1)空间内完成定位,完美契合链表的物理特性。该方案避免了二次遍历带来的性能损耗和栈结构引发的内存风险,具备高缓存友好性与强工程健壮性,广泛应用于网络协议(如TCP滑动窗口)、缓存淘汰(Redis近似LRU)及实时日志流处理等场景。本文深入剖析其运动逻辑、边界校验与工业级实现细节。

weixin_33600816的博客 236

Day84 二叉搜索树中第K小的元素

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/ **进阶:**如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法? 示例1: 3 / \ 1 4 \ 2 输入:root = [3,1,4,null,

微光 287

从两个有序数组的并集中寻找第k小元素

Given two sorted arrays A, B of size m and n respectively. Find the k-th smallest element in the union of A and B. You can assume that there are no duplicate elements. 一、朴素解法:O(m+n): 将两个数组

那些年....的专栏 3425

二叉搜索树验证与查找第k小元素实战

二叉搜索树(BST)是计算机科学中重要的数据结构,通过左小右大的节点排列规则实现高效查找。其核心原理在于利用二叉树的中序遍历特性,可以快速验证树结构的合法性并实现排名查询。在算法优化层面,递归与迭代方法的取舍、遍历提前终止策略、以及节点排名预处理等技术,能显著提升BST在动态数据集上的操作效率。这些技术广泛应用于数据库索引构建、实时统计计算等场景,特别是在处理海量数据查询时,平衡BST结构与缓存策略的结合使用尤为关键。本文通过验证BST合法性和查找第k小元素两个典型问题,深入解析了BST的工程实践技巧与性能

weixin_31742871的博客 310
上一篇: 蓝桥杯真题:C村建k个邮局
下一篇: 一道画图题
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值