挑出峰值数字和所处位置(coderwars 5级挑战题)
[i=s] 本帖最后由 ivor 于 2020-5-29 21:53 编辑 [/i]看着还不错,和大家分享一下。
名称:挑出峰值数字和所处位置
详细介绍:
例子1, 数组 arr = [0, 1, 2, 5, 1, 0] 峰值索引位置在 3,峰值对应为 5 (since arr[3] equals 5). 结果:{pos: [3], peaks: [5]}
例子2,数组 arr = [1,2,5,4,3,2,3,6,4,1,2,3,3,4,5,3,2,1,2,3,5,5,4,3]), 索引位置在[2,7,14,20] 峰值对应为[5,6,5,5] 结果 :{"pos":[2,7,14,20], "peaks":[5,6,5,5]})
抛砖引玉附上Python代码:[code]a = [11, 20, 14, 4, 5, 4, 8, 17, 14, 9, 17, 20, 8, 19, 17, 15, 13, 20, 16, 7, 2, 11, 14, 18, 11, 2, 15, 1, 5, 4, 5, 1, 6, 6, 9, 13, 18, 19, 9, 17, 12, 19, 17, 2, 13, 9, 19, 2, 11]
def pick_peaks(arr):
pos = []
prob_peak = False
for i in range(1, len(arr)):
if arr[i] > arr[i-1]:
prob_peak = i
elif arr[i] < arr[i-1] and prob_peak:
pos.append(prob_peak)
prob_peak = False
return {'pos':pos, 'peaks':[arr[i] for i in pos]}
print(pick_peaks(a))[/code] 这个峰值有什么范围吗? [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=229803&ptid=55950]2#[/url] [i]Gin_Q[/i] [/b]
比如:例子2索引位置14比左右数值都小,[color=Red]如果和右边数值相等[/color],则继续往后找,找到后才能确定14位置为峰值,如果右边找不到更小的数值则不成立。
形象比喻就像山头。 那第一位和最后一位是不是漏掉了? 严格说,前后都要算,
补个 ps[code]
$A = 20, 14, 4, 5, 4, 8, 17, 14, 9, 17, 20, 8, 19, 17, 15, 13, 20, 16, 7, 2, 11, 14, 18, 11, 2, 15, 1, 5, 4, 5, 1, 6, 6, 9, 13, 18, 19, 9, 17, 12, 19, 17, 2, 13, 9, 19, 2, 11;
Function Get-SpaceValue {
param(
[Parameter(Mandatory = $true)][double[]]$arr,
[ValidateSet(0, -1)][sbyte]$y = -1 #[0]不计算两端 [-1]计算两端
)
$r = for ($i = $y; $i -lt $arr.Count - 2 - $y; $i++) {
if ([Linq.Enumerable]::Max([double[]]$arr[$i..($i + 2)]) -eq $arr[$i + 1]) {
@{p = $i + 1; v = $arr[$i + 1] }
}
}
return ConvertTo-Json -Input @{位置 = $r.p; 峰值 = $r.v } -Comp
}
Get-SpaceValue -arr $A
[/code]结果[code]{"峰值":[20,5,17,20,19,20,18,15,5,5,6,19,17,19,13,19,11],"位置":[0,3,6,10,12,16,22,25,27,29,31,36,38,40,43,45,47]}[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=229873&ptid=55950]5#[/url] [i]xczxczxcz[/i] [/b]
忽略了一种相邻两个(或更多个)数可能是相等的情况。 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=229883&ptid=55950]6#[/url] [i]ivor[/i] [/b]
确实忽略了,看来还是挨个比简单。
页:
[1]