Remove Duplicates

Write out a function that given a sorted list of integers would return the same set of integers with out duplicates. If you could only do 10 tests for the above function what 10 would you do?

guyz thizz not a homework question but a interview screening question i would really appreciate the answer.

thnx
krithi
krithiAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
jkrConnect With a Mentor Commented:
>>thnx but can u just write this in simple c or c++.

This is the C++ area, and the above is simple C++...
0
 
jkrCommented:
>>would return the same set of integers with out duplicates

That part holds the answer - use a 'std::set<int>', e.g.

#include <set>
using namespace std;

int input [] = { 1,1,2,2,2,3,4,4,5,6,7,8,8,8,9};

set<int> ns;

for ( int i = 0; i < sizeof (input); ++i) {

  ns.insert(input[i]);
}

int nSize = ns.size();
int* output = new int[nSize];

for ( set<int>::const_iterator it = ns.begin(); it != ns.end(); ++ii) {

   output[i] = *it;
}



0
 
jkrCommented:
Oops, the last loop should be

for ( set<int>::const_iterator it = ns.begin(); it != ns.end(); ++it) {

  output[i] = *it;
}
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 
krithiAuthor Commented:
thnx but can u just write this in simple c or c++.

thnx
krithi
0
 
krithiAuthor Commented:
I meant withou using STL
0
 
itsmeandnobodyelseCommented:
That is simple C and shouldn't be posted here in C++:

#include <string.h>

        int input [] = { 1,1,2,2,2,3,4,4,5,6,7,8,8,8,9};

        int last = input[0];
        int siz  = sizeof(input);
        for (int i = 1; i < siz; i++)
        {
             if (input[i] == last)
             {    
                  if (i < siz-1)
                     memmove(&input[i], &input[i+1], siz-i-1);
                  input[--siz] = 0;                
             }
             last = input[i];
        }

Regards, Alex
0
 
itsmeandnobodyelseCommented:
Should be

            }
            else
               last = input[i];

Regards, Alex
0
 
itsmeandnobodyelseConnect With a Mentor Commented:
>>  If you could only do 10 tests for the above function what 10 would you do?

I would ask jkr, AlexFM, Axter, DanRollins, Sys_Prog, bcladd, STeH, chensu, rstavely, khkremer to check my function and wonder how i could make so many mistakes in such a little function.
0
 
krithiAuthor Commented:
will this work?

void RemoveDuplicates(struct Node* pHead)
{
      //pHead - Beginning of the sorted list.
      if (pHead)
      {
            struct Node* pCurrent = pHead->pNext;
            struct Node* pPrev = pHead;
            // add pPrev->nValue to the new sorted list with no duplicates.
      }
      
      while(pCurrent)            // iterate the list till the end
      {
            if(pCurrent->nValue == pPrev->nValue)
            {
                  // move to current pointer to the next node.
                  pCurrent = pCurrent->pNext;
            }
            else
            {
                  //add pCurrent->nValue to the new sorted list with no duplicates.

                  // move the previous pointer to the current node.
                  pPrev = pCurrent;                  

                  // move to current pointer to the next node.
                  pCurrent = pCurrent->pNext;            
            }
      }
}
0
 
bcladdConnect With a Mentor Commented:
Only problem I detect is that it won't include the first value in the result list. So the result is empty for a single valued list.

-bcl
0
 
krithiAuthor Commented:
i think this will do the job

if (pHead)
     {
          struct Node* pCurrent = pHead->pNext;
          struct Node* pPrev = pHead;
          // add pPrev->nValue to the new sorted list with no duplicates.
     }
0
 
bcladdCommented:
Then follow that with your while loop and you are good to go.

What test cases would you use (and why)?
0
 
CoolBreezeCommented:
but i thought he says 10 tests?
how do you use only 10 tests for a general problem?
0
 
bcladdCommented:
The point of limiting you to 10 tests is two-fold:
  -- Even with automated testing, writing test cases with more than 10 different test scenarios for a routine of this length is probably a waste of effort (if the test cases are well chosen)
  -- Regardless of the number of tests, you can easily prioritize what you want to test and come up with 10 tests that will catch many bugs (off by 1 errors, null input errors, etc.)

You ask how 10 tests oculd work for a general problem. How many tests would you run? How many tests would your employer want to pay you to run? The point is that with well chosen test cases you can get good coverage (of the infinite logical input space).

-bcl
0
 
EarthQuakerCommented:
#include <algorithm>

int input [] = { 1, 2, 2, 3, 3, 3 };
int output[3];

copy(input, unique(input, input + sizeof(input)), output);
0
 
CoolBreezeCommented:
i see thanks, bcladd.
0
 
itsmeandnobodyelseCommented:
I think it's a maximum of 4, 5 scenarios that should be run for that limited complexity:

1. An empty list and one having only one element
2. A list that had no duplicates
3. A list that has only one value
4. A list that has a few duplicates (normal case)
5. A list that has many duplicates, one at begin and one at end

Regards, Alex


0
 
krithiAuthor Commented:
thnx
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.