ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法题10

2020-02-02 19:36:15  阅读:257  来源: 互联网

标签:10 Scanner int 空格 算法 new 报数 数列


去除捣乱的报数:
题目描述
报学号,每报一次可以获得一个礼物,但是不给报数次数超过了一定的次数的学生发礼物。
规定,但发现某个数大于m次时,则认定为报数过多,需要得到去除这些学生的报数后的报数数列
输入描述
第一行:两个数,学生报到总个数n,和允许的最大重复次数m,以空格分隔,其中1<=n<=1000
第二行:n个整数,表示学生所有报数数列,以空格分开,范围是-2147483648~2147483647
输出描述
只有一行,去除超出m次的报数数字后的报数数列,该数列不改变原报数顺序,数列以空格分隔
示例1:
输入
7 2
4 3 3 3 1 5 5
输出
4 1 5 5
示例2:
输入
6 3
1 2 2 2 2 2
输出
1
        
分成两段处理

代码:

import java.util.ArrayList;
import java.util.Scanner;
public class yfd1 {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);		
		while (in.hasNextInt()) {
			int n=in.nextInt();
			int m=in.nextInt();
			int[] arr=new int[n];
			for(int i=0;i<n;i++) {
				arr[i]=in.nextInt();
			}
			ArrayList<Integer> out=new ArrayList<Integer>();
			for(int i=0;i<n-m;i++) {
				if(arr[i+m]!=arr[i]) {					
						out.add(arr[i]);															
				}else {
					int cc=1;
					while(i+m+cc<(n-m)&&arr[i+m+cc]==arr[i]) {
						cc++;						
					}
					i=i+m+cc-1;					
				}
			}
			if(arr[n-m-1]!=arr[n-m]) {
				for(int i=n-m;i<n;i++) {
					out.add(arr[i]);
				}		
			}								
			for(int nn:out)
            System.out.print(nn+" ");			
        }
	}
}
测试用例:
/*7 2
4 3 3 3 1 5 5
4 1 5 5 

6 3
1 2 2 2 2 2
1*/

yfd1

一瓢西湖水 发布了29 篇原创文章 · 获赞 0 · 访问量 462 私信 关注

标签:10,Scanner,int,空格,算法,new,报数,数列
来源: https://blog.csdn.net/alidingding/article/details/104144964

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有