纯粹记录,现在没时间都做一遍了,以后刷多点leetcode会回过头来看的,有好的想法可以留言讨论一下。
带头冲锋
代码如下:
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int n =Integer.parseInt(sc.nextLine().trim());
String startStr =sc.nextLine().trim();
String endStr =sc.nextLine().trim();
String[] startStrArr=startStr.split("\\s+");
String[] endStrArr=endStr.split("\\s+");
int[] startArr =new int[n+1];//根据选手编号找出发位置
int[] parStartArr=new int[n];//根据出发位置找选手编号
int[] endArr =new int[n+1];
int[] parEndArr=new int[n];
int count =0;
for(int i=0;i<n;i++){
int manIndex = Integer.parseInt(startStrArr[i]);
startArr[manIndex] =i;
parStartArr[i] =manIndex;
}
for(int j=0;j<n;j++){
int manIndex = Integer.parseInt(endStrArr[j]);
endArr[manIndex]=j;
parEndArr[j] =manIndex;
}
for(int k=0;k<n-1;k++){
int manIndex = parEndArr[k];//第k个到达的人的编号
int startPosition = startArr[manIndex];//找到这个编号的选手之前出发的选手
for(int m=0;m<startPosition;m++){
int beforeMan =parStartArr[m];//在manIndex之前的选手编号
int reachIndex=endArr[beforeMan];//根据编号找到达的位置
if(reachIndex>k){
count++;
break;
}
}
}
System.out.println(count);
}
}
金字塔题目题解: https://blog.csdn.net/shao1996/article/details/51910468
类似斐波那契数列,找到规律,一个for循环解决。代码如下:
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
double MOD=Math.pow(10,9)+7;
int k;
Scanner sc =new Scanner(System.in);
k = sc.nextInt();
if(k<4){
if(k==3) System.out.println(6);
else if(k==2) System.out.println(3);
else System.out.println(0);
return;
}
double step[]= new double[k+1];
step[0]=0;step[1]=0;step[2]=3;step[3]=6;
for(int i = 4; i <= k; i++)
{
step[i] = (3*step[i-2] + 2*step[i-1])%MOD;
}
System.out.println(new Double(step[k]).intValue());
}
}