day01刷题记录

这篇具有很好参考价值的文章主要介绍了day01刷题记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目一

牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。
例如:
一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2
为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。
如样例所示:
如果牛牛把6个队员划分到两个队伍
如果方案为:
team1:{1,2,5}, team2:{5,5,8}, 这时候水平值总和为7.
而如果方案为:
team1:{2,5,8}, team2:{1,5,5}, 这时候水平值总和为10.
没有比总和为10更大的方案,所以输出10.

输入描述:
输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)

第二行包括3*n个整数a_i(1 ≤ a_i ≤ 10^9),表示每个参赛选手的水平值.

输出描述:
输出一个整数表示所有队伍的水平值总和最大值.

分析

牛牛发现队伍的水平值等于该队伍队员中第二高水平值。
为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。
这里最关键的就是这两句话,从而引申出俩个问题.
第一个问题怎么找出第二水平值?
第二个问题是怎么确保所有队伍的水平值最大?
我既然提出了这俩个问题,那么自然就会去解决它,我的大体思路就是
1.先排序
2.再分组
看图解,大家就明白了
day01刷题记录

题解

代码展示:

import java.util.*;
public class Main{
public static void main(String[] args) {
	Scanner scan = new Scanner(System.in);
	while(scan.hasNextInt()) {
		int n = scan.nextInt();
		long[] array = new long[3*n];
		for(int i = 0;i < (3*n);i++) {
			array[i] = scan.nextLong();
			}
Arrays.sort(array);
long sum = 0;
		for (int i = 0; i < n; i++) {
			sum += array[array.length-(2*(i+1))];
}
System.out.println(sum);
}
}

题目二

描述
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
输入描述:
每个测试输入包含2个字符串
输出描述:
输出删除后的字符串

分析

这里我们要分清楚输入和输出.
输入的是俩个字符串
输出的是删除后的字符串.
我的解决思路如下:
1.申请一个256的空数组
2.遍历str2中字母出现的次数,在数组记录下来
3.遍历str1中字母出现的次数,如果在数组出现过,就不记录.
4.把没出现过的字符串输出即可.
具体图解如下:
day01刷题记录

题解

现如今我提供俩种代码,一种是直接利用数组,一种是使用hashmap

直接使用数组

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
      
            String str1 =in.nextLine();
            String str2 =in.nextLine();
            String result=deleteChars(str1,str2);
            System.out.println(result.toString());

    }
    public static String deleteChars(String str1, String str2) {
        int[] charCount = new int[256];

        // 遍历str2,记录每个字符出现的次数
        for (int i = 0; i < str2.length(); i++) {
            charCount[str2.charAt(i)]++;
        }

        StringBuilder result = new StringBuilder();

        // 遍历str1,如果字符没有在str2中出现过,则添加到结果中
        for (int i = 0; i < str1.length(); i++) {
            if (charCount[str1.charAt(i)] == 0) {
                result.append(str1.charAt(i));
            }
        }

        return result.toString();
    }
}

使用java内部hashmap解决文章来源地址https://www.toymoban.com/news/detail-433965.html

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String s1=scanner.nextLine();
        String s2=scanner.nextLine();
        HashMap<Character,Integer> map=new HashMap<>();
        for (int i=0;i<s2.length();i++){
            if (map.get(s2.charAt(i))==null){
                map.put(s2.charAt(i),1);
            }else {
                map.put(s2.charAt(i),map.get(s2.charAt(i))+1);
            }
        }
        String ret="";
        for(int j=0;j<s1.length();j++){
            if(map.get(s1.charAt(j))==null){
                ret+=s1.charAt(j);
            }
        }
        System.out.println(ret);
    }

到了这里,关于day01刷题记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣算法刷题Day42|动态规划:01背包问题 分割等和子集

    力扣题目:01背包问题(二维数组) 刷题时长:参考题解 解题方法:动态规划 + 二维dp数组 复杂度分析 时间 空间 问题总结 理解递推公式困难 本题收获 动规思路:两层for循环,第一层i遍历物品,第二层j枚举背包容量以内所有值 确定dp数组及下标的含义:dp[i][j] 表示从下标

    2024年02月13日
    浏览(41)
  • LeetCode刷题记录——day2

    https://leetcode.cn/problems/product-of-array-except-self/description/?envType=study-plan-v2envId=top-interview-150 问题在于不使用除法并且空间复杂度为 O(1) ,当第一次从头开始遍历时由于不知道后续数组元素是什么,所以无法得到答案,而如果当知道一个后续数组元素后,又回去更新答案的话,无

    2024年03月20日
    浏览(69)
  • LeetCode刷题记录——day4

    https://leetcode.cn/problems/trapping-rain-water/description/?envType=study-plan-v2envId=top-interview-150 对于一个可以构成“碗”的序列,最后装满水的话应该和最短的一边齐平,那么可以左右各遍历一次,记录每个元素位置对应的最短边高度,再对比就可以得出左右哪边最短 总结,对于一些左右

    2024年03月23日
    浏览(30)
  • LeetCode刷题记录——day3

    1、https://leetcode.cn/problems/gas-station/submissions/514930619/?envType=study-plan-v2envId=top-interview-150 对于这个问题可以这样来考虑,将数据看作一个环,如果答案唯一,那么就意味着从任意一个节点开始寻找,最后都会得到同一个节点的答案,那么为何不直接从0节点开始呢? 其次,我们可

    2024年03月21日
    浏览(37)
  • LeetCode刷题记录——day1

    https://leetcode.cn/problems/h-index/description/?envType=study-plan-v2envId=top-interview-150 注:题目有点难理解,多读几遍 可以这样考虑,建立另一个临时数组 temp ,当第 i 篇文章被引用 citiations[i] 次时,令 j=citiations[i] 的 temp[j] 均加一,也就是现在对于任意 j 至少有 temp[j] 篇论文引用次数大

    2024年03月18日
    浏览(29)
  • 牛课刷题Day5(编程题)

    1.合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组 正确答案: 2.在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组 正确答案: 解析:本题可使用splice方法,该方法可接收多个参数。第一个参数表示数组起始位置,第二个参数表

    2024年02月08日
    浏览(23)
  • 【LeetCode题目详解】第九章 动态规划part01 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 (day38补)

    斐波那契数  (通常用  F(n) 表示)形成的序列称为 斐波那契数列 。该数列由  0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: 给定  n ,请计算 F(n) 。 示例 1: 示例 2: 示例 3: 提示: 0 = n = 30 斐波那契数列大家应该非常熟悉不过了,非常适合作为动规第

    2024年02月07日
    浏览(33)
  • Day14 01-Shell脚本编程详解

    第一章 Shell编程【重点】 1.1. Shell的概念介绍 1.1.1. 命令解释器 Shell是命令解释器(command interpreter),是Unix操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作系统内核(kernel)能够识别的指令,并且操作系统内核执行完将返回的输出通过

    2024年02月12日
    浏览(27)
  • 【刷题笔记8.8】LeetCode题目:两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是, 数组中同一个元素在答案里不能重复出现 。 你可以按任意顺序返回答案。 解法1:使用HashMap对数

    2024年02月13日
    浏览(32)
  • 【刷题笔记8.10】LeetCode题目:有效括号

    给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号 首先,解决此题,我们要明确使用 栈

    2024年02月13日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包