BiliBili 三道编程题(2020/09/04)

BiliBili 三道编程题

第一题求连续1数组

思路:直接暴力求解

public class Solution {
    
    
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param arr int整型一维数组
     * @param k int整型 允许0变为1的个数
     * @return int整型
     */
    public static int GetMaxConsecutiveOnes (int[] arr, int k) {
    
    
        // write code here
        int maxV = -1;
        int numZeros;
        for(int i=0; i<arr.length; i++){
    
    
            for(int j=i; j<arr.length; j++){
    
    
                numZeros = getZeros(Arrays.copyOfRange(arr,i,j-i+1));
                if(numZeros <= k){
    
    
                    maxV = Math.max(maxV,getSum(Arrays.copyOfRange(arr,i,j-i+1))+numZeros);
                }
            }
        }
        return maxV;
    }
    private static int getSum(int[] arr){
    
    
        int sum=0;
        for(int i=0; i<arr.length; i++){
    
    
            sum+=arr[i];
        }
        return sum;
    }

    private static int getZeros(int[] arr){
    
    
        int count=0;
        for(int i=0; i<arr.length; i++){
    
    
            if(arr[i]==0){
    
    
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
    
    
        int[] arr = new int[]{
    
    1,1,1,0,0,1};
        int res = GetMaxConsecutiveOnes(arr,2);
        System.out.println(res);
    }
}

第二题旋转打印数组 leetcode原题

思路:设置行列边界,逐渐收缩

public class Solution {
    
    
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param matrix int整型二维数组
     * @return int整型一维数组
     */

    public int[] SpiralMatrix (int[][] matrix) {
    
    
        // write code here
        int rows = matrix.length;
        int cols = matrix[0].length;

        int[] res = new int[rows*cols];
        if(rows==0||cols==0) return res;
        int up = 0, down = rows-1, left = 0, right = cols-1;
        int i = 0;
        while(i<rows*cols){
    
    
            for(int col=left; col<=right;col++) {
    
    res[i] = matrix[up][col];i++;}
            up++;
            for(int row=up; row<=down;row++) {
    
    res[i] = matrix[row][right];i++;}
            right--;
            for(int col=right; col>=left;col--) {
    
    res[i] = matrix[down][col];i++;}
            down--;
            for(int row=down; row>=up;row--) {
    
    res[i] = matrix[row][left];i++;}
            left++;
        }
        return res;
    }

}

第三题碎片平均数

思路:用了一个int变量存次数,并存入list(不知道什么边界情况没有考虑到,a了87.5,有一样的吗?)

public class Solution {
    
    
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param str string字符串
     * @return int整型
     */
    public int GetFragment (String str) {
    
    
        // write code here
        ArrayList<Integer> list = new ArrayList<>();
        int cnt = 1;
        if(str.length()<=1) return str.length();
        if(str.length()>=2 && str.charAt(0)!=str.charAt(1)) list.add(cnt);
        for(int i=1; i<str.length(); i++){
    
    
            if(str.charAt(i)==str.charAt(i-1)){
    
    
                cnt++;
                if(i==(str.length()-1)){
    
    
                    list.add(cnt);
                    break;
                }
            }
            else{
    
    
                list.add(cnt);
                cnt=1;
                if(i==(str.length()-1)){
    
    
                    list.add(cnt);
                    break;
                }
            }

        }
        int sum = 0;
        for(int v:list){
    
    
            sum+=v;
        }
        return sum/(list.size());
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_41896265/article/details/108411419