C/C++ Puzzles

Andy said:
9. Remove duplicates in an no key access database without using an array

Assuming this is referring to a MS Access database table with no key, a real quick and easy way of doing this is using a copy of the table structure.

You can then use these SQL statements.

Code:
INSERT INTO Table2(Field1)
SELECT DISTINCT Field1 From Table1

DELETE * FROM Table1

INSERT INTO Table1(Field1)
SELECT Field1 FROM Table2
 
Here is a quick function that tests removing duplicates from an array of integers. The question is very vague on what to do with the original array or if the function should produce a new array. As an example, I'm just going to print the duplicates.

This piece of code uses the STL:

Code:
void remove_dups()
{
    int array_size = 6;
    int my_array[] = { 1, 2, 3, 1, 2, 3 } ;

    set<int> int_set;
    for (int i = 0; i < array_size; i++){
        int_set.insert(my_array[i]);
    }
    for(set<int>::iterator it = int_set.begin(); it != int_set.end(); it++){
        cout << (*it) << " ";
    }
    cout << endl;
}
 
Here is a quick function that tests removing duplicates from an array of integers. The question is very vague on what to do with the original array or if the function should produce a new array. As an example, I'm just going to print the duplicates.

This piece of code uses the STL:

Code:
void remove_dups()
{
    int array_size = 6;
    int my_array[] = { 1, 2, 3, 1, 2, 3 } ;

    set<int> int_set;
    for (int i = 0; i < array_size; i++){
        int_set.insert(my_array[i]);
    }
    for(set<int>::iterator it = int_set.begin(); it != int_set.end(); it++){
        cout << (*it) << " ";
    }
    cout << endl;
}

Here is a Java version :) I love java!!
Code:
public static void find_dups(int[] array)
{
    HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>(20,0.75f);
    for(int key: array)
    {
      hash.put(key,(hash.containsValue(key)) ? 1 : 0);
    }

    for(int key : hash.keySet())
    {
      System.out.print(key + " ");            
    }
}
 
In Java, this is a little bit better, my original code to remove duplicates should be like this:

Code:
 public static void removeDuplicates(int[] pArray){
  HashSet<Integer> lSet = new HashSet<Integer>();
 
  for(int i : pArray){
   lSet.add(i);
  }
  for(Integer idx : lSet){
   System.out.print(idx);
  }
 }
 
Here is a quick function that tests removing duplicates from an array of integers. The question is very vague on what to do with the original array or if the function should produce a new array. As an example, I'm just going to print the duplicates.

This piece of code uses the STL:

Code:
void remove_dups()
{
    int array_size = 6;
    int my_array[] = { 1, 2, 3, 1, 2, 3 } ;

    set<int> int_set;
    for (int i = 0; i < array_size; i++){
        int_set.insert(my_array[i]);
    }
    for(set<int>::iterator it = int_set.begin(); it != int_set.end(); it++){
        cout << (*it) << " ";
    }
    cout << endl;
}
Another method, this time using <algorithm>. It doesn't retain the initial order, but it's a simple piece of code:

Code:
void retain_unique (vector<int>& values) {
	sort (values.begin(), values.end());
	vector<int>::iterator u_end = unique (values.begin(), values.end());
	values.erase(u_end, values.end());
}
 
Wow...lot of activity on this thread. To change topic a bit, here is a brainteaser I saw. There is no answer posted yet. Let's solve it...


Find the value of X.

34 32 36 64 46 75 50 35 34




16 18 14 22 28 X 35 15 20 12
 
Back
Top