`
康敏栋
  • 浏览: 169523 次
  • 性别: 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算法案例合集代码实例

    插入排序 01,九九乘法表.c ...06.一维数组的最值.c 07.一维数组的逆置,c 08.冒泡法排序.c 09.选择排序.c 10.1.插入排序-直接插入排序.c 10.2.插入排序-希尔排序.c 11.快速排序.c 12.归并排序.c 13.堆排序.c

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

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

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

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

    蝙蝠算法案例_蝙蝠算法是一种智能优化算法_可用于最小值问题_matlab

    资源名:蝙蝠算法案例_蝙蝠算法是一种智能优化算法_可用于最小值问题_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者...

    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(队列...

    山东理工大学2016级OJ题目1833

    首先,我们需要读取输入的正整数,然后计算它的位数,并将每一位数字存储在数组中。最后,我们输出位数、每一位数字和逆序的各位数字。 小鑫数数儿问题 在该问题中,我们需要编写一个程序,输入多组数字,输出小于...

    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 栈空间和堆空间 垃圾回收 性能优化 性能优化...

Global site tag (gtag.js) - Google Analytics