求查找数组元素最大值中两个元素差的最大值

Javascript获取数组中的最大值和最小值的方法汇总
转载 &发布时间:日 09:30:08 & 作者:程序员小菜
比较数组中数值的大小是比较常见的操作,下面同本文给大家分享四种放哪广发获取数组中最大值和最小值,对此感兴趣的朋友一起学习吧
比较数组中数值的大小是比较常见的操作,比较大小的方法有多种,比如可以使用自带的sort()函数,下面来介绍如下几种方法,代码如下:
Array.prototype.min = function() {
var min = this[0];
var len = this.
for (var i = 1; i & i++){
if (this[i] & min){
min = this[i];
Array.prototype.max = function() {
var max = this[0];
var len = this.
for (var i = 1; i & i++){
if (this[i] & max) {
max = this[i];
如果你是引入类库进行开发,害怕类库也实现了同名的原型方法,可以在生成函数之前进行重名判断:
if (typeof Array.prototype['max'] == 'undefined') {
Array.prototype.max = function() {
用Math.max和Math.min方法可以迅速得到结果。apply能让一个方法指定调用对象与传入参数,并且传入参数是以数组形式组织的。恰恰现在有一个方法叫Math.max,调用对象为Math,与多个参数
Array.max = function( array ){
return Math.max.apply( Math, array );
Array.min = function( array ){
return Math.min.apply( Math, array );
但是,John Resig是把它们做成Math对象的静态方法,不能使用大神最爱用的链式调用了。但这方法还能更精简一些,不要忘记,Math对象也是一个对象,我们用对象的字面量来写,又可以省几个比特了。
Array.prototype.max = function(){
return Math.max.apply({},this)
Array.prototype.min = function(){
return Math.min.apply({},this)
[1,2,3].max()// =& 3
[1,2,3].min()// =& 1
function getMaximin(arr,maximin)
if(maximin=="max")
return Math.max.apply(Math,arr);
else if(maximin=="min")
return Math.min.apply(Math, arr);
var a=[3,2,4,2,10];
var b=[12,4,45,786,9,78];
console.log(getMaximin(a,"max"));//10
console.log(getMaximin(b,"min"));//04
var a=[1,2,3,5];
alert(Math.max.apply(null, a));//最大值
alert(Math.min.apply(null, a));//最小值
多维数组可以这么修改:
var a=[1,2,3,[5,6],[1,4,8]];
var ta=a.join(",").split(",");//转化为一维数组
alert(Math.max.apply(null,ta));//最大值
alert(Math.min.apply(null,ta));//最小值
以上内容是小编给大家分享的Javascript获取数组中的最大值和最小值的方法汇总,希望大家喜欢。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具一个无序数组,求两个数的差是最大的,且较大的数在数组里面的顺序是_百度知道
一个无序数组,求两个数的差是最大的,且较大的数在数组里面的顺序是
一个无序数组,求两个数的差是最大的,且较大的数在数组里面的顺序是在较小的数后面,这个差值是多少?
这是一道matlab题,我需要源代码
我有更好的答案
应该可以在Excel中用公式完成这个需求
我需要matlab源代码
我不懂啦,就等其他懂matlab的大神吧
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。数组最大差值的最优解法(动态规划) - dinghing - 博客园
最近在公司要计算一下我们所有用户排列中相连两个人的年龄差的到最大差值以统计公司用户年龄层。
我们公司的客户是数量很大,所以普通的排序求差值或者快排算法其实很难满足要求。
一个简单的排序算法求解如下:
def stepIn(dataInput)
dataLen = dataInput.length
diff = nil
dataResule = {}
for i in 0...dataLen-1
for n in i+1...dataLen
diff2 = dataInput[n] - dataInput[i]
if diff == nil or diff & diff2
diff = diff2
dataResule["#{i},#{n}"] = diff
rIdxs = dataResule.sort_by {|k,v| -v} [0][0].split ','
return [dataInput[rIdxs[0].to_i], dataInput[rIdxs[1].to_i]]
上面的代码已经经过了优化,在每次循环后,保留了之前计算的差值的结果,下面的循环中小于这个差值的索引值就被抛弃了,这样的一个好处是可以减少最后sort时花费的时间。
假如保留所有两数之间的差值,假设使用冒泡排序,输入数组长度是m,排序算法复杂度是O(n2),而这个n会达到(m+1)*m/2,所以总的算法复杂度就成了O(n4)。
而在循环中预处理之后,最后参与排序的元素个数最大不会超过m,总的时间复杂度还是O(n2)。
其实这只是针对最后的sort而言,而这个程序真正的耗时在上面的嵌套循环,这里的复杂度不管有没有优化,其实都是一样的O(n2),下面sort的消费可以忽略不计。
这是一种比较直观的解法了,事实证明,没有经过斟酌的想法都是不完善的。这个算法最后用到实际运算时需要消耗的资源和时间是成指数上升的。
后来仔细想了一下,其实完全可以使用动态规划的思想去解决这个问题。
动态规划的思想通常可以分成下面几部:
给问题分阶段
确定每个阶段的状态
确定相邻阶段的之间的递推关系(也就是找出从前一个阶段转化到后一个阶段的条件)
上面的问题很容易可以分出三个阶段
开始阶段,将数组中开头的两个元素作为最大,最小值记录在结果数组中,[A,B]
过程阶段,将后面的数与前面的数比较,比如将C与B比较,并将符合条件的值替换结果数组
结束阶段,当游标抵达数组最后一个元素时,跳出循环。
而这几个状态之间的转移条件在上面已有了说明,主要在第二个阶段,哪些条件能决定替换结果数组,这些条件称为决策
游标所指的数大于结果数组中的最大值,比如后面有C,那么结果数组就变成[A,C]
游标所指的数小于结果数组中的最小值,那么它就有可能在后面替换结果数组中的最小值,例如后面出现了A-1,这个时候不能立刻替换掉A,需要找个临时变量将A-1保存下来。
游标所指的数与临时最小值之差大于结果数组中两数字之差。这个条件应该优先于决策2和决策1,一旦这个决策生效,将同时替换结果数组中的最大最小值,决策1和决策2在这个时候应该不生效。例如后面出现了D,那么结果数组就应该变成[A-1,D]。假如这个时候决策1优先生效,那么结果数组会变成[A,D],而临时变量A-1将永远没有上位之日了。
有了上面的阶段和决策之后,代码就很容易实现了
1 def stepIn(list)
# minimal index
# maximal index
differ = 0
# max differ
minTmp = nil
# temp minimal index
for i in 1...list.length
if minTmp != nil and list[i] - list[minTmp] & differ
# if current index minus temp minimal index is bigger than differ, replace it
differ = list[i] - list[minTmp]
# new differ
min = minTmp
# new minimal index
# new maximal index
elsif list[i] & list[max]
# replace the maximal index
# new maximal index
differ = list[i] - list[min]
# new differ
elsif list[i] & list[min] and ( minTmp == nil or list[i] & list[minTmp] )
# replace the temp minimal index
minTmp = i
# change temp minimal index
return [list[min], list[max]]
可以看出使用第二种算法的时间增长基本是线性的。求数组里两个最大值两个最小值,求大神帮忙写啊~~
[问题点数:100分]
求数组里两个最大值两个最小值,求大神帮忙写啊~~
[问题点数:100分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2015年11月 扩充话题大版内专家分月排行榜第一2015年7月 扩充话题大版内专家分月排行榜第一2015年1月 扩充话题大版内专家分月排行榜第一2014年9月 扩充话题大版内专家分月排行榜第一(补)2013年9月 扩充话题大版内专家分月排行榜第一2013年8月 扩充话题大版内专家分月排行榜第一2013年7月 扩充话题大版内专家分月排行榜第一
2016年3月 扩充话题大版内专家分月排行榜第二2015年12月 扩充话题大版内专家分月排行榜第二2015年6月 扩充话题大版内专家分月排行榜第二2015年2月 扩充话题大版内专家分月排行榜第二2014年10月 扩充话题大版内专家分月排行榜第二2014年8月 扩充话题大版内专家分月排行榜第二
2016年2月 C/C++大版内专家分月排行榜第三2016年1月 C/C++大版内专家分月排行榜第三
2013年12月 C/C++大版内专家分月排行榜第二2013年12月 Linux/Unix社区大版内专家分月排行榜第二2013年11月 C/C++大版内专家分月排行榜第二2013年10月 C/C++大版内专家分月排行榜第二
匿名用户不能发表回复!|博客分类:
给出一个以0为起始索引的非空数组 A 其中包含 N 个非负整数,返回数组 A 中任意两个元素之差的绝对值的最大值:
amplitude(A) = max{ A[P] - A[Q] : 0 ≤ P, Q & N }
编写一个函数
class Solution { public int amplitude(int[] A); }
N 是 [1..1,000,000] 内的 整数;
数组 A 每个元素是取值范围 [0..5,000,000] 内的 整数 .
例如,给出
你的函数应该返回 42.
最坏-情况下,期望的时间复杂度是 O(N);
最坏-情况下,期望的空间复杂度是 O(1), 输入存储除外 (不计输入参数所需的存储空间).
输入数组中的元素可以修改.
duoduodeai 写道JianbinJava 写道楼猪,,你要讲的是排序还是求最大值..标题跟内容不相符啊...傻帽,看不懂吗?老师先给你分析下题目,首先求求组中所有相邻元素的值差,然后求绝对值,最后求绝对值中的最大值,傻帽,回家练练吧,这里不适合你。楼主原帖中完全没有提到“相邻”,2楼不知怎么的就按着“相邻”来做,真是很离奇。题目要求时间复杂度O(N),时间复杂度是按元素访问来算的,2楼的解法在一个双层循环里Math.abs(a[i] - a[i + 1]),时间复杂度怎么看也不象是O(N)吧。max = 0 ;index_max = 0; for(i=0 ; i & a.langth-1 ;i++){&& if(max & abs(a[i]-a[i+1])){&&&&&& max = a[i] -a[i+1];&&&&&& index_max =&&& }}sysout(max);sysout(index_max);o(n)o(1)相邻?
duoduodeai 写道JianbinJava 写道楼猪,,你要讲的是排序还是求最大值..标题跟内容不相符啊...傻帽,看不懂吗?老师先给你分析下题目,首先求求组中所有相邻元素的值差,然后求绝对值,最后求绝对值中的最大值,傻帽,回家练练吧,这里不适合你。楼主原帖中完全没有提到“相邻”,2楼不知怎么的就按着“相邻”来做,真是很离奇。题目要求时间复杂度O(N),时间复杂度是按元素访问来算的,2楼的解法在一个双层循环里Math.abs(a[i] - a[i + 1]),时间复杂度怎么看也不象是O(N)吧。看到这种2B楼主真心蛋疼。
JianbinJava 写道楼猪,,你要讲的是排序还是求最大值..标题跟内容不相符啊...傻帽,看不懂吗?老师先给你分析下题目,首先求求组中所有相邻元素的值差,然后求绝对值,最后求绝对值中的最大值,傻帽,回家练练吧,这里不适合你。楼主原帖中完全没有提到“相邻”,2楼不知怎么的就按着“相邻”来做,真是很离奇。题目要求时间复杂度O(N),时间复杂度是按元素访问来算的,2楼的解法在一个双层循环里Math.abs(a[i] - a[i + 1]),时间复杂度怎么看也不象是O(N)吧。
怎么这么多人排序,直接一次遍历找到最大值最小值就可以了amplitude(A) = max{ A[P] - A[Q] : 0 ≤ P, Q & N }amplitude(A) = =max{A[i],0 ≤ i}-min{A[j],0 ≤ j}就是找到集合A中的最大值-A中的最小值伪代码如下:int max = A[0];//记录当前遍历的最大值 A[0]将修改用来存放最小值for( int index = 1; index & A. index ++){&&& //max 不是最大,则重新赋值&&& if(max & A[index])&&& {&&&&&&& max = A[index];&&& }&&& // A[0] 不是最小,则重新赋值&&& if(A[0] & A[index])&&& {&&&&&&& A[0]& =& A[index];&&& }}//返回最大值-最小值return max - A[0];算法复杂度为O(N) 空间复杂度为O(1)赞同
楼猪,,你要讲的是排序还是求最大值..标题跟内容不相符啊...傻帽,看不懂吗?老师先给你分析下题目,首先求求组中所有相邻元素的值差,然后求绝对值,最后求绝对值中的最大值,傻帽,回家练练吧,这里不适合你。
o(1)?说笑吧。这种需求怎么着都得遍历到吧?
只是遍历一次,记录下最大值和最小值,就可以了么
那个被楼主认为是很好的算法,我没仔细看,只是看到sort,就凌乱了~
怎么会凌乱了呢
duoduodeai 写道gaopenghigh 写道都是非负整数,那不就是最大值减去最小值吗?&& 不是,gao_xianglong已经给出算法了,也谢谢你的回复,小弟谢过了不是最大减最小的测试用例?没错。。。。我傻了。还统计四个变量。。最大减最小足以。。遍历一次足矣。。复杂2n
gaopenghigh 写道都是非负整数,那不就是最大值减去最小值吗?&& 不是,gao_xianglong已经给出算法了,也谢谢你的回复,小弟谢过了不是最大减最小的测试用例?
gaopenghigh 写道都是非负整数,那不就是最大值减去最小值吗?&& 不是,gao_xianglong已经给出算法了,也谢谢你的回复,小弟谢过了
都是非负整数,那不就是最大值减去最小值吗?&&
不是,gao_xianglong已经给出算法了,也谢谢你的回复,小弟谢过了
& 上一页 1
duoduodeai
浏览: 36104 次
来自: 青岛
整合了啊,你试试启动参数设置PermSize
并发一般来说,有两个概念,一个是并发连接数,这个我们一般可以通 ...
我有的话就不工作了,拿去投资
还需要扣税吧,到手大概20万? 是否辞职要看你现在的工作状况, ...
chenzheng8975 写道豆皮,一栋房子都买不起总比你死 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 MFRC522函数怎么调用 的文章

 

随机推荐