Come on,baby~

(1)Contains Duplicate

有自己的思路:两个for双重循环直接一个个比较,但肯定不是最优解。所以,使用Set中的HashSet(一种没有重复元素的无序集合),最优解如下:

HashSet百度链接:http://baike.baidu.com/link?url=TmKKUevqDj_4IZT_b3bFPhJJRZdY4suUZB42Ybo-9xWtoVIMLQnNT39C_OteQlMiu6jC8stsg15EfHvt11Oz9a

  1. public class Solution {
  2. public boolean containsDuplicate(int[] nums) {
  3. if (nums != null && nums.length > 1) {
  4. Set<Integer> set = new HashSet<>(nums.length);
  5. for(int i : nums) {
  6. if (set.contains(i)) {
  7. return true;
  8. }
  9. else {
  10. set.add(i);
  11. }
  12. }
  13. }
  14. return false;
  15. }
  16. }

set.contains() set.add()方法的使用

for (int i; nums)是一个foreach循环遍历,就是遍历nums这个数组中的所有值,每次把其中的一个值赋给i.

跟for (int i = 0; i < nums.length; i++) {...}效果相同。也即上述代码可改为:

  1. public class Solution {
  2. public boolean containsDuplicate(int[] nums) {
  3. if (nums != null && nums.length > ) {
  4. Set<Integer> set = new HashSet<>(nums.length);
  5. for(int i = ; i < nums.length; i++) {
  6. if (set.contains(nums[i])) {
  7. return true;
  8. }
  9. else {
  10. set.add(nums[i]);
  11. }
  12. }
  13. }
  14. return false;
  15. }
  16. }

【注意补充Java库中相关集合的知识--卷1P562】

第二天:忘记限制数组不为空而且数组的长度要大于1。

(2)Contains Duplicate II

题目大意:给定一个整数数组nums与一个整数k,当且仅当存在两个不同的下标i和j满足nums[i] = nums[j]并且|i-j|<=k时返回true,否则返回false。

解题思路:使用HashMap(一种存储键/值关联的数据结构),key存数组元素值,value存元素对应的索引,每来一个元素进行判断如果之前没有存过则存进去,如果之前有存则取出之前那个元素的索引值判断是否小于K,小于k返回true,不小于则存进去覆盖之前的那个【思路的重点】。

  1. public class Solution {
  2. public boolean containsNearbyDuplicate(int[] nums, int k) {
  3. if (nums == null || nums.length < 2 || k < 1) {
  4. return false;
  5. }
  6. Map<Integer, Integer> map = new HashMap<>();
  7. for (int i = 0; i < nums.length; i++) {
  8. if (!map.containsKey(nums[i])) {
  9. map.put(nums[i], i);
  10. }
  11. else {
  12. int value = map.get(nums[i]);
  13. if (i - value <= k) {
  14. return true;
  15. }
  16. map.put(nums[i], i);
  17. }
  18. }
  19. return false;
  20. }
  21. }

map.containsKey() map.get() map.put()方法的使用。【key存元素对应的索引,value存元素值为什么不对???】

!!!时间超限解法:在前一解法基础上进行修改,但是时间超限

时间超限原因???

  1. public class Solution {
  2. public boolean containsNearbyDuplicate(int[] nums, int k) {
  3. if(nums == null || nums.length < 2)
  4. return false;
  5. Map<Integer, Integer> map = new HashMap<Integer, Integer>();
  6. for (int i = 0;i < nums.length; i++) {
  7. if (map.containsKey(nums[i])) {
  8. int j = map.get(nums[i]);
  9. if (i - j <= k) {
  10. return true;
  11. }
  12. else {
  13. map.remove(nums[j]);
  14. map.put(nums[i], i);
  15. }
  16. }
  17. else {
  18. map.put(nums[i], i);
  19. }
  20. }
  21. return false;
  22. }
  23. }

