有重复的数据(java)

在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。

你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。

输入格式:
你的程序首先会读到一个正整数n,1<=n<=100000。然后是n个整数。

输出格式:
如果这些整数中存在重复的,就输出:
YES
否则,就输出:
NO

题目给的输入样例:

5
1 2 3 1 4

输出样例:

YES

另外提供几组输入用例:

1
2
2
1 1
2
1 2
5
1 2 3 1 4
4
3 2 1 1
  • 普通二重循环暴力查询肯定要超时。
  • 如果有人使用的二分查询(因为暴力查询时间慢,所以我最开始想的是二分),记得要排序(最开始我没排序,还以为自己做的还挺对,其实逻辑就有问题)。
  • 这题有几组测试用例在用Arrays.binarySearch的时候就算你数组没被sort结果也显示为正确(我做的时候search前没sort数组都得了大半的分,但是由于结果肯定是错的,再怎么改上传结果都不能全对),但是自己测试的话会发现像我这里给的第五组这样的数据是能明显说明代码逻辑有问题的。由于没有排序省了大量的时间,这样没sort数组的代码上传结果倒是没有超时
  • 二分查询必须建立在排序的基础上,不排序结果会莫名的怪。(具体想知道咋回事的找度娘)。

  • 简便方法,用HashSet的默认去重,用size()和输入的数据个数相比,不等就输出YES,反之输出NO,但还是由于Scanner,结果会超时。

  • 后来脑子清醒了发现,输入就不一个一个scanner.nextInt()输入,直接读一行,用空格分隔输入数据,再用Integer.parseInt()转成数字放入HashSet中,这样做的结果快了很多,结果也正确了。

  • 这个题的话,我查csdn那些大佬的代码时,看到说Scanner的输入太耗时了,他们举出了用“输入挂”的方法,具体用的输入缓冲流,具体代码我没敲过,这里附两个网址。

    顾道长生 这题的解法(用“输入挂”代替了Scanner)

    博客园 懒人部落 对Scanner和“输入挂”效率的测试

这里我就不给暴力查询的代码了

下面先给两个二分查询的代码,最后给出我上传正确的代码(没用“输入挂”,输入挂的话我暂时还不会)

//这是PTA上传的错误版的代码 但是我觉得逻辑没啥问题 具体是后3、4测试点超时  大量的数据使得sort耗时
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int len=scanner.nextInt();int[] arr = new int[len];arr[0] = scanner.nextInt();int temp;for (int i=1; i<len; i++) {arr[i] = scanner.nextInt();temp=arr[i];Arrays.sort(arr, 0, i);int j=Arrays.binarySearch(arr, 0, i, temp);if (j>=0 && j<=i-1) {System.out.print("YES");return ;}}System.out.print("NO");}
}
//这个代码我觉得逻辑是有问题的(没排序)  但是上传1、4测试点还过了
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int len=scanner.nextInt();scanner.nextLine();int[] arr = new int[len];arr[0] = scanner.nextInt();for (int i=1; i<len; i++) {arr[i] = scanner.nextInt();int j=Arrays.binarySearch(arr, 0, i-1, arr[i]);if (j>=0 && j<=i-1) {System.out.print("YES");return ;}}System.out.print("NO");}
}
//正确代码
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int len=scanner.nextInt();scanner.nextLine();String str = scanner.nextLine();String[] strs = str.split(" ");Set<Integer> set = new HashSet<Integer>();for (int i=0; i<len; i++) {set.add(Integer.parseInt(strs[i]));}if (set.size() == len) {System.out.println("NO");}else {System.out.println("YES");}}
}

