我需要在选择 UTXO 时应用特定的策略。该策略应尽可能减少 utxo 的使用。应该设置此策略的边界,理想情况下,应优先考虑较少数量的 utxo,直到 10 倍比率。
为了使问题更简单,我们假设有一个整数列表:= []int{},我需要找到元素'target',其中:list[index] = target,如果这样的元素不存在,那么我需要从 slice 中找到大于 target 但需要 <= target*10 的第一个元素
如果我找不到这样的元素,那么我需要找到两个元素 x,y 其中:x + y = target,如果这样的元素不存在,我需要从 slice 中找到大于 target 但需要的前两个元素<= 目标*10
如果我无法找到这样的元素,那么我需要找到三个元素 x、y、z 其中:x + y + z = 目标,如果这样的元素不存在,我需要从切片中找到大于目标的前三个元素但需要 <= target*10
如果我找不到这样的三个元素,我需要找到四个、五个……直到 len(list)。
示例 1:
target = 6
list := []int {1,2, 6, 10}
result = list[2] = 6
示例 2:
target = 6
list := []int {1,2, 3, 10}
result = list[3] = 10
示例 3:
target = 6
list := []int {1,2, 3, 10}
result = list[3] = 10
示例 4:
target = 6
list := []int {1,3, 3, 61}
result = list[1] + list[2]= 6
请参阅下面的测试用例,我需要通过递归或以某种方式改进以获得通用解决方案:
func Test_SelectUtxo(t *testing.T){
x := 6
list := []int{1, 2, 3, 64, 65, 62, 62, 62, 61, 59}
fmt.Println("ONE = x")
for i := 0; i < len(list) - 1; i ++ {
if list[i] == x {
fmt.Println(i)
break
}
}
fmt.Println("ONE <= x*10")
for i := 0; i < len(list); i ++ {
if list[i] > x {
if list[i] <= x*10 && list[i] > x {
fmt.Println(list[i])
break
}
}
}
fmt.Println("TWO = x")
out:
for i := 0; i < len(list) - 1; i ++ {
for j:=i + 1; j < len(list); j ++ {
if list[i] + list[j] == x {
fmt.Println(i)
fmt.Println(j)
break out
}
}
}
fmt.Println()
fmt.Println("TWO <= x*10")
out1:
for i := 0; i < len(list) - 1; i ++ {
for j:=i + 1; j < len(list); j ++ {
if list[i] + list[j] <= x*10 && list[i] + list[j] > x {
fmt.Println(i)
fmt.Println(j)
break out1
}
}
}
慕村225694
相关分类