1.已知 sqrt(2)约等于1.414 ,要求不用数学库,求sqrt(2) 精确到小数点后10位。
思路:已知 sqrt(2) 约等于1.414, 那么可以通过循环在1.4 和 1.5 之间做二分。当low 和high的差值绝对值<0.0000000001时,返回。
public class SqrtAlgorithm {
private final double EPSILON=0.0000000001;
public double calculate(){
double low=1.4, high=1.5;
double mid=(low+high)/2;
while(high-low>EPSILON){
if(mid*mid>2){
high=mid;
}else{
low=mid;
}
mid=(low+high)/2;
}
return mid;
}
2.(滑动窗口算法)给定数组,获取数组中n个连续元素,最大的和。
public static int slidingWindow(int arr[],int n){
int len= arr.length;
if(n>=len){
return 0;
}
int maxSum=0;
for(int i=0;i<n;i++){
maxSum+=arr[i];
}
int windowSum=maxSum;
for(int i=n;i<len;i++){
windowSum+=arr[i]-arr[i-n];
maxSum=Math.max(windowSum,maxSum);
}
return maxSum;
}