算法
1.基础
1.1欧几里得算法
计算两个非负整数p和q的最大公约数:若q是0,则最大公约数为p。否则,将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数。
public static int ojld(int p,int q){
if(q==0) return p;
int r=p % q;
return ojld(q,r);
}
1.2二分查找
注意:数组必须有序,力扣704
public class BinarySearch {
public static int rank(int[] arr,int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (target < arr[mid]) right = mid - 1;
else if (target > arr[mid]) left = mid + 1;
else return mid;
}
return -1;
}
}
背包
背包是一种不支持从中删除元素的集合数据类型,它的作用就是帮助用例收集元素并迭代遍历所有收集到的元素(迭代的顺序不确定)
用例:简单地计算标准输入中的所有double值的平均值和样本标准差,在这些计算中,数的计算顺序和结果无关。
public static void main(String[] args) {
Bag<Double> nums=new Bag<Double>();
while(!StdIn.isEmpty()){
nums.add(StdIn.readDouble());
int N= nums.size();
double sum=0.0;
for(double x:nums){
sum+=x;
double mean=sum/N;
sum=0.0;
for(double x:nums){
sum+=(x-mean)**2;
double std=Math.sqrt(sum/(N-1));
}
}
}
}

浙公网安备 33010602011771号