What is the most efficient way to test for duplicates in a user inputted array?

Related searches

I am trying to write a simulator for playing the Powerball lottery, where the program would ask for 5 numbers (aka the white balls) and be inputted into a 6 element array and another number (the red Powerball) into the 6th element. I need to figure out how to test for duplicates in the first 5 elements but the 6th doesn't need to be unique.

I have a loop that I thought would work but it doesn't even execute and is rather messy.

Is there a more efficient way to test for duplicates, maybe involving a bool flag?

const int PBALLAMOUNT = 6;
const int PBMAX = 69;
const int PBMIN = 1;
const int REDMAX = 26;

cout << "Enter the numbers you want to use for the white powerballs" << endl;
for (int k = 0; k < PBALLAMOUNT - 1; k++)
{
    cin >> pBallNums[k];
    while (pBallNums[k] < PBMIN || pBallNums[k]>PBMAX) 
    {
        cout << "Invalid input! Please enter different numbers between 1 and 69" << endl;
        cin >> pBallNums[k];
    }
}

bool dup = false;
for (int i = 0; i < PBALLAMOUNT - 1; i++) 
{
    for (int j = i + 1; j < PBALLAMOUNT - 1; j++) 
    {
        while (!dup) 
        {
            if (pBallNums[i] == pBallNums[j]) 
            {
                cout << "Please enter a unique number from the others in your PowerBall number selection" << endl;
                cin >> pBallNums[i];
            }

        }
    }
}

cout << "And what would you like for your redball" << endl;
cin >> pBallNums[5];

while (pBallNums[5] < PBMIN || pBallNums[5] > REDMAX)
{
    cout << " The red powerball needs to be between 1 and 26: ";
    cin >> pBallNums[5];
}

I basically just need it to alert the user if they have already entered a number into the array and offer another std::cin >> pBallNums statement but the actual result is just nothing happens after you enter the numbers.

"I basically just need it to alert the user if they've already entered a number into the array and offer another cin >> pBallNums statement."

In that case simply use std::set and use it's std::set::emplace method to store the user input into the set.

From cppreference.com,

template< class... Args >
std::pair<iterator,bool> emplace( Args&&... args );

std::set::emplace

Returns a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place. True for Insertion, False for No Insertion.

Simply take this information for your case and loop again for the next user input.


Here is a sample code (See Live):

#include <iostream> 
#include <set>

int main()
{
    std::set<int> mySet;

    for(int loopCount{ 0 }; loopCount != 5; )// repeat until maximum loop count
    {
        int input; std::cin >> input; // user input
        // get the std::pair<iterator,bool>
        const auto pairIter = mySet.emplace(input);
        // increment maximum loop count, if insertion successful
        if (pairIter.second) ++loopCount;
    }
    for (const int userInput : mySet)
        std::cout << userInput << " ";

    return 0;
}

Sample input:

1
1
2
3
4
2
4
3
5

Output:

1 2 3 4 5

Find duplicates in O(n) time and O(1) extra space, Input : n = 5 and array[] = {1, 2, 3, 4 ,3} Output: 3 Explanation: The be applied here because there can be more than 2 repeating elements So to find out the duplicate elements, a HashMap is required, but the Please write comments if you find the above codes/algorithms incorrect, or find better ways to� Approach:The elements in the array is from 0 to n-1 and all of them are positive. So to find out the duplicate elements, a HashMap is required, but the question is to solve the problem in constant space. There is a catch, the array is of length n and the elements are from 0 to n-1 (n elements). The array can be used as a HashMap. Algorithm:

Sort, then check adjacent items for equality.

Check if a given array contains duplicate elements within k distance , Write a function that returns true if array contains duplicates within k distance. Input: k = 3, arr[] = {1, 2, 3, 1, 4, 5} Output: true 1 is repeated at distance 3. We also remove elements which are at more than k distance from We use cookies to ensure you have the best browsing experience on our website. The first solution is the brute force algorithm, which is demonstrated by finding duplicate elements on integer array, but you can use the logic to find a duplicate on any kind of array. The second solution uses the HashSet data structure to reduce the time complexity from O(n^2) to O(n), and it also shows you can write generic methods to find

First, try not to mix real requirements with implementation details.

[...] where the program would ask for 5 numbers (aka the white balls) and be inputted into a 6 element array and another number (the red powerball) into the 6th element.

What you really want is: 5 distinct numbers taken from user input. And from your code I read that the check should happen after each single input. I suppose reading the last number is fine, so lets leave that aside.

Next, get acustomed to the containers in the standard library. They are not many in numbers but what you can do with them is uncountable. To have distinct elements in a container you want either std::unsorted_set or std::set. Then basically all you need is to use insert:

#include <set>
#include <iostream>
int main()
{
    std::set<int> numbers;
    auto x = numbers.insert(1);
    std::cout << "1 was not present before? : " << x.second << "\n";
    x = numbers.insert(1);
    std::cout << "1 was not present before? : " << x.second << "\n";
}

prints:

1 was not present before? : 1
1 was not present before? : 0

How to Check or Detect Duplicate Elements in Array , 3) One more way to detect duplication in java array is adding every element Here is complete code sample of all above methods to check if your array contains duplicates or not. public static boolean checkDuplicateUsingSet( String[] input){. Find duplicates in an Array with values 1 to N using counting sort; Smallest number to be added in first Array modulo M to make frequencies of both Arrays equal; Count of Array elements greater than or equal to twice the Median of K trailing Array elements; Check if Array elements can be maximized upto M by adding all elements from another array

3 Ways to Find Duplicate Elements in an Array - Java, One of the most common ways to find duplicates is by using the brute force method, which compares each element The standard way to find duplicate elements from an array is by using the HashSet data structure. One of the best books to prepare for software developer interviews. ex.input is 1 to 40 Implement an space efficient algorithm to determine if a string (of characters from ‘a’ to ‘z’) has all unique characters or not. Use additional data structures like count array, hash, etc is not allowed.

2 Ways to find duplicate elements in an Array, How would you find duplicate elements from an array? duplicates = new HashSet<Integer>(); for (int i = 0; i < input.length; i++) { for (int j = 1; j < input. length;� INSERT INTO db_table (tbl_column_1, tbl_column_2) VALUES (SELECT unnseted_column, param_association FROM unnest(param_array_ids) AS unnested_column); The code is unencumbered by checks for existing values. (In this particular situation, the user does not care about errors from inserting duplicates -- the insertion should "just work".)

20) When the order of the elements is unimportant, what is the most efficient way to remove an element from an array? a) Delete the element and move each element after that one to a lower index. b) Replace the element to be deleted with the last element in the array. c) Replace the element to be deleted with the first element in the array.

Comments
  • What is pBallNums? An array or an std::vector? And does the order of the values in pBallNums matter?
  • std::any_of (and friends) seem like an obvious tool to reach for..
  • Consider using a std::set. All items in the set are guaranteed unique.
  • Surprised by the upvotage the set comment received. For a list of at most size 4 @JesperJuhl 's pitch is going to be much more efficient
  • @JeJo Neat site. Going to have to play with that later. All I see is that both execute too fast for the benchmark. For a few entries run once that's to be expected.