package com.interview.binarysearch;
/**
* http://www.geeksforgeeks.org/find-the-point-where-a-function-becomes-negative/
*/
public class MonotonicallyIncreasingFunctionBecomesPositive {
private int f(int x){
return x*x - 10*x - 20;
}
public int findPoint(){
int i=1;
while(f(i) <=0 ){
i = i*2;
}
return binarySearch(i/2,i);
}
private int binarySearch(int start,int end){
int mid = (start+end)/2;
while(start < end){
mid = (start+end)/2;
if(f(mid) >0 && f(mid-1) <=0){
return mid;
}
if(f(mid) <=0 && f(mid+1)>0){
return mid+1;
}
if(f(mid) <= 0){
start = mid+1;
}else{
end = mid-1;
}
}
return mid;
}
public static void main(String args[]){
MonotonicallyIncreasingFunctionBecomesPositive mif = new MonotonicallyIncreasingFunctionBecomesPositive();
System.out.print(mif.findPoint());
}
}