| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | type ints []intfunc (is ints) search(x int) int {	beg, end := 0, len(is)-1	for beg <= end {		mid := beg + (end-beg)/2		if is[mid] < x {			beg = mid + 1		} else {			end = mid - 1		}	}	return beg}func (is *ints) insert(x int) {	idx := is.search(x)	if n := len(*is); idx == n {		*is = append(*is, x)	} else {		nis := make([]int, n+1)		copy(nis, (*is)[:idx])		nis[idx] = x		copy(nis[idx+1:], (*is)[idx:])		*is = nis	}}func (is *ints) delete(x int) {	idx := is.search(x)	if n := len(*is); idx == n-1 {		*is = (*is)[:n-1]	} else {		copy((*is)[idx:], (*is)[idx+1:])		*is = (*is)[:n-1]	}}func medianSlidingWindow(nums []int, k int) (ans []float64) {	n := len(nums)	if n < k || k == 0 {		return	}	var win ints = make([]int, 0)	for i := 0; i < n; i++ {		if k <= i {			win.delete(nums[i-k])		}		win.insert(nums[i])		if k-1 <= i {			if k%2 == 1 {				ans = append(ans, float64(win[k/2]))			} else {				ans = append(ans, float64(win[k/2-1]+win[k/2])/2.0)			}		}	}	return}
 |