问题描述
有一组数组:Stringa[]={1,2,3,4,5,6,7,6,,5,4,3,2,1,2,3,4,5,6,5,4,3,2,1,2,3,4,5,6,7,8,7,6,5,4};数组为周期性变化,找出其中相邻的两个最大值,即Stringa[]={1,2,3,4,5,6,7,6,,5,4,3,2,1,2,3,4,5,6,5,4,3,2,1,2,3,4,5,6,7,8,7,6,5,4};或者Stringa[]={1,2,3,4,5,6,7,6,,5,4,3,2,1,2,3,4,5,6,5,4,3,2,1,2,3,4,5,6,7,8,7,6,5,4};并打输出其位置有什么好的解决方案,讨论下
解决方案
解决方案二:
想到了一个,遍历一遍所有的最大值,将对应的下表存入数组,取相邻的两个就行
解决方案三:
嗯最佳也是线性时间了,LZ自己说的就挺好
解决方案四:
如果都是这种离散线性正弦函数式数据,就是找峰值。下标从0开始有n个值,感觉可以从下标1遍历到下标n-2,然后a[i]>a[i-1]&&a[i]>a[i+1],此时i就是你要的下标了
解决方案五:
因为数组有规律所以楼上正解
解决方案六:
是有规律的??
解决方案七:
引用5楼rui888的回复:
是有规律的??
很像是规则波状数组,只不过是波峰高度不一样而已。遍历找相邻波峰就OK
解决方案八:
引用6楼u012842647的回复:
Quote: 引用5楼rui888的回复:
是有规律的??很像是规则波状数组,只不过是波峰高度不一样而已。遍历找相邻波峰就OK
是的,不过我刚说的方法有个漏洞,如果第一个就是最大值的话,第二个波峰的位置就不会被记录
解决方案九:
引用3楼oh_Maxy的回复:
如果都是这种离散线性正弦函数式数据,就是找峰值。下标从0开始有n个值,感觉可以从下标1遍历到下标n-2,然后a[i]>a[i-1]&&a[i]>a[i+1],此时i就是你要的下标了
这种方法有些理想化,因为这是我写成这样,实际的数组,可能出现最大值出现相邻的情况,比方说这种情况,6,7,8,8,8,,7,6你这种判断就意外情况太多了
解决方案十:
引用8楼sjhxuelang的回复:
Quote: 引用3楼oh_Maxy的回复:
如果都是这种离散线性正弦函数式数据,就是找峰值。下标从0开始有n个值,感觉可以从下标1遍历到下标n-2,然后a[i]>a[i-1]&&a[i]>a[i+1],此时i就是你要的下标了这种方法有些理想化,因为这是我写成这样,实际的数组,可能出现最大值出现相邻的情况,比方说这种情况,6,7,8,8,8,,7,6你这种判断就意外情况太多了
嗯,可以再借助一个辅助变量flag,专门记录当前值大于前一个值,则flag=1,小于前一个值则flag=-1,等于前一个值不变。每当flag由1变成-1的时候,就是峰值出现的时候。数组的开头、结尾单独判断即可。