【发布时间】:2019-02-05 14:25:59
【问题描述】:
你正在玩一个有 N 张牌的游戏。每张卡片的两边都有一个正整数。卡片放在桌子上。游戏的分数是正面朝上牌上没有出现的最小正整数。你可以把一些牌翻过来。翻转它们后,您然后阅读面朝上的数字并重新计算分数。你能达到的最高分是多少?
写一个函数:
class Solution {
public int solution(int[] A, int[] B);
}
给定两个整数数组 A 和 B,长度均为 N,描述写在卡片两面的数字,分别朝上和朝下,返回可能的最大分数。
例如,给定A = [1, 2, 4, 3] 和B = [1, 3, 2, 3],您的函数应该是return 5,因为在不翻转任何卡片的情况下,从该序列中排除的最小正整数是 5。
例如,给定A = [1, 2, 3, 3] 和B = [1, 3, 4, 3] 应该return 5。
给定 A = [4, 2, 1, 6, 5] 和 B = [3, 2, 1, 7, 7],你的函数应该返回 4,因为我们可以翻转第一张牌,这样面朝上的数字是 [3, 2, 1, 6, 5] 并且不可能同时拥有两者数字 3 和 4 朝上。
给定A = [2, 3] 和B = [2, 3],你的函数应该是return 1,因为无论怎样翻牌,面朝上的数字都是[2, 3]。
为以下假设编写一个有效的算法:
N 是[1..100,000]; 范围内的整数
数组 A、B 的每个元素都是[1..100,000,000]; 范围内的整数
输入数组大小相等
请提供解决此问题的方法。
【问题讨论】:
-
欢迎来到 Stack Overflow - 我们很乐意帮助您解决特定的编程问题,但我们不是来为您做功课或提供免费的代码编写服务。见How to Ask 和how do I ask and answer homework questions
-
不是作业!我无法找出解决这个问题的方法。我只是在寻找一些提示或方法。这是在在线测试期间被问到的。排序不起作用有什么可以解决这个问题的另一种最佳方法?请帮忙
-
首先,您必须弄清楚任何卡片上没有的最小数字是多少。其次,您能否创建一个排列,使得不显示小于该数字的卡片?起泡,冲洗,重复。弄清楚你将如何手工完成。然后在计算机程序中实现这些步骤。
标签: arrays algorithm sorting search maximize