首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【递归】递归求n个数最大

作者:每天都要记得刷题(●’◡’●) 时间:2022/04/04 本篇感悟:举一反三,由求 n阶乘联想到递归求n个数最大,对递归有了更深了解。...文章目录 ⭐题目(代码在文末) ⭐递归思想 ⭐求前n个斐波那契数 ⭐具体代码(答案) ⭐题目(代码在文末) 使用递归求 55 ,22, 155, 77, 99这5个数最大 ⭐递归思想 Q...往里套用就是: 关键:重复把求最大这个过程重复再重复,知道找到递归出口 1.当数组只有一个元素时候,这个数就是最大 2.但是当n>1时,从数组下标大一端开始自身调用**,将最后一个数和n-...1个数最大进行比较(假设我们已知)** 3.然后就是求n-1个数最大,也就是重复了以上步骤 4.知道我们到了递归出口,再归回去就可以了。...a[n - 1] : find_max(a, n - 1); } int main() { //递归求n个数最大 int a[5] = { 55,22,155,77,99 }; int

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

个数组中找最大和最小

这个不是lintcode里题目,但是感觉很经典,放在这里。 给定一个数组,在这个数组中找到最大和最小。...最近在看一点算法书,看到分治法经典金块问题,实质就是在一个数组中找到最大和最小问题。 我们用分治法来做,先把数据都分成两两一组,如果是奇数个数据就剩余一个一组。...如果是偶数个数据,就是两两一组,第一组比较大小,分别设置为max和min,第二组来了自己本身内部比较大小,用大和max进行比较,决定是否更新max,小同样处理,以此类推。...如果是奇数个数据,就把min和max都设为单个个数据,其他类似上面处理。 书上说可以证明,这个是在数组中(乱序)找最大和最小算法之中,比较次数最少算法。...瞄了一眼书上写法,还是很简单,一遍过。 //这是一中分治法,这是在寻找最大和最小比较次数最小方法。

2.5K10

Java中获取一个数最大和最小

1,首先定义一个数组; //定义数组并初始化 int[] arr=new int[]{12,20,7,-3,0}; 2,将数组第一个元素设置为最大或者最小; int max=arr[0...];//将数组第一个元素赋给max int min=arr[0];//将数组第一个元素赋给min 3,然后对数组进行遍历循环,若循环到元素比最大还要大,则将这个元素赋值给最大;同理,若循环到元素比最小还要小...,则将这个元素赋值给最小; for(int i=1;i<arr.length;i++){//从数组第二个元素开始赋值,依次比较 if(arr[i]>max){//如果arr[i]大于最大...,就将arr[i]赋给最大 max=arr[i]; } if(arr[i]max){//如果arr[i]大于最大,就将arr[i]赋给最大 max=arr[i]; } if(arr[i]<min){//如果arr

6.3K20

寻找最大K个数

给你n个数,让你找出其中最大K个数。 解法1: 很多人上来就对其进行排序,选用不同排序方法有不同时间复杂度,这里我们假设使用了最快快排,时间复杂度为O(n*logn)。...通过排序我摘出前K大数。 但也许快排不是最优,我们只找最大K个数,何必要对所有的数进行排序,我们只需要进行局部排序即可,时间复杂度大概是O(N*K)。...在这里,我们只要在递归过程中选包含最大K个数部分进行完整快排,而对于其他部分只进行快排一部分。 关于使用快排求第K大数方法参见其他博文。...在这个基础上,只需要做小小改进就可以完成寻找最大K个数功能了,时间复杂度O(N)。...结果遍历所有元素后,我们都得到保存最大K个数堆,也就到达了我们目的。

76020

C++怎么求三个数最大

C++98老码农们,应该都知道std::max() 函数可以从两个数中求最大。 但其实从C++11开始,std::max()可以用来从多个数中求最大,前提是需要搭配初始化列表。...这个是C++11初始化列表。 怎么样,一次性比较多个数字,简洁不少吧。但唯一限制是类型要一样,即使有符号int和无符号int放一起,也不能用std::max()。...,递归展开时候需要一个作为『终止条件』函数。...好了,再回答一下网友问题,我想之所以C++11没有这样实现max,估计是防止max()传入过多参数吧。一是模板实例化时候会爆炸。二是一个函数,参数个数如果太多,其实也会影响函数调用性能。...而使用{}借助初始化列表这么一中转,max参数个数就可以控制在一个(初始化列表作为一个参数传入max)。

4.2K20

队列最大滑动窗口最大

):底部导航栏——剑指offer题解 CSDN(@Rude3Knife):剑指offer题解专栏 题目介绍 剑指offer面试题59题 给定一个数组和滑动窗口大小,找出所有滑动窗口里数值最大。...解题思路 方法一:蛮力法 思路 扫描窗口k,得到最大。对于长度为n数组,算法时间复杂度O(nk) 显然不是最优解。...方法二:用两个栈实现队列 思路 面试题30中,我们实现过用两个栈实现了队列,可以在O(1)时间得到栈最大,也就可以得到队列最大。...第二个数字是3,比2大,所以2不可能是滑动窗口中最大,因此把2从队列里删除,再把3存入队列中。第三个数字是4,比3大,同样删3存4。此时滑动窗口中已经有3个数字,而它最大4位于队列头部。...第四个数字2比4小,但是当4滑出之后它还是有可能成为最大,所以我们把2存入队列尾部。下一个数字是6,比4和2都大,删4和2,存6。就这样依次进行,最大永远位于队列头部。

