LeetCode推荐

最近在LeetCode上做了一些算法题,大部分是最基础easy难度的题。做完之后很多算法需要重构才可以通过所有的cases,在这个过程中我发现有效提高了基础语言能力,比单纯写项目提高的更快,希望不知道如何提高语言能力的小伙伴可以去上面刷几道题。

下图是这一周刷的题,每天上班空隙刷一道,不贪多。

    


     下面介绍其中一道题:

    Single Number

     Given an array of integers, every element appears twice except for one. Find that single one.

     翻译就是给你一个整形数组,除了某一个元素外,其他元素都会出现两次,找到那个只出现一次的元素。

     首先想到使用遍历+计数器的方法,大意是使用两个for循环遍历比对数组,如果每次循环结果计数器不等于2而是等于1,那么就返回那个数字

 
var singleNumber = function(nums) {    
   let count = 0
     for(let i=0;i<=nums.length-1;i++){
       for(let m=0;m<=nums.length-1;m++){
          if(nums[i]===nums[m]){
             count++
        }

     }
     if(count===1){
     return nums[i] 
     }
     count = 0;
  }
}
     这段代码在桌面编译器是可以执行得到正确结果的,但是在leetCode上显示:

     程序运行超时,这就是leetCode比较有意思的地方了,你的代码时间复杂度和空间复杂度太高是不可以通过的,这就逼迫我一直重构重构。。。

    于是就有了下面这个方案:

var singleNumber = function(nums) {
    //查询数组之中不重复的那个元素,使用排序法,使用一个循环来遍历数组
    //排序后的数学特征是:如果每次步幅为2的话,当遇到两个不相等的数字时,那么第一个数字就是那个不重复的数
    //而且不需要考虑数组角标越界
    nums.sort(compare)
    let i =0;
    while(nums[i]===nums[i+1]){
        i=i+2
    }
    return nums[i]
  };
function compare(a,b){
    return a-b
}
      只是用了1个循环,排序后利用题目的数学特征去判断,一对儿一对儿判断。

      例如:

       [1,1,2,2,3,4,4]

      第一对相等,i=i+2之后判断 第二对相等 同理判断第三对不等,那么答案就是nums[i]

提交后:

         

             提交成功。不过这只是其中一道比较简单的题,还有大量medium和hard题目前刷起来比较费时,有的则根本没有思路,但是我相信以后我会全刷完的。

             目前leetCode上面有679道题,还在递增,内容涉及各类算法,数据结构,数据库,网络等,确实是一个练手的宝库。

          


 
 
 
 






     


猜你喜欢

转载自blog.csdn.net/weixin_40564006/article/details/78352775
今日推荐