PTA Java版 有重复的数据相关推荐

  1. java 找出重复的数据_java 查找list中重复数据实例详解

    java 查找list中重复数据实例详解 需求: 查找一个list集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据, ...

  2. java list过滤重复的数据_List 去除重复数据的 5 种正确姿势!

    以下介绍五种-不同的方法去除 Java 中ArrayList中的重复数据 1.使用LinkedHashSet删除arraylist中的重复数据 LinkedHashSet是在一个ArrayList删除 ...

  3. java list 合并 重复的数据_Java ArrayList合并并删除重复数据3种方法

    首页 > 基础教程 > 集合框架 > ArrayList类 Java ArrayList合并并删除重复数据3种方法 1. 通过List自带方法list.retainAll() Lis ...

  4. java map去重复的数据_使用HashMap去重复数据.

    因为HashMap是键值对形式,所以一个键只对应一个Value,利用这个原理,我们就可以根据某列重复数据做键对重复数据进行处理啦~ 首先先看看我要处理 的数据 然后我最后想要的结果: 需求:根据gro ...

  5. java list 不重复添加数据_Java--如何高效向List中存放不重复的数据(附带时间测试)...

    set不允许出现重复的值(key) List是不能存储重复数据的,而我们想利用List存储不重复的元素,一般都使用List自带的contains方法对元素进行判断,如果不包含再进行添加,但是这样太耗时 ...

  6. 【Java代码】Java版本的NGender根据中文姓名猜测其性别及男性化/女性化程度(Python版本地址+Java版本源码+基础数据)

    [资源链接] 链接:https://pan.baidu.com/s/1NSH5T0qkTTcOJbURd9Mq7A 提取码:nnx6 [包含文件] 1.需求说明 由于项目需要通过姓名判断性别,在网络上 ...

  7. java系统对接方案_阿里巴巴开放平台SDK(java版). 接入授权店铺数据,对接企业内部管理系统的解决方案...

    AlibabaSDK-java 阿里巴巴开放平台SDK. 接入授权店铺数据,对接企业内部管理系统的解决方案 获取授权链接 @Test public void testGetPreAuthUrl() t ...

  8. Java算法:牛客网Java版剑指Offer全套算法面试题目整理及电子档,Java算法与数据结构面试题,面试刷题、背题必备!牛客网剑指offer

    剑指offer(java版) 牛客网Java版剑指Offer全套题目67道 资源来源于网络 目录 1.二维数组中的查找 2.替换空格 3.从尾到头打印链表 4.重建二叉树 5.用两个栈实现队列 6.旋 ...

  9. Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据流程分析【转】

    Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据&流程分析 QQ空间说说抓取难度比较大,花了一个星期才研究清楚! 代码请移步到GitHub GitHub地址:http ...

最新文章

  1. android7.0如何加载本地图片,Android 6.0和7.0 加载同一张图片,结果不同
  2. 学习动态性能表(10)--v$session_longops
  3. 为提高研发和测试质量而规范Scrum项目需求描述
  4. matlab启动不了jvm,MATLAB ::在-nojvm启动选项下不再支持此功能
  5. 无标题自用临时文档.C# | python交互
  6. 学知识的时候,把自己放的低一点
  7. 2015年3月计算机二级vb题库,2015年计算机二级vb机试试题
  8. 通用浏览器插件技术概况与分析
  9. Flash 用FLASH遮罩效果做图片切换效果
  10. [安全攻防进阶篇] 三.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏
  11. 云服务器ECS能做什么用途?
  12. Bootstrap响应式图表设计
  13. 新号起步狂揽近200万粉,“老年”账号也能成为推广黑马
  14. ionic 3 http htpps
  15. 应用回归分析(知识点整理)(四)——SPSS处理自相关(序列相关)
  16. 奇葩90后引领了哪些互联网潮流?
  17. 写给 35 岁的自己!
  18. 机器学习-白板推导系列笔记(二十八)-BM
  19. 调用讯雷下载文件(转)
  20. UE4 插件Water系统

热门文章

  1. android studio ndk HelloWorld 编译环境搭建
  2. 奇葩的公司,奇葩的现象……
  3. 深度学习框架Keras的安装
  4. 博客大巴发布模块,如何使用?
  5. 书摘|什么是大数定律
  6. Unity笔记---模拟行星旋转(含代码)
  7. 小程序做电商的硬伤 “正规军”入驻 草根望尘莫及
  8. 相似图片搜索原理一(ahash—c++实现)
  9. 【翻译】D3D10/D3D11中的纹理资源
  10. 威纶通触摸屏的配方功能具体使用方法介绍(宏指令写入PLC)