1387_将整数按权重排序

func getKth(lo int, hi int, k int) int {
    
}

type num struct {
    data   int
    weight int
}
type nlist []num

// 设置权重
func (n *num) SetWeight() {
    for i := n.data; i != 1; n.weight++ {
        if i%2 == 0 {
            i = i / 2
        } else {
            i = 3*i + 1
        }
    }
}
func (n nlist) Len() int {
    return len(n)
}
func (n nlist) Less(i, j int) bool {
    if n[i].weight > n[j].weight || (n[i].weight == n[j].weight && n[i].data > n[j].data) {
        return false
    }
    return true
}
func (n nlist) Swap(i, j int) {
    n[i], n[j] = n[j], n[i]
}
func getKth(lo int, hi int, k int) (ans int) {

    nums := make(nlist, hi-lo+1)
    // 记录走了多少步
    for i := range nums {
        nums[i].data = i + lo
        nums[i].SetWeight()
    }
    // 排序
    sort.Sort(nums)
    return nums[k-1].data
}