Array - AlternateElementsFromSortedArrays
从两个有序数组中轮流取元素,计算所有可能的有序数组
给定两个有序数组A和B,轮流从A和B中取元素,最后生成一个新的有序数组。数组的最后一个元素应当是B中的元素。计算所有这样的数组。
1 | func alternateElement(a [] int , b [] int , i, j int , flag bool, arr *[] int , result *[] int ) |
i表示从i到len(A)-1的范围可以取,j表示从j到len(B)-1范围可以取,flag true表示从A取,flag false 表示从B取,result则存储所有结果的集合。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package main import "fmt" func main() { a := [] int { 1 , 3 , 6 } b := [] int { 2 , 5 } arr := [] int {} result := [][] int {} alternateElement(a, b, 0 , 0 , true , &arr, &result) fmt.Println( "result: " , result) } func alternateElement(a [] int , b [] int , i, j int , flag bool, arr *[] int , result *[][] int ) { if flag { // fetch from a if len(*arr) == 0 { for k := i; k < len(a); k++ { tmp := *arr tmp = append(tmp, a[k]) alternateElement(a, b, k+ 1 , j, false , &tmp, result) } return //? } for k := i; k < len(a); k++ { if a[k] > (*arr)[len(*arr)- 1 ] { tmp := *arr tmp = append(tmp, a[i]) alternateElement(a, b, k+ 1 , j, false , &tmp, result) } } return } // fetch from b for k := j; k < len(b); k++ { if b[k] > (*arr)[len(*arr)- 1 ] { tmp := *arr tmp = append(tmp, b[k]) // arr must be ended with element in b *result = append(*result, tmp) if k+ 1 != len(b) { alternateElement(a, b, i, k+ 1 , true , &tmp, result) } } } } |