批處理新手入門導讀[視頻教程]批處理基礎視頻教程[視頻教程]VBS基礎視頻教程
[批處理文件精品]批處理版照片整理器[批處理文件精品]純批處理備份&還原驅動在線第三方下載
返回列表 發帖

挑出峰值數字和所處位置(coderwars 5級挑戰題)

本帖最后由 ivor 于 2020-5-29 21:53 編輯

看著還不錯,和大家分享一下。


名稱:挑出峰值數字和所處位置

詳細介紹:

例子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代碼:
  1. 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]
  2. def pick_peaks(arr):
  3.     pos = []
  4.     prob_peak = False
  5.     for i in range(1, len(arr)):
  6.         if arr[i] > arr[i-1]:
  7.             prob_peak = i
  8.         elif arr[i] < arr[i-1] and prob_peak:
  9.             pos.append(prob_peak)
  10.             prob_peak = False
  11.     return {'pos':pos, 'peaks':[arr[i] for i in pos]}
  12. print(pick_peaks(a))
復制代碼
腳本小子:www.jbxiaozi.com

這個峰值有什么范圍嗎?

TOP

回復 2# Gin_Q


    比如:例子2索引位置14比左右數值都小,如果和右邊數值相等,則繼續往后找,找到后才能確定14位置為峰值,如果右邊找不到更小的數值則不成立。

形象比喻就像山頭。
腳本小子:www.jbxiaozi.com

TOP

那第一位和最后一位是不是漏掉了?
1

評分人數

    • ivor: 是的,第一位和最后不能做峰值技術 + 1

TOP

嚴格說,前后都要算,
補個 ps
  1. $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;
  2. Function Get-SpaceValue {
  3. param(
  4. [Parameter(Mandatory = $true)][double[]]$arr,
  5. [ValidateSet(0, -1)][sbyte]$y = -1 #[0]不計算兩端 [-1]計算兩端
  6. )
  7. $r = for ($i = $y; $i -lt $arr.Count - 2 - $y; $i++) {
  8. if ([Linq.Enumerable]::Max([double[]]$arr[$i..($i + 2)]) -eq $arr[$i + 1]) {
  9. @{p = $i + 1; v = $arr[$i + 1] }
  10. }
  11. }
  12. return ConvertTo-Json -Input @{位置 = $r.p; 峰值 = $r.v } -Comp
  13. }
  14. Get-SpaceValue -arr $A
復制代碼
結果
  1. {"峰值":[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]}
復制代碼
1

評分人數

    • ivor: 不符合題目要求,請參考例子2.不只是簡單的 ...技術 + 1
QQ: 458609586
腳本默認優先 [PowerShell]

TOP

回復 5# xczxczxcz


    忽略了一種相鄰兩個(或更多個)數可能是相等的情況。
腳本小子:www.jbxiaozi.com

TOP

回復 6# ivor


    確實忽略了,看來還是挨個比簡單。
QQ: 458609586
腳本默認優先 [PowerShell]

TOP

返回列表
广西快乐双彩开奖结果查询今晚