Re: [閒聊] 每日LeetCode

作者: Rushia (みけねこ的鼻屎)   2022-09-15 12:15:47
2007. Find Original Array From Doubled Array
題目:給定一個陣列,若該陣列可以由某個陣列的所有元素乘2之後組合成,我們
說這個陣列是一個 Doubled Array,找出這個陣列是否是 Doubled Array 若存在則
返回該陣列變成 Doubled Arraay前的陣列。
Example:
[1,3,4] => [1,3,4,2,6,8]
思路:
1.先排序整個陣列讓每次遍歷時都從最小開始拿,避免:[2, 4, 2, 1] 這種 Case
會 2 -> 2 且 4 -> 1。
2.統計 Doubled Array 內的所有元素個數儲存在HashMap。
3.遍歷Double dArray的每個元素,若HashMap存在該元素則該元素和兩倍的該元素數量
減一,把該元素儲存在 List 中。
4.檢查HashMap所有元素的數量,若全為0表示每個元素都相互匹配,將List轉為int[]
返回,若任意元素不為0表示不匹配,返回空的int[]。
Java Code:
class Solution {
public int[] findOriginalArray(int[] nums) {
int n = nums.length;
if(n % 2 == 1) return new int[0];
Arrays.sort(nums);
Map<Integer, Integer> map = new HashMap<>();
for(int num : nums)
map.put(num ,map.getOrDefault(num,0) + 1);
List<Integer> list = new ArrayList<>();
for (int num : nums) {
int doubleChanged = num * 2;
if (map.containsKey(doubleChanged) && map.get(num) > 0) {
list.add(num);
map.put(num, map.get(num) - 1);
map.put(doubleChanged, map.get(doubleChanged) - 1);
}
}
for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (entry.getValue() != 0)
return new int[0];
}
int[] res = new int[list.size()];
int i = 0;
for(int num : list)
res[i++] = num;
return res;
}
}
作者: an94mod0 (an94mod0)   2022-09-15 12:18:00
幫內推
作者: itoumashiro (佩可咪口愛的結晶)   2022-09-15 12:31:00
可以幫肥肥內推蘋果嗎
作者: Rushia (みけねこ的鼻屎)   2022-09-15 12:31:00
我領不到四萬

Links booklink

Contact Us: admin [ a t ] ucptt.com