| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | 
							- type ints []int
 
- func (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
 
- }
 
 
  |