Amazon Interview Question
Software Engineer / DevelopersCountry: India
Interview Type: In-Person
static int findIndex(char array[],char target){
int lo = 0;
int hi = array.length-1;
while(lo <= hi){
while(lo <= hi && array[hi]=='$')hi--;
if(lo > hi) return -1;
int mid = (lo+hi)/2;
while(array[mid] == '$')mid++;
if(array[mid] == target)return mid;
if(array[mid] < target ) lo = mid+1;
else hi = mid-1;
}
return -1;
}
<pre lang="" line="1" title="CodeMonkey73858" class="run-this">#include <iostream>
using namespace std;
#include <string.h>
int bs(char* p, int l, int r, char c)
{
while (l <= r)
{
int mid = (l + r)/2;
char m = *(p + mid);
if (m == c)
{
return mid;
}
if (m == '$')
{
int cur = mid + 1;
while (cur <= r && *(p + cur) == '$')
{
++cur;
}
if (cur <= r)
{
l = cur;
}
else
{
r = mid - 1;
}
continue;
}
if (m <= c)
{
l = mid + 1;
continue;
}
if (m > c)
{
r = mid - 1;
continue;
}
}
return -1;
}
int main()
{
char* p = "$$$$$$$0123456999$$$$$$$$$$$$$$$$$$$$$$";
int l = 0;
int r = strlen(p) - 1;
for (char i = '0'; i <= '9'; ++i)
cout << i << " " << bs(p, l, r, i) << endl;
}
</pre><pre title="CodeMonkey73858" input="yes">
</pre>
<pre lang="" line="1" title="CodeMonkey65418" class="run-this">#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#define $ 9999999
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,9,15,23,29,34,37,52,59,63,64,68,75,99,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,};
int element;
cin>>element;
int low=0;
int high=1,mid;
while(1){
mid=(low+high)/2;
if(element==a[mid]){
cout<<mid;
break;
}
if(a[low]=='$' || low>=high){
cout<<"Not Found"<<endl;
break;
}
if(a[low]!='$' && a[mid]=='$'){
high = mid-1;
continue;
}
if(a[high]=='$'){
if(element>a[mid])
low=mid+1;
else
high=mid-1;
}
else if(a[high]!='$'){
if(element > a[high]){
low=high;
high=2*high;
}else{
if(element>a[mid])
low=mid+1;
else
high=mid-1;
}
}
}
} </pre><pre title="CodeMonkey65418" input="yes">
</pre>
- pavel.em October 18, 2011