动态规划、dot题库刷题笔记——数的统计和按条件进行输出

1 题目

1.1图片

在这里插入图片描述

1.2原题链接

链接:https://www.dotcpp.com/oj/problem1633.html

2 分析

2.1算法分析

排序函数,先从小到大排序好,然后依次进行数据的统计计数,当a[i]!=a[i-1]的时候,就说明分段了,此时就是一个新的数了。

2.2技巧分析

注意:

  1. 我的for循环的i是从1开始的
  2. 计数的count也是从1开始的
  3. 输出的是if判断语句之后的a[i-1],也就是上次出现的数。
  4. 最后一个数是单独输出的,原因就是因为我最终只能输出到a[i-1],即使i=length-1了,我也没法输出length-1这个元素,因此是要单独输出的
  5. 最后一个数的个数是算出来的,这样更快一点

3 关键点

动态规划、排序函数、Scanner的控制台输入、格式

这里的格式我也不想说太多,大家有在网上刷题的应该知道,输入输出是严格按照要求的,前三次我的格式错误的原因就是因为自己多输出了一个System.out.println();自己在测试的时候加这个是为了阅读的方便。放进题库中的编译器忘记去掉这个就跑不通过了。总而言之,格式很重要!!!
在这里插入图片描述

4 代码

package 动态规划;

import java.util.Arrays;
import java.util.Scanner;


public class Demo_1633 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int length=scanner.nextInt();//输入长度
		int [] a=new int [length];//定义数组
		for(int i=0;i<length;i++){//往数组中写入数据
			a[i]=scanner.nextInt();
		}
		//排序之后数组变成从小到大
		Arrays.sort(a,0,length);
		int count=1;//记录数出现的个数
		int MaxCount=0;
		for(int i=1;i<length;i++){
			if(a[i]!=a[i-1]){
				System.out.print(a[i-1]+" ");
				System.out.println(count);
				MaxCount+=count;//为计算最后一个数的个数做准备
				count=1;//赋值为1,对一个新的数进行统计个数
			}else{
				count++;
			}
		}
		System.out.print(a[length-1]+" "+(length-MaxCount));
	}
}

5 小吐槽

不要问我为什么这样做奥,毕竟这是算法知识,可以千变万化的,而且这种是最简单最基础的,,,以前用dot是写C或者C++去编译。

  1. 如果我写的是C语言,我会用冒泡排序的方法,输入的话就用while语句和scanof搭配输入,同样用数组。
  2. 如果我写的是C语言,我会用sort排序,这里我输入的时候就用字符串进行输入了,,,因为这样我看起来爽一点。
  3. 至于java,就上面的,简单粗暴,sort排序都封装好了,有多想不开才用桶排序、快速排序、冒泡排序去做呀。。。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值