(Java)【深基9.例1】选举学生会

news2024/9/21 16:43:43

【深基9.例1】选举学生会

    • 一、题目描述
    • 二、输入格式
    • 三、输出格式
    • 四、样例输入
    • 五、样例输出
    • 六、失败经历
    • 七、正确代码
    • 八、正确思路及易错点
      • (1)题目分析
      • (2)思路分析
      • (3)StringBuffer: 线程安全的可变字符串
      • ①StringBuffer类概述
      • ②StringBuffer对象的初始化
      • ③StringBuffer类支持的主要方法
      • ④StringBuffer类中和 String 类类似的方法

)

一、题目描述

学校正在选举学生会成员,有 n ( n ≤ 999 ) n(n\le 999) n(n999) 名候选人,每名候选人编号分别从 1 到 n n n,现在收集到了 m ( m < = 2000000 ) m(m<=2000000) m(m<=2000000) 张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序。

二、输入格式

输入 n n n m m m 以及 m m m 个选票上的数字。

三、输出格式

求出排序后的选票编号。

四、样例输入

5 10
2 5 2 2 5 2 2 2 1 2

五、样例输出

1 2 2 2 2 2 2 2 5 5

六、失败经历

  • 乍一看这个题目,感觉好简单啊,一个Arrays类的sort方法就可以解决了,结果并不然,第一次尝试虽然对了,但没有完全对,用sort方法超时了啊啊啊!
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] number = new int[m];
        for (int i = 0; i < m; i++) {
            number[i] = sc.nextInt();
        }
        Arrays.sort(number);
        for (int i = 0; i < m; i++) {
            System.out.print(number[i] + " ");
        }
    }
}

在这里插入图片描述

  • 然后使用了StringBuffer解决了超时问题,结果又超内存了。。。。。。我炸了
    其实这次已经接近正确答案了,只需将数组的大小再变小一点点就行了
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n + 1];
        int m = sc.nextInt();
        for (int i = 0; i < m; i++) {
            a[sc.nextInt()]++;
        }
        StringBuffer s = new StringBuffer();
        for (int i = 1; i < n + 1; i++) {
            while (a[i]-- != 0){
                s.append(i + " ");
            }
        }
        System.out.println(s);
    }
}

在这里插入图片描述

七、正确代码

经过多次试错,正确答案出现啦!

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int[] a = new int[sc.nextInt()];
        int m = sc.nextInt();
        for (int i = 0; i < m; i++) {
            a[sc.nextInt() - 1]++;
        }
        StringBuffer s = new StringBuffer();
        for (int i = 0; i < a.length; i++) {
            while (a[i]-- != 0){
                s.append(( i + 1 ) + " ");
            }
        }
        System.out.println(s);
    }
}

在这里插入图片描述

八、正确思路及易错点

(1)题目分析

看题目要求:把选票按照投票数字从小到大排序,而投票数字就是候选人的编号,故该题的意思可理解为把选票按照候选人编号从小到大排序

(2)思路分析

①定义一个数组,数组的下标减去一对应了候选人的编号,数组的内容用来存储每个候选人获得了多少票数。

注意点:由于候选人的编号是从1开始的,而数组下标是从0开始的,我们用a[0]存储1号候选人的得票数,a[1]存储2号候选人的得票数,a[n - 1]存储n号候选人的得票数。此时数组的大小为n

int[] a = new int[sc.nextInt()];

②使用循环进行遍历,统计每个候选人获得的票数

具体思路:每读到某个候选人的编号,就将此编号减一作为下标,读取数组中此下标对应的内容,使其自增1,起到统计候选人票数的效果,题目中提供了一共有m张选票,故总共需要读取m次。

for (int i = 0; i < m; i++) {
    a[sc.nextInt() - 1]++;
}

此时就完成了数组的下标减一对应候选人的编号,数组的内容存储以该下标作为编号的候选人获得了多少票数

③创建字符串缓冲区对象,用于存储数据(StringBuffer类的具体使用在下方)

StringBuffer s = new StringBuffer()

④由于上面数组采取一一对应的存储方式,使得数组下标减去一就是候选人的编号,所以我们只需从下标0到下标n利用for循环遍历数组,再利用while循环控制存储次数。

例如下标1对应的数组内容是7,即2号候选人有7票,即a[1] = 7,满足a[1] – != 0 条件的情况有7种,即可以循环7次, s.append(( i + 1 ) + " ")也就可以执行7次,s中也就存储了7次2

