`
aaron-han
  • 浏览: 26889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

算法基础之寻找第二大的数

阅读更多
仅适用于规模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的。
欢迎大家指点更好的思路,后边有想法了我会写上来。
分享到:
评论

相关推荐

    从键盘输入一组整数,通过分治算法求第二大的数

    ### 分治算法求第二大的数 #### 背景与目的 在计算机科学领域,分治算法是一种重要的问题解决策略,被广泛应用于多种算法设计之中。分治算法的基本思想是将一个复杂的问题分解成两个或更多的相同或相似的子问题,...

    算法实习:分治算法求n个数的数组中找出第二个最大元素

    ### 分治算法求解数组中第二大的元素 #### 背景介绍 在计算机科学领域,寻找数组中的最大或次大元素是常见的问题之一。这类问题不仅有助于理解数据结构的基本概念,也是评估算法效率和复杂度的良好案例。本文将探讨...

    寻找第二大的数

    本文详细介绍了如何在一组随机数中找到第二大的数的过程,包括随机数生成、冒泡排序算法的应用以及如何通过排序后的数组直接获取第二大数。通过这些方法,可以有效地解决实际问题,并为后续更复杂的数据处理任务提供...

    算法分析作业答案:求最大数与次大数的最优算法

    在计算机科学领域,特别是在数据处理和算法设计方面,经常需要找到一组数值中的最大值或最小值,甚至是第二大值等。这类问题不仅在编程竞赛中常见,也是面试和技术评估中的热门话题之一。本篇文章将详细介绍如何有效...

    java算法基础题

    - **查找最小质数**:从2开始寻找能够整除`n`的最小质数`k`。 - **分解**:如果找到这样的`k`,则输出`k`并递归调用`fengjie(n/k)`继续分解剩余部分。 - **结束条件**:如果`n`等于1或者找不到能整除`n`的`k`,则...

    欧几里德算法求解多个数的最大公约数

    欧几里得算法,又称欧几里得除法或GCD(最大公约数)算法,是一种古老的数学方法,用于寻找两个正整数的最大公约数。这个算法基于一个基本原理:两个正整数a和b(a&gt;b)的最大公约数与b和a除以b的余数的最大公约数...

    算法:C语言实现 第二卷(第5部分) 图算法

    《算法:C语言实现 第二卷(第5部分) 图算法》作为介绍图算法的专门章节,其内容是计算机科学中关于图论和图算法应用在C语言编程上的深入讲解。图论是数学的一个分支,专门研究图的性质和算法。在计算机科学中,图常...

    算法题示例-寻找数组中的第二大元素.rar

    算法题目:寻找数组中的第二大元素 题目描述: 给定一个非空整数数组,找出并返回其中第二大的元素。如果没有第二大的元素,则返回 -1。 输入示例: [1, 2, 3, 4] 输出示例: 3 解题思路: 初始化两个变量,first...

    算法设计与分析基础 第二版 课后答案

    - 算法的基本思路是不断地将输入数除以2,并记录下每次除法得到的余数,直到商为0为止。 - 最终将所有余数按照逆序输出,即得到对应的二进制数。 - **伪代码实现:** - 使用一个循环来不断执行除法操作,并将每次...

    数据挖掘18大算法实现以及其他相关经典DM算法

    与CABDDCC算法相反,最后是通过对小簇集合的合并,形成最终的结果,在第一阶段主要是通过K近邻的思想形成小规模的连通图,第二阶段通过RI(相对互连性)和RC(相对近似性)来选一个最佳的簇进行合并。详细介绍链接 ...

    算法导论第二十章习题解答

    《算法导论》第二十章习题解答涵盖了各种高级算法问题,主要涉及图论和网络流等内容。在这一章中,作者深入探讨了如何解决实际问题,如最短路径、最大流最小割以及网络调度等问题。以下是部分习题的解析和相关知识点...

    matlab算法查找数组中第二大数:空间换时间的改进算法、分治策略的改进算法

    - 对这些被淘汰的数再次应用顺序比较算法,以找出第二大值。 **步骤详解**: 1. 初始化 `max` 和 `second`。 2. 遍历数组,更新 `max` 和记录被淘汰的数。 3. 对被淘汰的数再次应用顺序比较算法,更新 `second`。 4...

    算法 删数问题

    3. 在每次删除操作中,寻找第一个比其后一个数字大的字符`a[i]`,这个位置就是我们应该删除的数字。 4. 使用一个内部循环(`for(j=i;j;j++)`)将找到的`a[i]`及其后面的字符向左移动一位,实现删除操作。 5. 减少待...

    算法心得:高效算法的奥秘(原书第2版).[美]Henry S.Warren,Jr(带详细书签).pdf

    第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...

    JavaSE基础部分简单算法

    如果第一个比第二个大,则交换它们。 - 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后一个元素会是最大的数。 - 针对所有的元素重复以上的步骤,除了最后一个元素。 - 重复步骤...

    算法分析与设计课程中的完美数算法

    17963是第一个超过10000的完美数,它是2^521 - 1的因数,这显示了寻找大完美数的挑战性。可能包含的代码可能是用不同编程语言实现的完美数检测算法,或者是一个包含已知完美数的列表,用于测试和验证算法的正确性。 ...

    算法设计与分析基础习题及参考答案

    欧几里得算法通过反复取模来寻找最大公约数,每次都将较大的数替换为较小的数和较大数对模的结果,直到其中一个数变为0,另一个数就是两数的最大公约数。例如,对于m和n,如果r=m mod n,那么GCD(m,n)就等于GCD(n,r)...

Global site tag (gtag.js) - Google Analytics