HOLY SHIFT!!!!已经第二十四天了,比赛的考场已经出来了,但是具体的位置还不知道,今天被骗了20块,我测你们ma,干就完了
1.旋转(打卡题)
package daka;
import java.util.*;
/*旋转
*
*/
public class xuanzhuan {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();//3
int m = sc.nextInt();//4
int a[][] = new int [n][m];
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
a[i][j] = sc.nextInt();
}
}
int b[][] = new int [m][n];
// for(int i=0;i<m;i++) {
// b[i][0] = a[n][i];
// }
//
// for(int j=0;j<m;j++) {
// b[j][1] = a[n-1][j];
// }
//
// for(int p=0;p<m;p++) {
// b[p][2] = a[n-2][p];;
// }
for(int x=0;x<m;x++) {
for(int y=0;y<n;y++) {
b[x][y] = a[n-y-1][x];
}
}
for(int i=0;i<m;i++) {
int cont =0;
for(int j=0;j<n;j++){
System.out.print(b[i][j]+" ");
cont++;
if(cont == n) {
System.out.println();
}
}
}
sc.close();
}
}
2.滑动窗口
package zshid;
import java.util.*;
/*滑动窗口
* 在一个数组或序列上,选择一个固定的窗口大小,从左到右每次滑一格,计算题目的要求
*
* 实现的数据结构:
* 双端队列
* 1.(支持在队头和队尾进行元素的插入和删除操作)
* 2.队列中的数据是单调递增或递减的
* 3.队列中保存的是数组的下标
* 4.每次向右滑动队头弹出,新的元素插入队尾
*
* 窗口每次向后移动,若新的数字比队尾的大,就直接入队列
* 比队尾的小,则弹出队列中所有比新的数字小的值,保证当前队列的队头是当前窗口中最小的值
*/
public class hdck {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n =sc.nextInt();
//mins数组的下标为当前窗口的左边界
int [] mins = new int [n];
int [] record = new int [n];
int [] arr = new int [n];
for(int i=0;i<n;i++) {
arr[i] = sc.nextInt();
}
int k = sc.nextInt();//每次滑动的窗口的大小
//保存当前窗口的最小值(数组的下标)
LinkedList<Integer> qmin = new LinkedList<>();
//初始化双端队列 小->大
for(int i=0;i<=k;i++) {
//当有更小的进入队列时,大的从队尾弹出
while(!qmin.isEmpty() && i <n && arr[qmin.peekLast()] >= arr[i]) {
qmin.pollLast();
}
//进入队列(添加到队列尾部)
qmin.addLast(i);
}
//窗口的左边界
mins[0] = arr[qmin.peekFirst()];
for(int i=1;i<n;i++) {//窗口每次向后移动一格
//超出当前窗口左边界的需要弹出队列
if(!qmin.isEmpty() && i-k>0 && qmin.peekFirst()<i-k) {
qmin.pollFirst();//队头弹出
}
//有更小的进入队列时,大的从队尾弹出
while(!qmin.isEmpty() && i+k<n && arr[qmin.peekLast()] >= arr[i+k]) {
qmin.pollLast();
}
//当前元素加入队尾
if(i+k<n) {
qmin.addLast(i+k);
}
//将队头元素加入mins数组,
mins[i] = arr[qmin.peekFirst()];
}
for(int i=0;i != mins.length;i++) {
System.out.print(mins[i] + " ");
}
}
}