关于存储,是利用了字符串缓冲区对象s来存储选票以及追加空格,用StringBuffer才不会超时和超内存

        for (int i = 0; i < a.length; i++) {
            while (a[i]-- != 0){
                s.append(( i + 1 ) + " ");
            }
        }

⑤最后输出就可以啦

System.out.println(s);

(3)StringBuffer: 线程安全的可变字符串

①StringBuffer类概述

  • 当对字符串进行拼接操作时,每次拼接都会构成一个新的String对象,既耗费时间又浪费空间。故当一个字符串的内容需要被经常改变时就要使用StringBuffer。
  • StringBuffer与String的不同在于:String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

②StringBuffer对象的初始化

StringBuffer s = new StringBuffer();

③StringBuffer类支持的主要方法

方法作用
public StringBuffer append(String s)将指定的字符串追加到此字符序列
public StringBuffer reverse()将此字符序列用其反转形式取代
public delete(int start, int end)移除此序列的子字符串中的字符
replace(int start, int end, String str)使用给定String中的字符替换此序列的子字符串中的字符

④StringBuffer类中和 String 类类似的方法

方法作用
int capacity()返回当前容量
char charAt(int index)返回此序列中指定索引处的char值
void ensureCapacity(int minimumCapacity)确保容量至少等于指定的最小值
replace(int start, int end, String str)将指定的字符串追加到此字符序列。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将字符从此序列复制到目标字符数组dst
int indexOf(String str, int fromIndex)从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引
int lastIndexOf(String str)返回最右边出现的指定子字符串在此字符串中的索引
int lastIndexOf(String str, int fromIndex)返回 String 对象中子字符串最后出现的位置
int length()将给定索引处的字符设置为ch
void setLength(int newLength)设置字符序列的长度
CharSequence subSequence(int start, int end)返回一个新的字符序列,该字符序列是此序列的子序列
String substring(int start)返回一个新的String,它包含此字符序列当前所包含的字符子序列
String substring(int start, int end)返回一个新的String,它包含此序列当前所包含的字符子序列
String toString()返回此序列中数据的字符串表示形式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二十四、CANdelaStudio深入-ExtData编辑

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的ExtData编辑,欢迎各位朋友订阅、评论,…

推荐系统学习笔记-deep crossing

由来 2016年由微软提出&#xff0c; 完整的解决了特征工程、稀疏向量稠密化&#xff0c; 多层神经网络进行优化目标拟合等一系列深度学习在推荐系统的应用问题。 这个模型涉及到的技术比较基础&#xff0c;在传统神经网络的基础上加入了embedding&#xff0c; 残差连接等思想&…

K8s CICD实战

K8s Network之Ingress PDF路径: 链接&#xff1a;https://pan.baidu.com/s/17DxUD8KN7pU1UKIR1Ejemg 提取码&#xff1a;dwf5 一、如果项目需要修改某些代码&#xff0c;怎么办&#xff1f; &#xff08;1&#xff09;重新打成jar包 &#xff08;2&#xff09;重新制作Dockerf…

javaSE - 异常(Exception 或 RuntimeException)

一、异常的背景 1.1、初识异常 其实在我们开发中&#xff0c;就是代码出现意外状况。影响到程序的运行。 其实&#xff0c;在我们接触代码开始&#xff0c;就一直在接触异常&#xff0c;只是从来没有分类。 这点在java中&#xff0c;更加明显。 现在我们就来基本了解一下异常。…

web靶场搭建之帝国cms7.5

目录 一、漏洞描述 二、漏洞环境 三、环境搭建 四、漏洞复现 后台getshell(CVE-2018-18086) 漏洞原理&#xff1a; 漏洞复现&#xff1a; 源码审计&#xff1a; 代码注入 (CVE-2018-19462) 漏洞原理&#xff1a; 漏洞复现&#xff1a; 源码审计&#xff1a; 后台X…

Innodb存储引擎-表(逻辑存储结构、行记录格式、数据页结构)

文章目录表索引组织表InnoDB逻辑存储结构表空间(tablespace)段(segment)区(extent)页(page)行(record)行记录格式compactRedundant行溢出数据Compressed 和 Dynamic 行记录格式CHAR的行结构存储数据页结构File Header & Page Header & File TrailerInfimum 和 Supremum…

springboot《1》

