bilibili笔试题


顺时针打印矩阵(剑指 Offer 29)

顺时针打印矩阵(剑指 Offer 29)
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

class Solution {
    
    
    public int[] spiralOrder(int[][] matrix) {
    
    
        if(matrix.length == 0) return new int[0];
        int l = 0, r = matrix[0].length - 1, t = 0, b = matrix.length - 1, x = 0;
        int[] res = new int[(r + 1) * (b + 1)];
        while(true) {
    
    
            for(int i = l; i <= r; i++) res[x++] = matrix[t][i]; // left to right.
            if(++t > b) break;
            for(int i = t; i <= b; i++) res[x++] = matrix[i][r]; // top to bottom.
            if(l > --r) break;
            for(int i = r; i >= l; i--) res[x++] = matrix[b][i]; // right to left.
            if(t > --b) break;
            for(int i = b; i >= t; i--) res[x++] = matrix[i][l]; // bottom to top.
            if(++l > r) break;
        }
        return res;
    }
}
 

Leetcode 1004. 最大连续1的个数 III

给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
示例 1:
输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释:
[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。
示例 2:
输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出:10
解释:
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。

class Solution {
    
    
	public int longestOnes(int[] A, int K) {
    
    
		int res = 0, i = 0, j = 0;
		for (; i < A.length; i++) {
    
    
			if (A[i] == 0) {
    
    
				if (K > 0) {
    
    
					K--;
				} else {
    
    
					res = Math.max(res, i - j);
					while (A[j++] == 1);
				}
			}
		}
		return Math.max(res, i - j);
	}
}
 

求碎片的平均长度

bilibili第三道题
字符碎片
“aaabbaaac” -> aaa,bb,aaa,c
求碎片的平均长度

//思路1 暴力
 public static double GetFragment (String str) {
    
    
        List<Integer> res=new ArrayList<>();
            char arr[]=str.toCharArray();

            //如果为空字符,则返回0
            if(str.length()==0) return  0;
            int n=1;     //默认最小长度1


        for (int j = 0; j <arr.length-1 ; j++) {
    
    
            if(arr[j]!=arr[j+1]){
    
    
                n++;
            }
        }
              System.out.println(arr.length/n);

               return arr.length/n;

    }


//思路2 Hashset
    public static int GetFragment2 (String str) {
    
    
        int n=0;
        int le=str.length();
        char[] ch=str.toCharArray();
        if(ch.length==0){
    
    
            return 0;
        }
        HashSet<Character> set=new HashSet<>();
        for(int i=0;i<ch.length;i++){
    
    
            if(i>=1&&set.contains(ch[i]) && ch[i]!=ch[i-1]){
    
    
                n++;
            }
            if(!set.contains(ch[i])){
    
    
                set.add(ch[i]);
                n++;
            }

        }
        System.out.println(le/n);
        return le/n;
    }


猜你喜欢

转载自blog.csdn.net/qq_38847154/article/details/108861622