参考
https://xuq7bkgch1.feishu.cn/docx/BodwdmrbnojrdlxDmYLc6vzsnxe
哈希表128最长连续序列
HashSet会自动去重。
HashSet是Java中的一种集合类型,它实现了Set接口,具有以下特点:
不允许存储重复的元素。
不保证元素的顺序,即不保证存储和取出元素的顺序一致。
允许存储null元素(但只能存储一个null)。
向HashSet中添加元素时,如果集合中已经存在相同的元素(根据元素的equals方法进行比较),则新的元素不会被添加,保证了集合中不会有重复元素的情况发生。这就是HashSet会自动去重的原因。
哈希表力扣349 笔记
如何定义常量final int MAX_VALUE = 100;
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int[] hash = new int[1005];
for (int i = 0; i < nums1.length; i++) {
hash[nums1[i]]++;
}
int[] results = new int[1005];
for (int i = 0; i < nums2.length; i++) {
if (hash[nums2[i]] > 0) {
results[nums2[i]]++;
}
}
int[] nums = new int[1005];
int j = 0;
for (int i = 0; i < results.length; i++) {
if (results[i] > 0) {
nums[j] = i;
j++;
}
}
int[] numsout = new int[j];
for (int i = 0; i < j; i++) {
numsout[i] = nums[i];
}
return numsout;
}
}
小美的数组询问
1.数据的取值范围 用long int 类型的范围是 -2,147,483,648 到 2,147,483,647。
long[] a = new long[(int)n];
package Arrayinquiry;
import java.util.Scanner;
public class arrayInquiry {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long n = scanner.nextLong();
long q = scanner.nextLong();
// scanner.nextLine();
long sum= 0;
long[] a = new long[(int)n];
long flag = 0;
for (int i = 0; i < n; i++) {
a[i] = scanner.nextLong();
sum += a[i];
if (a[i] == 0) {
flag++;
}
}
for (int i = 0; i < q; i++) {
long l = scanner.nextLong();
long r = scanner.nextLong();
long min = l < r ? l : r;
long max = l > r ? l : r;
long minsum = sum + min*flag;
long maxsum = sum + max * flag;
System.out.println(minsum + " " + maxsum);
}
}
}
小美的平衡矩阵
package Balancematrix;
import java.util.Scanner;
//小美的平衡矩阵
// 小美拿到了一个n∗n的矩阵,其中每个元素是 0 或者 1。
// 小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。
// 现在,小美希望你回答有多少个i∗i的完美矩形区域。你需要回答1≤i≤n的所有答案
//
// 输入描述:
// 第一行输入一个正整数n,代表矩阵大小。
// 接下来的n行,每行输入一个长度为n的 01 串,用来表示矩阵。
//
// 输出描述:
// 输出n行,第i行输出i*i的完美矩形区域的数量
//
// 示例1
// 输入例子:
/*
4
1010
0101
1100
0011
输出例子:
0
7
0
1*/
public class balanceMatrix {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.nextLine();
int[][] matrix = new int[n+1][n+1];
for (int i = 1; i <= n; i++) {
String line = scanner.nextLine();
for (int j = 1; j <= n; j++) {
matrix[i][j] = line.charAt(j-1) - '0';
}
}
int[][] dp = new int[n+1][n+1];
int[] countPerfect = new int[n + 1];
for (int i = 1; i <= n; i++) {
for(int j = 1; j<= n;j++){
dp[i][j]=matrix[i][j] - dp[i-1][j-1] +dp[i-1][j]+dp[i][j-1];
}
}
for (int i = 0; i <= n; i++) {
for(int j = 0; j<= n;j++){
for(int k = 2; k <=n;k++){
if(i+k<=n&&j+k<=n){
int sum = dp[i+k][j+k] - dp[i][j+k]-dp[i+k][j]+dp[i][j];
// System.out.println(sum);
if(sum==k*k/2&&k%2==0){
countPerfect[k]++;
}
}
}
}
}
for (int i = 1; i <= n; i++) {
System.out.println(countPerfect[i]);
}
}
}
小美的MT
package MT;
import java.util.Scanner;
public class MT {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n,k;
n = scanner.nextInt();
k = scanner.nextInt();
scanner.nextLine();
String S = scanner.nextLine();
System.out.println(S);
int cnt = 0;
for (int i = 0; i < n&&i<S.length(); i++) {
if(S.charAt(i)=='M'||S.charAt(i)=='T'){
cnt++;
}
}
if(cnt+k>n){
cnt=n;
}else{
cnt+=k;
}
System.out.println(cnt);
}
}
正则表达式
Scanner scanner = new Scanner(System.in).useDelimiter(",|\\s+");
这行代码是在 Java 中创建了一个 Scanner 对象,并设置了一个自定义的分隔符,用于指定 Scanner 在读取输入时如何进行分隔。在这里使用的分隔符是逗号 “,” 或者一个或多个空白字符(空格、制表符等)“\s+”。
设置 Scanner 的分隔符为逗号 “,” 或者一个或多个空白字符。这意味着当 Scanner 从输入流中提取 token(词元)时,会根据逗号或空白字符将输入分割成不同的部分。
在正则表达式中,| 表示逻辑“或”操作,\s+ 表示匹配一个或多个空白字符(空格、制表符、换行符等)。在 Java 中,正则表达式中的 \ 需要进行转义,所以写成 \s+。
因此,, 和 \s+ 之间的 | 表示匹配逗号或者一个或多个空白字符。这段正则表达式的含义是:匹配逗号或者一个或多个空白字符。