java刷题笔记

参考
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+ 之间的 | 表示匹配逗号或者一个或多个空白字符。这段正则表达式的含义是:匹配逗号或者一个或多个空白字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值