最早的情况考虑不周解法(估计时间也超限):eg:[1,0,1,1]和1  output:false  expected:true

  1. public class Solution {
  2. public boolean containsNearbyDuplicate(int[] nums, int k) {
  3. if(nums == null || nums.length < 2)
  4. return false;
  5. Map<Integer, Integer> map = new HashMap<Integer, Integer>();
  6. for (int i = 0;i < nums.length; i++) {
  7. if (map.containsKey(nums[i])) {
  8. int j = map.get(nums[i]);
  9. if (i - j <= k) {
  10. return true;
  11. }
  12. }
  13. else {
  14. map.put(nums[i], i);
  15. }
  16. }
  17. return false;
  18. }
  19. }

继续努力刷题--BE STRONGER AND STRONGER的更多相关文章

  1. leetcode每日刷题计划-简单篇day3

    收到swe提前批面试hhh算是ep挂了的后续 努力刷题呀争取今年冲进去! Num 21 合并两个有序链表 Merge Two Sorted Lists 注意新开的链表用来输出结果的是ListNode ...

  2. ife任务刷题总结(一)-css reset与清除浮动

    本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...

  3. 刷题ING...

    我用codeVS刷题.. 努力准备!!

  4. NOI题库分治算法刷题记录

    今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...

  5. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  6. 湾区求职分享:三个月刷题拿到 Google offer,欢迎踊跃提问

    本文仅以个人经历和个人观点作为参考.如能受益,不胜荣幸. 本文会不断的修正,更新.希望通过大家的互动最后能写出一份阅者受益的文章. 本文纯手打,会有错别字,欢迎指出,虚心接受及时更改. 小马过河,大牛 ...

  7. 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  8. 牛客网Java刷题知识点之UDP协议是否支持HTTP和HTTPS协议?为什么?TCP协议支持吗?

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  9. 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

随机推荐

  1. 机器学习(一) 从一个R语言案例学线性回归

    写在前面的话 按照正常的顺序,本文应该先讲一些线性回归的基本概念,比如什么叫线性回归,线性回规的常用解法等.但既然本文名为<从一个R语言案例学会线性回归>,那就更重视如何使用R语言去解决线 ...

  2. Servlet配置信息

    @WebServlet("/HelloServlet") @WebServlet(     Name=”Hello”,     urlPatterns=(“/hello.view” ...

  3. Docker实践(3)—浅析device mapper的thin provision

    thin provision是在 kernel3.2 中引入的.它主要有以下一些特点: (1)允许多个虚拟设备存储在相同的数据卷中,从而达到共享数据,节省空间的目的: (2)支持任意深度的快照.之前的 ...

  4. ruby中http请求方法整理

    #POST请求 请求包是json包 返回body并转换成json对象def post_json *args uri = URI.parse args[0] req = Net::HTTP::Post. ...

  5. H5课程大纲

    K1模块课程: 课程模块 课程阶段 课程内容 K1 模块 第1阶段 认识前端开发 环境配置.使用标签的分类.写法及使用规范CSS样式的使用.各类常见样式Photoshop使用16大常用样式盒模型.语义 ...

  6. OpenGL 学习

    一.红宝书学习资料汇集 第八版的图书源码 源代码: http://opengl-redbook.com/Code/oglpg-8th-edition.zip 第九版的图书源码 http://www.o ...

  7. php二维数组排序方法(转自http://www.3lian.com/edu/2013/12-26/118882.html)

    一维数组排序可以使用asort.ksort等一些方法进程排序,相对来说比较简单.二维数组的排序怎么实现呢?使用array_multisort和usort可以实现 例如像下面的数组:    代码如下: ...

  8. Spring定时器的时间表达式

    字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN- ...

  9. elasticsearch auto delete old indices

    定在crontab 每天执行 crontab -e * 2 * * * ~/autodelete.py Python 代码如下 #!/usr/bin/env python # encoding:utf ...

  10. HTTP调试工具扩展

    ★Fiddler神器之一,IE-WinNet-Fiddler-Server,能跟踪调试HTTP和HTTPS是优点也是缺点. 地址:http://www.fiddler2.com/ ★Charles,可 ...