2022-01-02:给定两个数组A和B,长度都是N, A[i]不可以在A中和其他数交换,只可以选择和B[i]交换(0<=i<n), 你的目的是让A有序,返回你能不能做到。

答案2022-01-02:

自然智慧,递归。从左往右,两种选择,选A[i]或者B[i]。

代码用golang编写。代码如下:

package main

import (
    "fmt"
    "math"
)

func main() {
    A := []int{3, 2, 2}
    B := []int{1, 4, 3}
    ret := letASorted(A, B)
    fmt.Println(ret)
}

func letASorted(A, B []int) bool {
    return process(A, B, 0, math.MinInt64)
}

// 当前推进到了i位置,对于A和B都是i位置
// A[i]前一个数字,lastA
// 能否通过题意中的操作,A[i] B[i] 让A整体有序
func process(A, B []int, i, lastA int) bool {
    if i == len(A) {
        return true
    }
    // 第一种选择 : A[i]不和B[i]交换
    if A[i] >= lastA && process(A, B, i+1, A[i]) {
        return true
    }
    // 第一种选择 : A[i]和B[i]交换
    if B[i] >= lastA && process(A, B, i+1, B[i]) {
        return true
    }
    return false
}

执行结果如下: 图片


左神java代码