这是一道 某大厂 的 笔试题:
给出一个数组,找到其中有价值的数的个数。
有价值的数:此数 左边 有 刚好比起大的数,右边 有 刚好比其小的数,比其大的数 是 比其小的数 的 倍数。
//有价值的数,左边有刚好比其大的数big,右边有刚好比他小的数small,,big是small的倍数
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
//输入数组长度
int n = s.nextInt();
int[] a = new int[n];
//有价值的数 的 个数 (初始化)
int num = 0;
//初始化数据
for (int i = 0;i<n;i++){
a[i] = s.nextInt();
}
for (int x = 1;x<n-1;x++){
//存放 目标数 左边所有数的 数组
int[] left = new int[x];
for (int k = 0;k<x;k++){
left[k] = a[k];
}
//存放 目标数 右边所有数的 数组
int[] right = new int[n-x-1];
for (int r = 0;r<n-x-1;r++){
right[r] = a[x+1+r];
}
//左右数组排序,为了找到 “刚好”
Arrays.sort(left);
Arrays.sort(right);
//左右数组下标初始化
int zuo = 0;
int you = 0;
//左右数组 是否 有 “刚好” 符合条件的标识
int zuop = 0;
int youp = 0;
for (int i = 0;i<left.length;i++){
if (left[i]>a[x]){//找到了 刚好 大于 目标数的 数 了
//定位下标
zuo = i;
//修改标识
zuop++;
break;
}
}
for (int i = right.length-1;i>=0;i--){
if (right[i]<a[x]){//找到了 刚好 小于 目标数的 数 了
//定位下标
you = i;
//修改标识
youp++;
break;
}
}
if (left[zuo] % right[you] ==0 && youp==1&&zuop==1){
//有价值的数 加一
num++;
//标识重置
youp = 0;
zuop = 0;
}
}
//打印 有价值的数 的 个数
System.out.println("num:"+num);
}
各种注释已经写的很清晰了,如有什么不对 还请大家指正出来。