java 基础编程题,急求结果

1,int isVesuvian(int n),如果n是有且仅是两组不同的两个数的平方和,返回1,否则0.

2,int isOneBalanced(int a[]),判读数组是否是平衡数组,开头连续为1的数 + 结尾连续为1的数 = 中间连续不为1的数 结果返回1,否则为0.

3,int closestFibonacci(int n),返回比n小的最大的斐波拉契元素。斐波拉契数列 1 1 2 3 5 8 13 21 34
PS:1 1 2 3 5 8 13 21 34....第三个数等于前两个数之和

第一题

public int isVesuvian(int n) {
    // 从2开始枚举i
    for (int i = 2; i <= Math.sqrt(n); i++) {
        // 从i开始枚举j
        for (int j = i; j <= Math.sqrt(n); j++) {
            if (i * i + j * j == n) {
                // 如果i和j相同或者i和j的平方和等于n,返回1
                return 1;
            }
        }
    }
    // 如果没有找到i和j,返回0
    return 0;
}

第二题

public int isOneBalanced(int[] a) {
    // 如果数组长度小于3,返回0
    if (a.length < 3) {
        return 0;
    }
    // 初始化开头连续为1的数和结尾连续为1的数
    int start = 0, end = 0;
    // 初始化中间连续不为1的数
    int middle = 0;
    // 找到开头连续为1的数
    while (a[start] == 1) {
        start++;
    }
    // 找到结尾连续为1的数
    while (a[a.length - 1 - end] == 1) {
        end++;
    }
    // 找到中间连续不为1的数
    middle = a.length - start - end;
    // 如果开头连续为1的数 + 结尾连续为1的数 = 中间连续不为1的数,返回1
    if (start + end == middle) {
        return 1;
    }
    // 否则返回0
    return 0;
}

第三题

public int closestFibonacci(int n) {
    // 初始化斐波拉契数列的前两项
    int f1 = 1, f2 = 1;
    // 循环求出斐波拉契数列的后续项
    while (f2 < n) {
        int temp = f2;
        f2 = f1 + f2;
        f1 = temp;
    }
    // 返回比n小的最大的斐波拉契数
    return f1;
}