自学内容网 自学内容网

每日小练:Day2

1.乒乓球筐

题目链接:乒乓球筐__牛客网

题目描述:

这道题主要考察B盒是不是A盒的子集,我们可以通过哈希表来做

单哈希表

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            char[] s1=in.next().toCharArray();
            char[] s2=in.next().toCharArray();
            int[] hash=new int[26];
            boolean ret=true;
            for(int i=0;i<s1.length;i++){
                hash[s1[i]-'A']++;
            }
            for(int i=0;i<s2.length;i++){
                if(--hash[s2[i]-'A']<0){
                    ret=false;
                    break;
                }
            }
            if(ret==true){
                System.out.println("Yes");
            }else{
                System.out.println("No");
            }
            

        }
    }
}

 双哈希表

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            char[] s1=in.next().toCharArray();
            char[] s2=in.next().toCharArray();

            int[] hash1 = new int[26];
            int[] hash2 = new int[26];
            boolean ret = true;
            for (int i = 0; i < s1.length; i++) {
                hash1[s1[i]-'A']++;
            }
            for (int i = 0; i < s2.length; i++) {
                hash2[s2[i]-'A']++;
            }
            for (int i = 0; i < 26; i++) {
                if (hash1[i] != hash2[i]) {
                    ret = false;
                    break;
                }
            }

            // 输出结果
            System.out.println(ret ? "Yes" : "No");
        }
        in.close(); // 关闭输入流
    }
}

2.组队竞赛

题目链接:组队竞赛_牛客网

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();
        int[] arr=new int[n*3];
        for(int i=0;i<n*3;i++){
            arr[i]=in.nextInt();
        } 
        //先将数组排序
        Arrays.sort(arr);
        int count =1;
        //每次隔着两个数取一次,第一次取得是倒数第二个数,下标是n*3-2
        int pos=n*3-2;
        long ret=0;
        //求每次取出的数的和
        while(count++<=n){
             ret+=arr[pos];
             pos-=2;
        }
        System.out.println(ret);
        }
    }

3.删除相邻数字的最大分数(⭐)

题目链接:删除相邻数字的最大分数_牛客题霸_牛客网

题目描述:

注:使用动态规划

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static int N=(int)1e4 + 10;
    static int[] sum=new int[N];
    static int[] f=new int[N];
    static int[] g=new int[N];
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();
        int x=0;
        for(int i=0;i<n;i++){
            x=in.nextInt();
            sum[x]+=x;
        }
        for(int i=1;i<N;i++){
            f[i]=g[i-1]+sum[i];
            g[i]=Math.max(g[i-1],f[i-1]);
        }
        System.out.println(Math.max(f[N-1],g[N-1]));

    }
}

 

希望能对大家有所帮助!!!!


原文地址:https://blog.csdn.net/blamep/article/details/143749670

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!