仅适用于规模N较小的情况。
大致思路:遍历一遍,不断更新max和secondMax。
需要注意两点:1.元素个数小于两个(这个有点打酱油。。) 2.所有元素值相同
代码如下:
import java.util.Arrays;
/**
* 寻找第二大的数:规模N较小的情况
*
* @author aaron-han
*
*/
public class FindSecondMax {
public static void main(String[] args) {
int[] arr = com.utils.Utils.randomIntArray();
System.out.println(Arrays.toString(arr));
findSecondMax(arr);
}
public static void findSecondMax(int[] arr) {
int length = arr.length;
if (length < 2) {
System.out.println("Usage: at least two numbers in array.");
System.exit(-1);
}
int max = arr[0];
int secondMax = Integer.MIN_VALUE;
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
secondMax = max;
max = arr[i];
} else if (arr[i] > secondMax && arr[i] < max) {
secondMax = arr[i];
}
}
if (secondMax == Integer.MIN_VALUE) {
System.out.println("No secondMax Number.");
} else {
System.out.println("The secondMax = " + secondMax);
}
}
}
对于N较大的情况,目前的想法是直接快排,然后取index为1的。
欢迎大家指点更好的思路,后边有想法了我会写上来。
分享到:
相关推荐
从键盘输入一组整数,通过分治算法求第二大的数
在数组中寻找第二大的数,是比较次数最少的算法
1.顺序比较算法的核心思想是遍历两次数组A,第一次找到最大值及其位置,第二次找到第二大值及其位置。通过比较当前元素与最大值和第二大值的大小关系,来更新相应的变量。 2.将一次比较视为一场比赛。在一次比较中,...
与CABDDCC算法相反,最后是通过对小簇集合的合并,形成最终的结果,在第一阶段主要是通过K近邻的思想形成小规模的连通图,第二阶段通过RI(相对互连性)和RC(相对近似性)来选一个最佳的簇进行合并。详细介绍链接 ...
试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 编程任务:对于给定的由n 行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。 Input 输入数据...
本书是原书的第2版,在第1版的基础之上增加了一些新的内容,涉及算法的作用、概率分析和随机化算法、线性规划,以及对第1版中详尽的、几乎涉及到每一小节的修订。这些修订看似细微,实际上非常重要。书中引入了...
本书是原书的第2版,在第1版的基础之上增加了一些新的内容,涉及算法的作用、概率分析和随机化算法、线性规划,以及对第1版中详尽的、几乎涉及到每一小节的修订。这些修订看似细微,实际上非常重要。书中引入了...
LSTM Parameters 神经网络第一层神经元个数、神经网络第二层神经元个数、dropout比率、batch_size 开始搜索:初始化所有狼的位置、迭代寻优、返回超出搜索空间边界的搜索代理、计算每个搜索代理的目标函数、更新 ...
第2章 算法基础 2.1 插入排序 2.2 分析算法 2.3 设计算法 2.3.1 分治法 2.3.2 分析分治算法 思考题 本章注记 第3章 函数的增长 3.1 渐近记号 3.2 标准记号与常用函数 思考题 本章...
第2章 程序性能分析 2.1 什么是程序性能 2.2 空间复杂度 2.2.1 空间复杂度的组成 2.2.2 举例 2.3 时间复杂度 2.3.1 时间复杂度的组成 2.3.2 操作计数 2.3.3 最好、最坏和平均操作计数 2.3.4 步数 第3章 渐近记法 3.1...
第一章 字符串 o 1.0 本章导读 o 1.1 旋转字符串 o 1.2 字符串包含 o 1.3 字符串转换成整数 o 1.4 回文判断 o 1.5 最长回文子串 o 1.6 字符串的全排列 o 1.10 本章习题 第二章 数组 o 2.0 本章导读 o 2.1 寻找最小的...
第2章 基础知识 11 2.1 操作最右边的位元 11 2.1.1 德摩根定律的推论 12 2.1.2 从右至左的可计算性测试 13 2.1.3 位操作的新式用法 14 2.2 结合逻辑操作的加减运算 16 2.3 逻辑与算术表达式中的不等式 17 2.4...
算法实现:对n个数据,比较n-1趟,在每趟区间中将最小数下标记录在k中,若k不为1,将b[1]与b[k]交换,始终保持剩余元素的第一个数为该趟最小值,实现由小到大的排序。 3.插入排序原理:将原序列逐个分开,每次比较...
》主要定位于有一定C/C++语言编程基础、想通过学习算法与数据结构提升编程水平的读者,也可作为具有一定编程经验的程序员以及大中专院校学生学习数据结构和算法的参考书。 第1篇 算法基础篇 1 第1章 算法概述 2 ...
第2章 数学归纳法 2.1 引言 2.2 三个简单的例子 2.3 平面内区域的计数 2.4 简单的着色问题 2.5 复杂一些的加法题 2.6 一个简单的不等式 2.7 欧拉公式 2.8 图论中的一个问题 2.9 格雷码 2.10 在图上寻找无...
⼈⼯智能之机器学习常见算法 摘要 摘要 之前⼀直对机器学习很感兴趣,⼀直没时间去研究,今天刚好是周末,有时间去各⼤技术论坛看看,刚好看到⼀篇关于机器学习不错的⽂章,在这⾥ 就分享给⼤家了. 机器学习⽆疑是当前...
//例如:F[1][2]存储的是与数字1的和为质数的第二个数字,我们可以通过查询数组F[][]的第一行找出第二个不为0 //值,然后将当前数组单元的列号存储到F[1][2]中,即F[1][2] = 4。 //算法思想是通过查询二维数组F[][]...
/********二进制数10000000**********/ for(i=0;i;i++) { reg[0][i]=-1; reg[1][i]=0; } } /*********寻找数组a中的最小值,返回最小值对应的下标***********/ int min(int a[]) { int i,index=0; int min=a[0]...
是算法设计实验的题目,老师要求的是用分治法,而不是蛮力法求解!最终我将一个数组平分成两个小数组,分别求出各数组的两个最大及两个最小值,然后再分别组合4个最大值和四个最小值,最后再比较出大小,得出4个最大...
2. 分析算法的复杂性,寻找比较高效的算法,并实现。 3. 分析格雷码问题,并设计递归算法求解之。 二. 基本原理 递归是一种重要的程序设计方法。使用递归方法有时可使算法简洁明了,易于设计。 递归指算法自己调用...