Given an array of size N in which every number is between 1
and N, determine if there are any duplicates in it. You are
allowed to destroy the array if you like.
Answers were Sorted based on User's Feedback
Answer / zhixingren
The following algorithm works. It is O(n) and no extra
storage required
public static bool HaveDuplicate(int[] nums)
{
for (int i = 0; i < nums.Length; i++)
{
int tmp = nums[i];
if (tmp < 0)
tmp = -tmp;
if (nums[tmp - 1] < 0)
{
return true;
}
else
{
nums[tmp - 1] = -nums[tmp - 1];
}
}
return false;
}
}
Is This Answer Correct ? | 50 Yes | 11 No |
Answer / ashutosh k
You can use intermediate step for count sort.
Take a new array B of size N, initialize all values to 0.
and then
for each i from 1 to N,
if((++B[A[i]]) > 1) - there are duplicates.
--- Time complexity O(n)
Is This Answer Correct ? | 28 Yes | 7 No |
Answer / monika
the formula given for summation shud be (n*(n+1))/2
but it will solve the problem only if we have one duplicate.
if we have many duplicates then we can still get the
correct summation
for ex:
1 2 2 5 5
it has two duplicates but still total is 5*(5+1)/2=15
Is This Answer Correct ? | 28 Yes | 11 No |
Answer / shri
#include<stdio.h>
void main()
{
int a[3],j,i,n;
clrscr();
printf("enter n");
scanf("%d",&n);
printf("enter els");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]==a[j])
printf("elements %d and %d are same",i+1,j+1);
}
}
}
Is This Answer Correct ? | 19 Yes | 7 No |
Answer / anyone
If you mark places with zero, you will lose the original
value in that place which, eventually, leads to errors...
Assume an array starting as: 1-5-5-...
After first step array would be: 1-0-5-...
You will get stuck at the second step since every element
that you marked with zero will lead to the position 0.
Converting to negative makes more sense...
Is This Answer Correct ? | 14 Yes | 9 No |
Answer / miraj
When its given you are allowed to destroy the array..do
think in that direction..
Read the first element go to that position, read that
position and mark it zero.. keep doing so...
If at any place we find zero.. that means array contains
duplicate.
Is This Answer Correct ? | 18 Yes | 14 No |
Answer / michael
hey scrubs, use a hash map
loop through array {
if(hash[x] == x] return true// is dupe
else hash.add(x,x);
}
max O(n)
Is This Answer Correct ? | 6 Yes | 4 No |
Answer / somebody
@Michael
Moron you are using extra space there.that is obvious.using
extra space many tough problems can be solved.without extra
space tell some better methods.
Is This Answer Correct ? | 5 Yes | 3 No |
Answer / sankalan
sum all those no. say you get x
say there is a b (repeated) in place of a
so a-b = n(n+1)/2 - x=m(say)
sum the squares of those nos
say you get y
a^2-b^2 = 1/6(n+1)(2n+1)-y=n(say)
(a^-b^2)/(a-b)=a+b=m/n
to get a ((a+b)+(a-b))/2
to get b ((a+b)-(a-b))/2
Is This Answer Correct ? | 1 Yes | 0 No |
Write a program to receive an integer and find it's octal equivalent. How can i do with using while loop.
to remove the repeated cahracter from the given caracter array. i.e.., if the input is SSAD output should of SAD
#define DIM( array, type) sizeof(array)/sizeof(type) main() { int arr[10]; printf(“The dimension of the array is %d”, DIM(arr, int)); }
write a program to find out roots of quadratic equation "x=-b+-(b^2-4ac0^-1/2/2a"
main(int argc, char *argv[]) { (main && argc) ? main(argc-1, NULL) : return 0; } a. Runtime error. b. Compile error. Illegal syntax c. Gets into Infinite loop d. None of the above
How do I write a program to print proper subset of given string . Eg :input: abc output:{},{a},{b},{c},{a,b},{a,c},{b,c}, {a,b,c}.I desperately need this program please mail me to saravana6m@gmail.com
void main() { static int i; while(i<=10) (i>2)?i++:i--; printf(“%d”, i); }
void main() { static int i=i++, j=j++, k=k++; printf(“i = %d j = %d k = %d”, i, j, k); }
char inputString[100] = {0}; To get string input from the keyboard which one of the following is better? 1) gets(inputString) 2) fgets(inputString, sizeof(inputString), fp)
main() { unsigned int i=65000; while(i++!=0); printf("%d",i); }
# include <stdio.h> int one_d[]={1,2,3}; main() { int *ptr; ptr=one_d; ptr+=3; printf("%d",*ptr); }
What is the difference between proc means and proc tabulate ? explain with a simple example when you have to use means or tabulate?