扫码关注官方订阅号
要求:
1.不能对这个数组进行整体排序
2.若要用循环,只能一重循环
3.不使用额外空间
请问该怎么实现呢?
认证0级讲师
aa=[1,3,5,2,7,6] aa[aa.indexOf(Math.max.apply(null,aa))]=null Math.max.apply(null,aa) 6
用两个指针, 第一个指向第一个元素 , 第二个执行第二个元素, 然后遍历, 比较, 改指针...
接楼上思路
function findSecondNum(arr){ var max=arr[0]; var second=arr[1]; for(var i=0,len=arr.length;i<len;i++){ if(arr[i]>max){ second=max; max=arr[i]; }else if(arr[i]<max&&arr[i]>second){ second=arr[i]; } } return second; }
这个的难度在“不使用额外空间”严格来说 “浴火小青春”的实现还是用了“额外空间”放置新临时变量i,以及max,second等
function find2Max(arr){ //仅对数值数组,但不判断数组是否全是数值 if(arr.length < 2){ // 处理传入数据不符合的情况 return NaN; } if (arr.length == 2){ // 处理只有2个数据的情况 return (arr[0]>arr[1]?arr[1]:arr[0]); } // 后面处理数据有3个及以上的情况 if(arr[0]>arr[1] && arr[0]>arr[2] ){ if(arr[1]<arr[2]){ arr[1]=arr[2]; } } if(arr[1]>arr[0] && arr[1]>arr[2]){ if(arr[0]>arr[2]){ arr[2]=arr[0]; arr[0]=arr[1]; }else{ arr[0]=arr[1]; arr[1]=arr[2]; } } if(arr[2]>arr[0] && arr[2]>arr[1]){ if(arr[0]>arr[1]){ arr[1]=arr[0] arr[0]=arr[2]; }else{ arr[0]=arr[2] } } arr[2]=3; for(;arr[2]<arr.length;arr[2]++){ if( arr[ arr[2] ] > arr[0] ){ arr[1]=arr[0]; arr[0]=arr[ arr[2] ]; }else if( arr[ arr[2] ] > arr[1]){ arr[1] = arr[ arr[2] ] ; } } return arr[1]; }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
用两个指针, 第一个指向第一个元素 , 第二个执行第二个元素, 然后遍历, 比较, 改指针...
接楼上思路
这个的难度在“不使用额外空间”
严格来说 “浴火小青春”的实现还是用了“额外空间”放置新临时变量i,以及max,second等