小白刷力扣题库的第二题217 题小记:当我开始跟 API 文档“对敲”后,刷题世界突然亮了

    今天写217题:存在重复元素,发现了自己的短板-->基础知识不扎实,很多基础的数据类型不会使用,一些方法不了解。导致代码写不出来,知识面太窄了。

    在补基础知识的路上,我发现了一个老师都会告诉我们,但我们都不重视的好的学习方法----->看Api文档,真的超级使用,在博客园和本站(CSDN)都有很多大神分享Api文档,我对着敲了一遍

格里菲斯~大佬的代码:

https://blog.csdn.net/qq_62368250/article/details/141019275?fromshare=blogdetail&sharetype=blogdetail&sharerId=141019275&sharerefer=PC&sharesource=zhiyu2024&sharefrom=from_link

就基本掌握了集合框架的使用,我相信如果我把所有的基础知识的Api吃透的话,我就基础知识肯定可以非常牢靠,^_^

以下是第217的题目描述:

今天刷的217比较简单,只要掌握了Set集合,抓住Set集合的不重复的特性,就可以解决这道题.

以下是官方的答案:

     
        Set<Integer> set = new HashSet<Integer>();
	        for (int x : nums) {
	            if (!set.add(x)) {//set:不可重复的,单一存储结果的无序的集合
	              return true;
	            }
	        }

但是,问题是,我不并不了解Set集合啊!

所以我是这样写的:

	         Arrays.sort(nums);//先排序,让每个数字大小接近的相邻
	         for(int i=0;i<nums.length-1;++i){
	             int count=1;
	                 if(nums[i]==nums[i+1]){//每个元素和下个元素相比
	                     count++;
	                    if(count>=2){
	                     return true;
	                    }
                 }
	         }
	         return false;

    虽然复杂很多吧,但是还是可以提交成功的,就是运行速度太慢了,而且没有用Set集合的写法简洁,所以我就去b站找视频学习集合框架,老师分享了一个学习方法:去看集合框架的api文档,

搜索出文档后,发现api文档基本包含了所有集合框架的知识,罗列非常详细

ps:来源于博客园--累成一条狗

学会Set集合后:

我优化了我的代码

      Set <Integer> set=new HashSet<Integer>();
      for(int i=0;i<nums.length;i++){
         
        if(!set.add(nums[i])){//把添加语句放在if里,既可以判断是否重复,又可以添加集合元素
            return true;
//set.add(nums[i]):true添加成功 false:已经有一个相同的元素在集合里了,添加失败
        }
      }
      return false;//兜底返回,避免编译错误
    }

时间复杂度从开始的O(NlogN)到O(N)  变小

空间复杂度从开始的O(logN)到O(N)  变大

运行速度主要看时间复杂度,所以用Set集合--哈希表的方法,比排序后枚举要快。

和我一样基础不太扎实的小伙伴可以平时多看看api文档^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值