2.2K20

图解 LeetCode 第 421 题:数组中两个数最大异或

这道题找最大思路是这样:因为两两异或可以得到一个,在所有的两两异或得到中,一定有一个最大,我们推测这个最大应该是什么样?即根据“最大存在性解题(一定存在)。...在这里要强调一下: 我们只用关心这个最大异或需要满足什么性质,进而推出这个最大是什么,而不必关心这个异或是由哪两个数得来。...LeetCode 第 421 题:数组中两个数最大异或-1 ? LeetCode 第 421 题:数组中两个数最大异或-2 ?...LeetCode 第 421 题:数组中两个数最大异或-3 ? LeetCode 第 421 题:数组中两个数最大异或-4 ?...LeetCode 第 421 题:数组中两个数最大异或-5 ?

2.2K20

求一个数最大k个数(java)

问题描述:求一个数最大k个数,如,{1,5,8,9,11,2,3}最大个数应该是,8,9,11 问题分析:     1.解法一:最直观做法是将数组从大到小排序,然后选出其中最大K个数,但是这样解法...2.解法二:不对前K个数进行排序,回忆快排算法中,那个partition函数,就是随机选择数组中个数,把比这个数数,放在数组前面,把比这个数数放在数组 后面,这时想如果找出随机数,最终位置就是...K,那么最大K个数就找出来了,沿着这个思路思考问题,但是这个函数,最后索引位置并不一定是K,可能比K大也可能比K小,我们把找出数组分成两部分sa,sb,sa是大部分,sb是小部分,如果sa长度等于...K中元素一部分,再从sb中找到,k-m个最大元素,组合起来就是最终结果,那么这时把问题简化成从sb中找k-m个最大元素,所以总体来说这是一个递归过程,虽然复杂大也是O(n*logn)但是,每一次数据量都会减少所以会更加快...3.解法三:是利用堆排序,建立一个K阶最大堆,然后数据一个个插入队当中,那么插入队时间复杂度是O(logK),适合数据量比较大时候,用堆效果更加好。

82020

C实现不用临时变量交换两个数(一行代码)

最近看到一个问题感觉很有意思: “如何在不申请临时变量情况下交换两个数?”...swap(int *p, int *q) { *a = *a ^ *b; *b = *b ^ *a; *a = *a ^ *b; } 提示:异或运算符 ^ 也称 XOR 运算符,它规则是若参加运算两个二进位同号...; } 方法三# void swap(int *p, int *q) { *a = *a + *b - (*b = *a); } C/C++ 中 ( A = B ) 返回得到是赋值号( = )左面的...} 计算实例: a = 3; b = 4; a = 3 ^ 4 = 7; b = 4 ^ 7 = 3; a = 7 ^ 3 = 4; -> a = 4; -> b = 3; 参考文献# 不用临时变量交换两个数...C/C++__基础类型(=)赋值表达式返回 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

17330

java integer最大_java int型最大最小最大+1,最小-1

大家好,又见面了,我是你们朋友全栈君。 java中,int型变量是有符号整形变量。int型变量占用4个字节(32bit位)。 int型变量采用补码形式来表示数值。...对于一个二进制数,正数补码是其本身,负数补码是所有二进制位取反再加一。 int变量中,第一位是符号位(0表示正数,1表示负数)。 我们下面来实际分析int型中正数和负数是怎么表示。...因此,int型能表示最大正数二进制码是0111 1111 1111 1111,也就是2^31-1。...最大+1 最大二进制码是0111 1111 1111 1111,加一以后二进制码是1000 0000 0000 0000,是int所能表示最小负数。...最小-1 最小二进制码是1000 0000 0000 0000,减一后称为0111 1111 1111 1111,是最大正数。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

2K10
领券