题解 | #最佳配对#

最佳配对

https://www.nowcoder.com/practice/8baf0ea64dcb42258746f72224f8c4f5

解题思路

这是一道关于数组匹配的题目,主要思路如下:

  1. 给定两个长度为 的数组 ,需要修改 中的一个元素
  2. 时,认为 是一个配对
  3. 每个元素最多只能在配对集合中出现一次
  4. 目标是通过修改 中的一个元素,使得最佳配对集合的元素最多

解题步骤:

  1. 首先统计当前能配对的数量
  2. 如果已经完全配对 ,则需要减少一个配对以便修改
  3. 如果未完全配对,则修改后可以增加一个配对
  4. 输出最终的配对数量

代码

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int a[10] = {0}, b[10] = {0};
    
    // 输入数组A和B
    for(int i = 0; i < n; i++)
        cin >> a[i];
    for(int i = 0; i < n; i++)
        cin >> b[i];
    
    // 计算当前配对数量
    int k = 0;
    bool used[10] = {false};
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            if(a[i] == b[j] && !used[j]) {
                k++;
                used[j] = true;
                break;
            }
        }
    }
    
    // 根据配对情况调整结果
    if(k == n)
        k--;
    else
        k++;
        
    cout << k << endl;
    return 0;
}
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        int[] b = new int[n];
        
        // 输入数组
        for(int i = 0; i < n; i++)
            a[i] = sc.nextInt();
        for(int i = 0; i < n; i++)
            b[i] = sc.nextInt();
            
        // 计算配对数量
        int k = 0;
        boolean[] used = new boolean[n];
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                if(a[i] == b[j] && !used[j]) {
                    k++;
                    used[j] = true;
                    break;
                }
            }
        }
        
        // 输出结果
        if(k == n)
            k--;
        else
            k++;
            
        System.out.println(k);
    }
}
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

# 计算当前配对数量
k = 0
used = [False] * n
for i in range(n):
    for j in range(n):
        if a[i] == b[j] and not used[j]:
            k += 1
            used[j] = True
            break

# 根据配对情况调整结果
if k == n:
    k -= 1
else:
    k += 1

print(k)

算法及复杂度

  • 算法:贪心匹配
  • 时间复杂度: - 需要遍历所有可能的配对
  • 空间复杂度: - 需要存储两个数组和访问标记数组
全部评论

相关推荐

昨天 12:43
已编辑
小码王_运维
蚂蚁岗位内推官:1 你觉得你有哪些缺点和优点? 2 你怎么评价你面试的这家公司? 3 你在校期间,有没有哪段时间或者某件事情让你受挫? 4 在校期间遇到最有挑战的事情是什么? 5 目前手上有 offer 吗? 6 自我介绍 7 职业规划 8 报学校专业是怎么考虑的? 9 工作城市 10 你是独生子女吗? 11 那你男朋友吗? 12 那你们出来面试都了解过哪些企业? 13 到后期你们每个人手上有好几个offer,哪些因素决定你们选择这家公司? 14 你更倾向哪种公司?有什么特别的点? 15 你大学有没有特别难忘的经历或者项目分享一下的? 16 团队合作中遇到什么问题? 17 对互联网加班有什么看法? 18 那你现在的技术薄弱点在哪里,怎么去突破? 19 你的兴趣爱好有哪些? 20 现在进度最快的公司是哪家? 21 拿到哪几家offer,是否谈过薪资等
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务