【算法】递归求数组指定范围内最大和次大的数值
来源:互联网 发布:ubuntu用vim写脚本 编辑:程序博客网 时间:2024/05/22 08:28
问题描述
从数组区间A[low, high]中找出最大的两个整数A[x1]和A[x2]
算法思路
这里我们使用递归分治的策略,把问题划分为求A[low, middle],B[middle + 1, high]的子问题。
递归基为
if(low == high){ x1 = low; x2 = -99999; // 这里表示一个极小的数}
具体代码
#include <stdio.h>void max2(int A[], int low, int high, int &x1, int &x2){ // 当只有一个元素时,将low的值赋给x1,x2赋予足够小的负数 if(low == high) { x1 = low; x2 = -99999; return; } int middle = (low + high) / 2; int x1L, x2L; max2(A, low, middle, x1L, x2L); int x1R, x2R; max2(A, middle + 1, high, x1R, x2R); // 判断 if(A[x1L] > A[x1R]) { x1 = x1L; x2 = (A[x2L] > A[x1R]) ? x2L : x1R; } else { x1 = x1R; x2 = (A[x1L] > A[x2R]) ? x1L : x2R; }}int main(int argc, const char * argv[]) { int a[] = {7, 9, 123, 45, 12, 55, 69, 20, 11, 10}; int x1 = 0, x2 = 0; max2(a, 0, 9, x1, x2); printf("x1--%d, x2--%d\n", a[x1], a[x2]); return 0;}
0 0
- 【算法】递归求数组指定范围内最大和次大的数值
- 分治算法递归求最大子数组,下标,和
- 算法 求指定范围内素数
- 求子数组的最大和【算法】
- 求子数组的最大和:算法求验证
- 查找指定数值范围内的回数
- 求最大子数组的和,算法导论之分治递归求解,暴力求解,记忆扫描方法。
- 采用递归求数组里面求最大子序列的算法(手绘图解)
- 经典算法求大范围内素数
- 算法讨论(二)---求子数组的最大和
- 算法题13 求子数组的最大和
- 求数组子序列最大和的算法
- 求数组最大子段和的常用算法
- 【算法总结-DP】求子数组的最大和
- 每天一算法(求子数组的最大和)
- 人人都来写算法 之 求子数组的最大和
- 算法习题4:求子数组的最大和
- 算法:求连续子数组的最大和
- OMP算法的matlab实现
- 自定义控件从入门到轻生之---来个结晶
- python使用win32*模块模拟人工操作——城通网盘下载器(零)
- CentOS挂载NTFS移动硬盘
- PHP自定义函数&数组
- 【算法】递归求数组指定范围内最大和次大的数值
- viewWtihTag的使用
- Mybatis学习
- Codeforce - 610 - B. Vika and Squares
- 软件备份
- java中Log4J的使用笔记
- --Windows下MySQL报错-Access denied for user 'root.root'@'localhost'和Incorrect string value-'-xD6-xD0-xB
- java 流中的各种read
- No appenders could be found for logger