我已经解决了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
---------------------------------------
您可以使用散列集
在一次传递(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代码之上 所以碎片装在这里