`
康敏栋
  • 浏览: 169317 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

数组中最值算法

阅读更多
源自《改善java程序的151建议》

1.求一个数组中的最大值
  (1)自行实现,快速查找最大值
public static int max(int[] data){
	int max=data[0];
	for(int i:data){
		max=max>i?max:i;
	}
	return max;
}

  (2)先排序,后取值
public static int max(int[] data){
	Arrays.sort(data.clone());
	return data[data.length-1];
}

第二种方法中为何要先data.clone()再排序?因为数组也是对象,如果不拷贝那就把原来的数组的顺序改不了。
方法一可以提升性能,而先排序后取值简单通俗易懂。从效率上讲,方法一快些。但实际测试中发现如果数组中数据少于一万,二者基本没啥差别

2.求一个数组中的第二大值
因为数组中的值是可以重复的,所以最大值可能有多个,故不能取倒数第二个值。需用一个特殊的算法先剔除重复的值,再进行排序
public static int secondMax(Integer[] data){
	List<Integer> dataList=Arrays.asList(data);
	//用treeset删除重复并排序
	TreeSet<Integer> ts=new TreeSet<Integer>(dataList);
	//取到比最大值小的,即第二大的值
	return ts.lower(ts.last());
}

分享到:
评论

相关推荐

    numpy数组最值索引

    python中获取numpy数组每列最大值的索引,输出其行坐标。

    基于指针数组实现二维数组中的查找与显示程序

    用于比较指针数组和数组指针实现算法的差异,利用函数返回指针实现。 可作为研究C语言指针使用的范例程序。 有源代码和实现结果图。

    RMQ求区间最值(最大最小)

    RMQ(Range Minimum/Maximum Query),即区间最大/小值查询,查询的时间复杂度为O(1)

    ZSB专升本计算机(共53,19-36)中 C语言的基础知识 常用算法 穷举法 递推法 数组元素 循环语 C语言习题

    19信息养护与知识产权保护.mp4 20C语言的两种开发环境.mp4 21C语言的基础知识.mp4 ...33常用算法的应用-求最值.mp4 34常用算法的应用-判断素数.mp4 35常用算法的应用-数组元素的.mp4 36C语言习题.mp4

    数据结构之树状数组讲解

    树状数组算法分析树状数组可以解决数量级较大的区间求和问题,区间求最值问题,区间修改、查询问题以及求逆序对等应用。树状数组的时间复杂度O(log2n),正常情况下远远快于线性时间O(n)。

    Python实现选择排序

    选择法也算是入门的一种排序算法,比起冒泡法,它的方法巧妙了一些,它的出发点在于“挑”,每次挑选数组的最值,与前置元素换位,然后继续挑选剩余元素的最值并重复操作。个人认为选择排序的意义不在于排序本身,而...

    LINQ操作数组代码(交集,并集,差集,最值,平均,去重复)

    数组是大学里经常拿来做算法练习的对象。一些经典算法非常有价值,考试、装逼、面试都十分有用。但现在是效率时代,编程讲究生产效率,利用LINQ,可以让程序猿避免写一些基本算法,把精力花在业务处理上

    区间约束Powell方法寻优代码

    powell方法是计算最值的有效方法,一般情况下是无约束的,目前Powell已发展了一种称为BOBYQA的带区间约束算法。 压缩文件里面optimization.h是无约束powell寻优的一个类,以前在baidu上找到的。powell.h和powell.cpp...

    RMQ问题求解(ST).pptx

    个数字的最值,i ii是开始位置,j jj是延伸长度,d p [ i ] [ 0 ] dp[i][0]dp[i][0]则是原数组a [ i ] a[i]a[i]本身,是边界。原理类似倍增,首先比较每2个元素的最值,然后再通过比较这2个最值,得到4个元素的最值...

    IOI国家集训队论文集1999-2019

    楼天城 -《匹配算法在搜索问题中的应用》 贝小辉 -《浅析树的划分问题》 林 涛 -《线段树的应用》 杨思雨 -《伸展树的基本操作与应用》 许智磊 -《后缀数组》 朱泽园 -《多串匹配算法及其启示》 韩文弢 -《论...

    ACM竞赛代码整理 v0.6.pdf

    RMQ 区间最值询问3 KMP 模式匹配3 字符串最小表示4 第二章数据结构5 并查集5 HEAP 最小堆5 树状数组6 二维树状数组6 TRIE 字典树6 后缀数组8 LCP 最长公共前缀9 第三章图论11 BELLMAN FORD 11 BELLMAN FORD(队列...

    leetcode数组下标大于间距-Leetcode:力码

    求最值(选择1,选择2...) 回溯问题,实际上就是一个决策树的遍历过程,不合适就退回上一步,通过约束条件, 减少时间复杂度。 回溯算法(DFS)的框架: result = [] def backtrack(路径, 选择列表): if 满足结束条件:...

    01-D-4 取非极端元素 & 冒泡排序1

    算法: 从 S 中任意取出三个元素// 如果 S 数组的形式给出 不妨取出前三个// 由于 S 是集合,所以这个三个元素必然互异确定并且排除其中的最最值输出 z

    c语言经典案例

    实例103 查找数组中的最值 134 实例104 判断一个数是否存在数组中 135 实例105 求二维数组对角线之和 136 实例106 模拟比赛打分 137 实例107 矩阵的转置 139 实例108 设计魔方阵 141 实例109 字符升序排列 142 实例...

    常用排序算法的python实现及优化

    (稳定是指如果数组里两个相等的数,排序前后这两个相等的数的相对位置保持不变) 同时要熟练掌握代码,将代码精炼,能在短时间内复现出无bug的代码。 选择排序 最简单直观的排序方法,每一趟都选择最小(最大)的...

    fe-tutorial::spiral_notepad: 前端学习笔记,整理了 JavaScript 知识、数据结构和算法、webpack 基础知识等

    数组去重,扁平化和最值 数组乱序 懒加载 无限滚动 RegExp 正则表达式 RegExp 构造函数属性 应用 浏览器工作原理 浏览器的多进程和JS单线程 浏览器的渲染过程 Event Loop 栈空间和堆空间 垃圾回收 性能优化 性能优化...

    leetcode题库-work:C++后端开发面经整理

    大部分题都是模拟中使用某个算法优化 贪心 ★★★ 按照某种规则排序 字符串 ★★★ 输入输出容易搞人 双指针处理字符串空格单词 DFS/BFS ★★★ 有多少种组合数 图的最短时间 滑动窗口/双指针 ★★ 最短或最长的子串...

    ACM巨全模板 .pdf

    1.RMQ (区间最值,区间出现最大次数,求区间gcd) 2.二维RMQ求区间最大值 (二维区间极值) 3.线段树模板(模板为区间加法) (线段树染色) (区间最小值) 4.线性基 (求异或第k大) 5.主席树(静态求区间第k小) (区间中小于k的...

    C和C++头文件对比一览

    #include &lt;limits.h&gt; //定义各种数据类型最值常量 #include &lt;locale.h&gt; //定义本地化函数 #include &lt;math.h&gt; //定义数学函数 #include &lt;stdio.h&gt; //定义输入/输出函数 #include &lt;stdlib.h&gt; //定义杂项函数及...

Global site tag (gtag.js) - Google Analytics