数组为周期性变化,找出其中相邻的两个最大值,即
String a[]={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};
或者
String a[]={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};
并打输出其位置
有什么好的解决方案,讨论下
9 个解决方案
#1
想到了一个,遍历一遍所有的最大值,将对应的下表存入数组,取相邻的两个就行
#2
嗯最佳也是线性时间了,LZ自己说的就挺好
#3
如果都是这种离散线性正弦函数式数据,就是找峰值。
下标从0开始有n个值,感觉可以从下标1遍历到下标n-2,然后a[i]>a[i-1]&&a[i]>a[i+1],此时i就是你要的下标了
下标从0开始有n个值,感觉可以从下标1遍历到下标n-2,然后a[i]>a[i-1]&&a[i]>a[i+1],此时i就是你要的下标了
#4
因为数组有规律 所以 楼上正解
#5
是有规律的??
#6
很像是 规则波状数组,只不过是 波峰高度不一样而已。
遍历找相邻波峰 就OK
#7
是的,不过我刚说的方法有个漏洞,如果第一个就是最大值的话,第二个波峰的位置就不会被记录
#8
如果都是这种离散线性正弦函数式数据,就是找峰值。
下标从0开始有n个值,感觉可以从下标1遍历到下标n-2,然后a[i]>a[i-1]&&a[i]>a[i+1],此时i就是你要的下标了
这种方法有些理想化,因为这是我写成这样,实际的数组,可能出现最大值出现相邻的情况,比方说这种情况,6,7,8,8,8,,7,6你这种判断就意外情况太多了
#9
如果都是这种离散线性正弦函数式数据,就是找峰值。
下标从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的时候,就是峰值出现的时候。数组的开头、结尾单独判断即可。
#1
想到了一个,遍历一遍所有的最大值,将对应的下表存入数组,取相邻的两个就行
#2
嗯最佳也是线性时间了,LZ自己说的就挺好
#3
如果都是这种离散线性正弦函数式数据,就是找峰值。
下标从0开始有n个值,感觉可以从下标1遍历到下标n-2,然后a[i]>a[i-1]&&a[i]>a[i+1],此时i就是你要的下标了
下标从0开始有n个值,感觉可以从下标1遍历到下标n-2,然后a[i]>a[i-1]&&a[i]>a[i+1],此时i就是你要的下标了
#4
因为数组有规律 所以 楼上正解
#5
是有规律的??
#6
是有规律的??
很像是 规则波状数组,只不过是 波峰高度不一样而已。
遍历找相邻波峰 就OK
#7
是有规律的??
很像是 规则波状数组,只不过是 波峰高度不一样而已。
遍历找相邻波峰 就OK
是的,不过我刚说的方法有个漏洞,如果第一个就是最大值的话,第二个波峰的位置就不会被记录
#8
如果都是这种离散线性正弦函数式数据,就是找峰值。
下标从0开始有n个值,感觉可以从下标1遍历到下标n-2,然后a[i]>a[i-1]&&a[i]>a[i+1],此时i就是你要的下标了
这种方法有些理想化,因为这是我写成这样,实际的数组,可能出现最大值出现相邻的情况,比方说这种情况,6,7,8,8,8,,7,6你这种判断就意外情况太多了
#9
如果都是这种离散线性正弦函数式数据,就是找峰值。
下标从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的时候,就是峰值出现的时候。数组的开头、结尾单独判断即可。