diff options
author | jack <[email protected]> | 2024-06-14 13:13:15 -0600 |
---|---|---|
committer | jack <[email protected]> | 2024-06-14 13:13:15 -0600 |
commit | d343a3b18dbaca9297d4f7b2280c4a16f0a5c8aa (patch) | |
tree | 96df922dae2a5073d9a50ea70c7aae6aa37e3ebe /num_good_pair.c | |
download | leetcode-d343a3b18dbaca9297d4f7b2280c4a16f0a5c8aa.tar.gz leetcode-d343a3b18dbaca9297d4f7b2280c4a16f0a5c8aa.zip |
initial
Diffstat (limited to 'num_good_pair.c')
-rw-r--r-- | num_good_pair.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/num_good_pair.c b/num_good_pair.c new file mode 100644 index 0000000..ceeac28 --- /dev/null +++ b/num_good_pair.c @@ -0,0 +1,31 @@ +// 1512. Number of Good Pairs +#include <stdio.h> +#include <stdlib.h> + +/* + * given an array of integers 'nums', return the number of good pairs. a pair + * '(i, j)' is called good if 'nums[i] == nums[j]' and 'i < j' + */ + +int numIdenticalPairs(int *nums, int nums_size) { + int max = nums[0]; + for (int i = 0; i < nums_size; i++) + max = nums[i] > max ? nums[i] : max; + max++; + int *arr = (int *)calloc(max, sizeof(int)); + for (int i = 0; i < nums_size; i++) + arr[nums[i]]++; + int ans = 0; + for (int i = 0; i < max; i++) + if (arr[i] > 1) + ans += (arr[i] * (arr[i] - 1) / 2); + free(arr); + return ans; +} + +int main() { + int n1[] = {1, 2, 3, 1, 1, 3}, n2[] = {1, 1, 1, 1}, n3[] = {1, 2, 3}; + printf("%d\n", numIdenticalPairs(n1, 6)); // expect: 4 + printf("%d\n", numIdenticalPairs(n2, 4)); // expect: 6 + printf("%d\n", numIdenticalPairs(n3, 3)); // expect: 0 +} |