真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

leetcode如何找出滑動(dòng)窗口中位數(shù)

小編給大家分享一下leetcode如何找出滑動(dòng)窗口中位數(shù),希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、牡丹江網(wǎng)站維護(hù)、網(wǎng)站推廣。

中位數(shù)是有序序列最中間的那個(gè)數(shù)。如果序列的大小是偶數(shù),則沒有最中間的數(shù);此時(shí)中位數(shù)是最中間的兩個(gè)數(shù)的平均數(shù)。

例如:

[2,3,4],中位數(shù)是 3

[2,3],中位數(shù)是 (2 + 3) / 2 = 2.5

給出一個(gè)數(shù)組 nums,有一個(gè)大小為 k 的窗口從最左端滑動(dòng)到最右端。窗口中有 k 個(gè)數(shù),每次窗口移動(dòng) 1 位。你的任務(wù)是找出每次窗口移動(dòng)后得到的新窗口中元素的中位數(shù),并輸出由它們組成的數(shù)組。

例如:

給出 nums = [1,3,-1,-3,5,3,6,7],以及 k = 3。

窗口位置                      中位數(shù)
---------------               -----
[1  3  -1] -3  5  3  6  7       1
1 [3  -1  -3] 5  3  6  7       -1
1  3 [-1  -3  5] 3  6  7       -1
1  3  -1 [-3  5  3] 6  7       3
1  3  -1  -3 [5  3  6] 7       5
1  3  -1  -3  5 [3  6  7]      6

 因此,返回該滑動(dòng)窗口的中位數(shù)數(shù)組 [1,-1,-1,3,5,6]。

提示:
假設(shè)k是合法的,即:k 始終小于輸入的非空數(shù)組的元素個(gè)數(shù).

解題思路:

1,注意中位數(shù)是窗口內(nèi)數(shù)據(jù)排序后的中位數(shù)

2,對(duì)于窗口內(nèi)部可以采用插入排序的思想進(jìn)行排序

3,初始時(shí),采用插入排序,將前k個(gè)值,插入窗口

4,找到左指針對(duì)應(yīng)元素在窗口內(nèi)位置j

5,移動(dòng)左右指針,將右指針對(duì)應(yīng)元素替換窗口上一個(gè)左指針對(duì)應(yīng)元素

6,剩下的就是排序的思路,向左移動(dòng)或者向右移動(dòng),直到有序

func medianSlidingWindow(nums []int, k int) []float64 {   var mid []float64    win:=make([]int,k)    for i:=0;i        win[i]=nums[i]        for j:=i;j>0;j--{            if win[j]                win[j],win[j-1]=win[j-1],win[j]            }else{                break;            }        }    }     mid=append(mid,midd(win))    for i:=k;i<=len(nums)-1;i++{        win=window(win,nums[i],nums[i-k])        mid=append(mid,midd(win))    }    return mid}
func window(nums []int,val int,last int)[]int{    j:=0    for ;j        if nums[j]==last{            break;        }    }    nums[j]=val
for i:=j;i>0;i--{        if nums[i-1]>nums[i]{            nums[i-1],nums[i]=nums[i],nums[i-1]        }else{            break        }          }        for i:=j;i        if nums[i]>nums[i+1]{            nums[i],nums[i+1]=nums[i+1],nums[i]        }else{            break        }          }  return nums}
func midd(n []int)float64{    fmt.Println(n)    if len(n)%2!=0{        return float64(n[len(n)/2])    }    return float64(n[len(n)/2]+n[len(n)/2-1])/2.0}

看完了這篇文章,相信你對(duì)“l(fā)eetcode如何找出滑動(dòng)窗口中位數(shù)”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


分享文章:leetcode如何找出滑動(dòng)窗口中位數(shù)
當(dāng)前URL:http://weahome.cn/article/jihdgh.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部