首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2022-01-02:给定两个数组A和B,长度都是N, A[i]不可以在A中和其他数交换,只可以选择和B[i]交换(0<=i<n

2022-01-02:给定两个数组A和B,长度都是N, A[i]不可以在A中和其他数交换,只可以选择和B[i]交换(0<=i<n

作者头像
福大大架构师每日一题
发布2022-01-13 18:39:44
发布2022-01-13 18:39:44
4200
举报

2022-01-02:给定两个数组A和B,长度都是N,

A[i]不可以在A中和其他数交换,只可以选择和B[i]交换(0<=i<n),

你的目的是让A有序,返回你能不能做到。

答案2022-01-02:

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

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

代码语言:javascript
复制
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代码](https://github.com/algorithmzuo/coding-for-great-offer/blob/main/src/class40/Code04_LetASorted.java)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档