map的映射 package com.kob.backend.controller.pk;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.HashMap; import java.util.Map;RestControllerRequestMapping("…

国产软件的「硬替代」与「软着陆」之辨

作者 | 曾响铃 文 | 响铃说 疫情倒逼、政策驱动、市场化博弈、国际形势拉锯等等一系列的因素正在综合影响国产软件的走势。在国内&#xff0c;国产软件替代化进程持续加速&#xff0c;国产软件正迎来逆势增长的“窗口期”。 与此同时&#xff0c;从中央到地方&#xff0c;政…

项目中pom.xml文件变灰且中间有横杠改怎么解决?

目录 问题描述: 问题解决&#xff1a; &#x1f49f; 创作不易&#xff0c;不妨点赞&#x1f49a;评论❤️收藏&#x1f499;一下 问题描述: 项目中的部分pom.xml文件是没问题的&#xff0c;部分pom.xml文件没有被识别&#xff0c;变灰且有横杠。 原因&#xff1a;操作的时…

力扣(LeetCode)163. 缺失的区间(C++)

模拟 将 lowerlowerlower 和 upperupperupper 加入数组&#xff0c;避免边界判断。 一次遍历&#xff0c;相邻元素差 111 &#xff0c;无缺失&#xff1b;相邻元素差 222 &#xff0c;缺失中间的一个数&#xff1b;相邻元素相差大于 222 &#xff0c;缺失中间一段数。根据格式…

Less知识点整理

Less 官方文档 在线Less编译工具 Less主要语法 1、变量xxx 2、嵌套 规则嵌套和冒泡 规则&#xff08;例如 media 或 supports&#xff09;可以与选择器以相同的方式进行嵌套。 规则会被放在前面&#xff0c;同一规则集中的其它元素的相对顺序保持不变。这叫做冒泡&#xff08…

计算机毕设Python+Vue新能源汽车销售管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Oracle21C:Windows版本的安装、卸载、环境变量配置、避坑指南|ORA-12514|为什么安装目录没有bin目录

前言 1、适读对象 安装Oracle21C过程中&#xff0c;被各种报错反复折磨&#xff0c;终不得其法&#xff0c;难以正常使用Oracle。 2、各种工具下载 1&#xff09;Oracle下载地址&#xff1a;官网下载页面 2&#xff09;navecat下载地址&#xff1a;navecate 2&#xff09;sqlp…

基于JAVAWEB的湛江海鲜批发选购系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

1W字文:什么是 回表查询、索引覆盖、最左匹配原则?聚集索引、非聚集索引的区别?

文章很长&#xff0c;而且持续更新&#xff0c;建议收藏起来&#xff0c;慢慢读&#xff01;疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 &#xff1a; 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

超市进销存系统的设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 该小型超市进销存系统主要针对模块管理&#xff0c;用户管理&#xff0c;进货管理&#xff0c;销售管理&#xff0c; 库…

HTTP 协议详解

目录 前言 1、HTTP 介绍 2、URL介绍 1&#xff09;了解 URL 和 URI 2&#xff09;URL 格式 3&#xff09;URL encode 3、HTTP 协议格式 1&#xff09;请求报文格式 2&#xff09;响应报文格式 3&#xff09;协议格式总结 4、HTTP 请求&#xff08;Request&#xff0…

JavaEE【Spring】:SpringBoot 热部署

文章目录一、添加框架二、Settings 开启项目自动编译三、开启运行中热部署1、低版本配置&#xff08;idea 2021.2 之前的版本&#xff09;2、高版本设置&#xff08;idea 2021.2 之后的版本&#xff09;四、使用 Debug 启动&#xff08;非Run&#xff09;一、添加框架 增加 sp…

玩以太坊链上项目的必备技能(事件-Solidity之旅十二)

事件&#xff08;Events&#xff09; Solidity 中的事件&#xff08;Events&#xff09;与任何一种编程语言中事件&#xff08;Events&#xff09;一样。 一个事件&#xff08;Events&#xff09;是一个合约可继承的成员&#xff0c;它在触发&#xff08;emit&#xff09;时存…

机器学习之分类-决策树随机森林

决策树 原理&#xff08;信息论&#xff09; 信息熵 信息&#xff1a;消除随机不定性的东西信息熵公式&#xff0c;单位bit H(X)−∑i1n(P(xi)log⁡bP(xi))H(X)-\sum^{n}_{i1}(P(x_i)\log_{b}P(x_i)) H(X)−i1∑n​(P(xi​)logb​P(xi​)) 信息增益 特征A对训练数据集D的信息…