当前位置: 首页 > 知识库问答 >
问题:

我们能以较少的复杂性解决这个袜子商人的问题吗?

贺宏逸
2023-03-14

我已经解决了hackerrank Sock Merchant问题,但我想降低代码的复杂性(我不确定这是否可能)。

约翰在一家服装店工作。他有一大堆袜子,必须按颜色配对出售。给定一个表示每只袜子颜色的整数数组,确定有多少双颜色匹配的袜子。

在下面的编辑器中完成sockMerchant函数。它必须返回一个整数,表示可用的匹配socks对的数量。

sockMerchant具有以下参数:

>

  • n:袜子堆中的数量

    约束条件

    >

  • 1<=n<=100

    1<=AR[i]<=100,其中0<=i

    9
    10 20 20 10 10 30 50 10 20
    
    3
    

    我的解决方案:

    package com.hackerrank.test;
    
    public class Solution {
        public static void main(String[] args) {
            //Initialize array
            int[] arr = new int[]{10, 20, 20, 10, 10, 30, 50, 10, 20};
            //Array fr will store frequencies of element
    
    
            System.out.println("---------------------------------------");
            System.out.println(" sockMerchant output " + sockMerchant(9, arr));
            System.out.println("---------------------------------------");
    
        }
    
        static int sockMerchant(int n, int[] ar) {
            int pairs = 0;
            int frequencyArray[] = new int[ar.length];
            int frequencyTemp = -1;
            for (int i = 0; i < ar.length; i++) {
                int count = 1;
                for (int j = i + 1; j < ar.length; j++) {
                    if (ar[i] == ar[j]) {
                        count++;
                        frequencyArray[j] = frequencyTemp;
                    }
                }
                if (frequencyArray[i] != frequencyTemp) {
                    frequencyArray[i] = count;
                }
            }
    
            for (int i = 0; i < frequencyArray.length; i++) {
                if (frequencyArray[i] != frequencyTemp) {
                    int divide = frequencyArray[i] / 2;
                    pairs += divide;
                }
            }
            return pairs;
        }
    }
    

    输出为:

        ---------------------------------------
        sockMerchant frequency 3
        ---------------------------------------
    
  • 共有1个答案

    李星波
    2023-03-14

    您可以使用散列集在一次传递(O(n))中解决此问题,该散列集具有O(1)put和查找时间。每个元素已经在集合中,在这种情况下,它会被移除,并且pair计数器会增加,或者不是,在这种情况下,您会添加它:

    int[] arr = new int[]{10, 20, 20, 10, 10, 30, 50, 10, 20};
    
    HashSet<Integer> unmatched = new HashSet<>();
    int pairs = 0;
    for(int i = 0; i < arr.length; i++) {
        if(!unmatched.add(arr[i])) {
            unmatched.remove(arr[i]);
            pairs++;
        }
    }
    
     类似资料:
    • ~$npm安装-g yo npm错误!达尔文14.3。0 NPM ERR!"节点"/usr/本地/bin/npm""安装"-g""yo" npm错误!节点v0。12.5 npm错误!npm v2。14 npm错误!路径/usr/local/lib/node_模块/yo npm错误!代码EACCES NPM ERR!errno-13 npm错误!错误:EACCES,rmdir'/usr/local/

    • 约翰在一家服装店工作。他有一大堆袜子,必须按颜色配对出售。给定一个表示每只袜子颜色的整数数组,确定有多少双颜色匹配的袜子。 例如,有颜色的袜子。有一对颜色和一对颜色。剩下三只零零散散的袜子,每种颜色一只。对数为。 我的代码: 我试着用不同的方法来做这个问题。例如:首先频率是3,包含自身,然后如果和如果则增加,所以如果来然后再次从计数频率。然后我们得到了频率从到,到,到。 因此我们得到对,对:tot

    • 启动错误 ApplicationContext.若要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2019-10-17 15:44:43.968错误10460--[main]O.S.Boot.SpringApplication:应用程序运行失败 我的pom.xml:

    • Traceback(最近调用最后一次):文件"C:\用户\josej\AppData\本地\程序\Python\Python310\lib\站点包\mysql\连接器\abstracts.py",第553行,在配置DEFAULT_CONFIGURATION[key]KeyError:'datebase' 在处理上述异常期间,发生了另一个异常: 回溯(最近一次调用):文件“C:\Users\jose

    • 给出一个由N个整数a组成的序列,用a[1],a[2]….a[N]表示。序列中的每个整数都有一个与其相关联的值W[1],W[2]……。W[N]。你必须选择给定数组a的一个子序列,使a中的所有元素都是严格递增的,并且在这个选定的子序列中元素的值之和是最大的。你必须打印这个最大值。 样本输入 我因为对比关系而变得很虚弱 约束1<=T<=51<=N<=2000001<=a[i]<=10^9,其中i∈[1.

    • 所以我在我的应用程序中实现了swipeRefresh布局,但当我刷新它时,它会复制我的项目。。。这是我的xlm代码 在我的java代码之上 所以碎片装在这里