Finding a single integer in an array

waff

I'm trying to solve an algorithm question. I need to find a single integer in an array

e.g {1,1,5,5,5,3,2,2}

output should 3 because that's the only single integer there.

So far, I created an algorithm where first I sort the array and then check whether i-1 and i+1 elements are equal and if not it means I've got the single one.

The issue is; for short input it's working fine but for long inputs I receive time-outs (it takes too long to compute so my answer is not validated).

Could you give me any tips for improving the algorithm

static int lonelyinteger(int[] a) {

    Arrays.sort(a);

    if (a.length == 1)
        return a[0];

    for (int i = 0; i < a.length; ++i) {

        if (i == 0) {
            if (a[i + 1] != a[i])
                return a[i];
        } else if (i == a.length - 1) {
            if (a[i] != a[i - 1])
                return a[i];
        } else {
            if (a[i - 1] != a[i] && a[i + 1] != a[i])
                return a[i];
        }  
    }
    return -1;
}
Shar1er80

Is O(N^2) not considered "fast enough" for this problem?

Here I have a list of 10,000,000 elements with random pair values. In a random spot, I put the "lonely integer" 5, and O(N^2) solves it quickly without the need to sort. The algorithm stops on the first "lonely integer" it finds.

public static void main(String[] args) {
    Random r = new Random();

    List<Integer> ints = new ArrayList<>();
    for (int i = 0; i < 10000000; i += 2) {
        int randomNumber = r.nextInt(100) + 10;
        ints.add(randomNumber);
        ints.add(randomNumber);
    }
    ints.add(5); // Lonely Integer

    int tempIndex = r.nextInt(ints.size());
    int tempValue = ints.get(tempIndex);
    // Swap duplicate integer with lonely integer
    ints.set(tempIndex, ints.get(ints.size() - 1)); 
    ints.set(ints.size() - 1, tempValue);

    for (int i = 0; i < ints.size(); i++) {
        boolean singleInteger = true;
        for (int j = 0; j < ints.size(); j++) {
            if (j == i) {
                continue;
            }
            if (ints.get(j) == ints.get(i)) {
                singleInteger = false;
                break;
            }
        }

        if (singleInteger) {
            System.out.println("Single instance: " + ints.get(i));
            break;
        }
    }
}

Results:

Single instance: 5 (about 10 - 20 seconds);

Update

Your method about 3 seconds.

Map solution...

public static void main(String[] args) {
    Random r = new Random();

    List<Integer> ints = new ArrayList<>();
    for (int i = 0; i < 10000000; i += 2) {
        int randomNumber = r.nextInt(100) + 10;
        ints.add(randomNumber);
        ints.add(randomNumber);
    }
    ints.add(5); // Lonely Integer
    int tempIndex = r.nextInt(ints.size());
    int tempValue = ints.get(tempIndex);
    // Swap duplicate integer with lonely integer
    ints.set(tempIndex, ints.get(ints.size() - 1));
    ints.set(ints.size() - 1, tempValue);

    Map<Integer, Integer> counts = new HashMap<>();
    for (int i : ints) {
        if (counts.containsKey(i)) {
            counts.put(i, counts.get(i) + 1);
        } else {
            counts.put(i, 1);
        }
    }

    for (Integer key : counts.keySet()) {
        if (counts.get(key) == 1) {
            System.out.println("Single Instance: " + key);
        }
    }
}

Results:

Single Instance: 5 (about 1 - 3 seconds)

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

finding a repeating integer in an array

From Dev

Finding the second smallest integer in array

From Dev

Finding length of a loop in an integer array

From Dev

Finding the occurrence of an integer from an array in a file:

From Dev

Convert an array of Integer into a single String

From Dev

Finding maximum and minimum of an array in a single recursive function

From Dev

Converting an array of integers into a single integer using jquery

From Dev

Convert int array into single integer in C

From Dev

Converting a single line string to integer array in Python

From Dev

Finding first non-repeating number in integer array

From Dev

Elegant way of finding all integer element indices in a MATLAB array?

From Dev

Finding the closest integer value, rounded down, from a given array of integers

From Dev

finding two pairs from integer array out of two elements

From Dev

Finding the max integer in an array, with specified start and ending indices in Java, **recursively**

From Dev

Elegant way of finding all integer element indices in a MATLAB array?

From Dev

How to solve this equation for solving "Finding duplicate in integer array"

From Dev

Finding closest integer from an array which is rounded up

From Dev

Finding frequency of an integer in an array and calculating x to the nth power

From Dev

The integers in the array are either entirely odd or entirely even except for a single integer. Retrieve this single integer. JS

From Dev

Finding the smallest integer

From Dev

Finding specific positive integer

From Dev

finding minimum number in a integer

From Dev

Finding a specific nibble in an integer

From Dev

Finding an irregularly repeatable integer-pattern in an array in C (without traversing the array multiple times)

From Dev

Convert array of single integer pixels to RGB triplets in Python

From Dev

F#: Reducing an array of numbers as strings to a single integer

From Dev

Postgresql: how to return a single column request as an integer array

From Dev

F#: Reducing an array of numbers as strings to a single integer

From Dev

(Java) Converting String of symbols to single digit integer array

Related Related

  1. 1

    finding a repeating integer in an array

  2. 2

    Finding the second smallest integer in array

  3. 3

    Finding length of a loop in an integer array

  4. 4

    Finding the occurrence of an integer from an array in a file:

  5. 5

    Convert an array of Integer into a single String

  6. 6

    Finding maximum and minimum of an array in a single recursive function

  7. 7

    Converting an array of integers into a single integer using jquery

  8. 8

    Convert int array into single integer in C

  9. 9

    Converting a single line string to integer array in Python

  10. 10

    Finding first non-repeating number in integer array

  11. 11

    Elegant way of finding all integer element indices in a MATLAB array?

  12. 12

    Finding the closest integer value, rounded down, from a given array of integers

  13. 13

    finding two pairs from integer array out of two elements

  14. 14

    Finding the max integer in an array, with specified start and ending indices in Java, **recursively**

  15. 15

    Elegant way of finding all integer element indices in a MATLAB array?

  16. 16

    How to solve this equation for solving "Finding duplicate in integer array"

  17. 17

    Finding closest integer from an array which is rounded up

  18. 18

    Finding frequency of an integer in an array and calculating x to the nth power

  19. 19

    The integers in the array are either entirely odd or entirely even except for a single integer. Retrieve this single integer. JS

  20. 20

    Finding the smallest integer

  21. 21

    Finding specific positive integer

  22. 22

    finding minimum number in a integer

  23. 23

    Finding a specific nibble in an integer

  24. 24

    Finding an irregularly repeatable integer-pattern in an array in C (without traversing the array multiple times)

  25. 25

    Convert array of single integer pixels to RGB triplets in Python

  26. 26

    F#: Reducing an array of numbers as strings to a single integer

  27. 27

    Postgresql: how to return a single column request as an integer array

  28. 28

    F#: Reducing an array of numbers as strings to a single integer

  29. 29

    (Java) Converting String of symbols to single digit integer array

HotTag

Archive