赞
踩
题目:
给定两个只包含数字的数组a, b,调整数组a里面数字的顺序,使得尽可能多的a[i] >b[i]。
数组a和b中的数字各不相同。
输出所有可以达到最优结果的a数组的数量
输入描述
输入的第一行是数组a中的数字,其中只包含数字,每两个数字之间相隔一个空格,a数组大
小不超过10
输入的第二行是数组b中的数字,其中只包含数字,每两个数字之间相隔一个空格,b数组大
小不超过10
输出描述
输出所有可以达到最优结果的a数组数量
示例1:
输入:
11 8 20
10 137
输出:
1
说明:
最优结果只有一个,a =[11,20,8],故输出1
示例2:
输入:
11 12 20
10 13 7
输出:
2
说明:
有两个a数组的排列可以达到最优结果[ 12,20,11] 和[11,20,12] ,故输出2。
题解:
首先最优解。这个可以参考letcode这个题目:. - 力扣(LeetCode)
田忌赛马。
这边因为数组大小不超过10,所以可以采用DFS暴利解法,把所有的数据都拿到比较,然后找出最优解的个数就可以了。
关于DFS,可以看下这个视频,就能理解了。dfs(迷宫求解代码实现)_哔哩哔哩_bilibili
代码
- import java.util.*;
-
- public class OverCountNum {
- private static Map<Integer, Integer> countMap = new HashMap<>();
- private static List<Integer> countList = new ArrayList<>();
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
-
- String aNumString[] = sc.nextLine().split(" ");
- String bNumString[] = sc.nextLine().split(" ");
-
- int aNum[] = new int[aNumString.length];
- int bNum[] = new int[bNumString.length];
- int aLength = aNumString.length;
- int bLength = bNumString.length;
-
- int visit[] = new int[aLength];
- for (int i = 0; i < aLength; i++) {
- aNum[i] = Integer.valueOf(aNumString[i]);
- visit[i] = 0;
- }
-
- for (int i = 0; i < bLength; i++) {
- bNum[i] = Integer.valueOf(bNumString[i]);
- }
-
- int result[] = new int[aLength];
- dfs(0,result,aNum,bNum,aLength,visit);
- Collections.sort(countList);
- System.out.println(countMap.get(countList.get(countList.size()-1)));
- }
-
- private static void dfs(int currentPos, int[] result, int[] aNum, int[] bNum, int aLength, int[] visit) {
- if (currentPos == aLength) {
- countCountMap(result,bNum);
- return;
- }
- int i = 0;
- while (i < aLength) {
- if (i >= aLength) {
- break;
- }
- if (visit[i] == 0) {
- visit[i] = 1;
- result[currentPos] = aNum[i];
- dfs(currentPos + 1, result, aNum, bNum, aLength, visit);
- visit[i] = 0;
- }
- i++;
- }
- }
-
- private static void countCountMap(int[] result, int[] bNum) {
- int count = 0;
- for (int i = 0; i < result.length; i++) {
- if (result[i] > bNum[i]) {
- count++;
- }
- }
- if (countMap.containsKey(count)) {
- countMap.put(count, countMap.get(count) + 1);
- } else {
- countMap.put(count, 1);
- }
-
- if (!countList.contains(count)) {
- countList.add(count);
- }
- }
- }
验证:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。