Baozi Training Leetcode 1512 solution Number of Good Pairs
阿新 • • 發佈:2020-07-19
Problem Statement
Given an array of integersnums
.
A pair(i,j)
is calledgoodifnums[i]
==nums[j]
andi
<j
.
Return the number ofgoodpairs.
Example 1:
Input: nums = [1,2,3,1,1,3] Output: 4 Explanation: There are 4 good pairs (0,3), (0,4), (3,4), (2,5) 0-indexed.
Example 2:
Input: nums = [1,1,1,1] Output: 6 Explanation:Each pair in the array are good.
Example 3:
Input: nums = [1,2,3] Output: 0
Constraints:
1 <= nums.length <= 100
1 <= nums[i] <= 100
Problem link
Video Tutorial
You can find the detailed video tutorial here
Thought Process
Array is the most basic data structures and common solutions inclue- Nested for loops O(N^2)
- Sort O(NlgN)
- Use extra space O(N)
Good pairs = N * (N-1) / 2 where N is how many duplicate numbers, this is from combination C(n^2), from n elements pick two
Solutions
Use Map
1 public int numIdenticalPairs(int[] nums) { 2 if (nums == null || nums.length == 0) { 3 return 0; 4 } 5 6 // key: int value; value: number of occurrence 7 Map<Integer, Integer> lookup = new HashMap<>(); 8 int goodPairsCount = 0; 9 for (int i : nums) { 10 if (lookup.containsKey(i)) { 11 goodPairsCount += lookup.get(i); 12 lookup.put(i, lookup.get(i) + 1); 13 } else { 14 lookup.put(i, 1); 15 } 16 } 17 18 return goodPairsCount; 19 }
Time Complexity: O(N), N is the array size
Space Complexity: O(N) since we use extra Map
Sort
1 public int numIdenticalPairsWithSort(int[] nums) { 2 if (nums == null || nums.length == 0) { 3 return 0; 4 } 5 6 Arrays.sort(nums); 7 8 int goodPairsCount = 0; 9 int start = 0; 10 int end = 0; 11 12 while (end < nums.length) { 13 if (nums[end] == nums[start]) { 14 end++; 15 continue; 16 } 17 // if you have n occurrences of a number, the good pair is n*(n-1)/2, Cn^2 18 int delta = end - start; 19 if (delta > 1) { 20 goodPairsCount += delta * (delta - 1) / 2; 21 } 22 start = end; 23 } 24 // handle the case 1, 2, 3, 3, 3 25 if (start != nums.length - 1) { 26 goodPairsCount += (end - start) * (end - start - 1) / 2; 27 } 28 return goodPairsCount; 29 }Time Complexity: O(NlgN), N is the array size since we sort
Space Complexity: O(1) no extra space is used
References
- None