From 172cc0326392fedcacd411883e631bddc280538a Mon Sep 17 00:00:00 2001 From: Arunima Dutta Date: Mon, 24 Jun 2024 21:53:29 +0530 Subject: [PATCH 1/3] Create find-duplicates-in-an-array --- .../Easy problems/find-duplicates-in-an-array | 179 ++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array diff --git a/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array b/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array new file mode 100644 index 000000000..1b63cf220 --- /dev/null +++ b/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array @@ -0,0 +1,179 @@ +id: find-duplicates-in-an-array +title: Find Duplicates in an Array (gfg) +sidebar_label: 0006 - Find Duplicates in an Array +tags: + - Easy + - Array + - GeeksforGeeks + - CPP + - Python + - DSA +description: "This tutorial covers the solution to the Find Duplicates in an Array problem from the GeeksforGeeks website, featuring implementations in Python and C++." + +## Problem Description + +Given an array `arr` of size `n` which contains elements in the range from 0 to `n-1`, you need to find all the elements occurring more than once in the given array. Return the answer in ascending order. If no such element is found, return a list containing [-1]. + +Note: Try and perform all operations within the provided array. The extra (non-constant) space needs to be used only for the array to be returned. + +## Examples + +**Example 1:** + +``` +Input: arr = [2, 3, 1, 2, 3] +Output: [2, 3] +Explanation: 2 and 3 occur more than once in the array. +``` + +**Example 2:** + +``` +Input: arr = [0, 1, 2, 3] +Output: [-1] +Explanation: No element occurs more than once. +``` + +## Your Task + +You don't need to read input or print anything. Your task is to complete the function `duplicates()` which takes the array `arr` as input and returns a list of the duplicate elements in ascending order. + +Expected Time Complexity: $O(n)$ + +Expected Auxiliary Space: $O(1)$ (excluding the space for the output list) + +## Constraints + +* `1 ≤ n ≤ 10^5` +* `0 ≤ arr[i] ≤ n-1` + +## Problem Explanation + +The problem is to find the duplicate elements in an array of size `n`, where the elements range from 0 to `n-1`. The duplicates should be returned in ascending order. If no duplicates are found, return [-1]. + +## Code Implementation + + + + + + ```py + class Solution: + def duplicates(self, arr): + n = len(arr) + # Use the array elements as index + for i in range(n): + arr[arr[i] % n] += n + + # Collect elements that occur more than once + result = [i for i in range(n) if arr[i] // n > 1] + + return result if result else [-1] + + # Example usage + if __name__ == "__main__": + solution = Solution() + print(solution.duplicates([2, 3, 1, 2, 3])) # Expected output: [2, 3] + print(solution.duplicates([0, 1, 2, 3])) # Expected output: [-1] + ``` + + + + + + ```cpp + #include + #include + #include + using namespace std; + + class Solution { + public: + vector duplicates(vector& arr) { + int n = arr.size(); + vector result; + + // Use the array elements as index + for (int i = 0; i < n; i++) { + arr[arr[i] % n] += n; + } + + // Collect elements that occur more than once + for (int i = 0; i < n; i++) { + if (arr[i] / n > 1) { + result.push_back(i); + } + } + + if (result.empty()) { + return {-1}; + } + + return result; + } + }; + + // Example usage + void solve() { + int n; + cin >> n; + vector arr(n); + for (int i = 0; i < n; i++) { + cin >> arr[i]; + } + + Solution obj; + vector ans = obj.duplicates(arr); + for (int i : ans) { + cout << i << ' '; + } + cout << endl; + } + + int main() { + int t; + cin >> t; + + while (t--) { + solve(); + } + return 0; + } + ``` + + + + +## Example Walkthrough + +For the array `arr = [2, 3, 1, 2, 3]`: + +1. Iterate through the array and use each element as an index. Increase the value at that index by `n` to mark the occurrence. +2. After the iteration, elements with values greater than `2 * n` indicate duplicates. +3. Collect such elements and return them in ascending order. + +For the array `arr = [0, 1, 2, 3]`: + +1. Iterate through the array and use each element as an index. Increase the value at that index by `n` to mark the occurrence. +2. After the iteration, no elements have values greater than `2 * n`. +3. Return [-1] since no duplicates are found. + +## Solution Logic: + +1. Iterate through the array, using each element as an index. +2. Increase the value at the calculated index by `n`. +3. After the iteration, check which elements have values greater than `2 * n` to find duplicates. +4. Collect such elements and return them in ascending order. + +## Time Complexity + +* The time complexity is $O(n)$, where n is the size of the input array. + +## Space Complexity + +* The auxiliary space complexity is $O(1)$ because we are not using any extra space proportional to the size of the input array. + +## References + +- **gfg Problem:** [gfg Problem](https://www.geeksforgeeks.org/problems/find-duplicates-in-an-array/1?page=1&difficulty=Easy&sortBy=submissions) +- **Solution Author:** [arunimad6yuq](https://www.geeksforgeeks.org/user/arunimad6yuq/) From dfc7b39516841c41f40eabde7284b18e04961a12 Mon Sep 17 00:00:00 2001 From: Arunima Dutta Date: Tue, 25 Jun 2024 13:16:43 +0530 Subject: [PATCH 2/3] Update find-duplicates-in-an-array --- .../gfg-solutions/Easy problems/find-duplicates-in-an-array | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array b/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array index 1b63cf220..0b9614dd6 100644 --- a/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array +++ b/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array @@ -14,8 +14,9 @@ description: "This tutorial covers the solution to the Find Duplicates in an Arr Given an array `arr` of size `n` which contains elements in the range from 0 to `n-1`, you need to find all the elements occurring more than once in the given array. Return the answer in ascending order. If no such element is found, return a list containing [-1]. -Note: Try and perform all operations within the provided array. The extra (non-constant) space needs to be used only for the array to be returned. - +:::note + Try and perform all operations within the provided array. The extra (non-constant) space needs to be used only for the array to be returned. +::: ## Examples **Example 1:** From e2615f15b37f11edae6e7e38c5bee89d18371c16 Mon Sep 17 00:00:00 2001 From: Ajay Dhangar <99037494+Ajay-Dhangar@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:52:08 +0530 Subject: [PATCH 3/3] Update find-duplicates-in-an-array --- .../gfg-solutions/Easy problems/find-duplicates-in-an-array | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array b/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array index 0b9614dd6..a7fdab99d 100644 --- a/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array +++ b/dsa-solutions/gfg-solutions/Easy problems/find-duplicates-in-an-array @@ -1,3 +1,4 @@ +--- id: find-duplicates-in-an-array title: Find Duplicates in an Array (gfg) sidebar_label: 0006 - Find Duplicates in an Array @@ -9,6 +10,7 @@ tags: - Python - DSA description: "This tutorial covers the solution to the Find Duplicates in an Array problem from the GeeksforGeeks website, featuring implementations in Python and C++." +--- ## Problem Description