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

解題步驟:
- 想想怎麼找出成對的襪子並記錄
- 計算出所有成對的襪子有幾雙
Python
如果第一個想到用 dictionary 來實踐儲存不同顏色襪子有幾隻的話,此篇文章 有提到相關用法,這裡就不贅述。
最好要將 dictionay 裡所有的 value 值找出成對的並算出共有幾對的話可以使用 sum。
sum 的用法
input:
1 2 3 4
| list = [2, 4, 1, 3, 6] print(sum(list)) // 起始點從 100 開始 (目前沒使用過) print(sum(list, 100))
|
output:
解題
方法一 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