0%

[筆記] HackerRank - Sales by Match

HackerRank 上的題目:找出成對的襪子並算出總共有幾雙
此系列文章主要是自己在解題時覺得有趣的題目,記錄下來讓自己以後好複習,有興趣的人可以參考看看

先來看看題目

解題步驟:

  1. 想想怎麼找出成對的襪子並記錄
  2. 計算出所有成對的襪子有幾雙

Python

如果第一個想到用 dictionary 來實踐儲存不同顏色襪子有幾隻的話,此篇文章 有提到相關用法,這裡就不贅述。

最好要將 dictionay 裡所有的 value 值找出成對的並算出共有幾對的話可以使用 sum。

sum 的用法

語法: sum(iterable, start)

input:

1
2
3
4
list = [2, 4, 1, 3, 6]
print(sum(list))
// 起始點從 100 開始 (目前沒使用過)
print(sum(list, 100))

output:

1
2
16
116

解題

方法一 dict + sum

1
2
3
def sockMerchant(n, ar):
pair_count = {i : ar.count(i) for i in ar}
return sum(i//2 for i in pair_count.values())

方法二 set + sum

1
2
3
def sockMerchant(n, ar):
pair_count = set(ar)
return sum(ar.count(i) // 2 for i in pair_count)

Java

方法一 for loop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static int sockMerchant(int n, int[] ar) {
int sum = 0;
for(int i = 0; i < n; i++) {
int count = 1;
if (ar[i] != -1) {
for(int j = i + 1; j < n; j++ ) {
if (ar[i] == ar[j]) {
count++;
ar[j] = -1;
}
}
System.out.print(count);
sum += Math.floor(count / 2);
}
}
return sum;
}

方法二 HashSet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.HashSet;
static int sockMerchant(int n, int[] ar) {
int count = 0;
HashSet<Integer> sock_set = new HashSet<Integer>();
for (Integer i: ar) {
if (sock_set.contains(i)) {
sock_set.remove(i);
count++;
} else {
sock_set.add(i);
}
}
return count;
}

ref: https://www.programiz.com/python-programming/methods/built-in/sum