Array - Array Rotation

Array - AlternateElementsFromSortedArrays

violet posted @ 5 年前 in 算法 with tags 算法 algorithm , 282 阅读

从两个有序数组中轮流取元素,计算所有可能的有序数组

给定两个有序数组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)
            }
        }
    }
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter