顺时针打印矩阵(剑指 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;
}