zoukankan      html  css  js  c++  java
  • leetcode(1)——两数之和(简单)

    方法一:暴力枚举

      看到题目,脑袋里没有任何其他储备,就只会用两次for循环遍历,然后相加判断是否相等。而且没有做其他的处理,比如没有找到符合要求的,返回空数组[]。

      时间复杂度:o(n^2)

      空间复杂度:o(1)

     1 /**
     2  * @param {number[]} nums
     3  * @param {number} target
     4  * @return {number[]}
     5  */
     6 var twoSum = function(nums, target) {
     7     for(var i=0;i<nums.length;i++){
     8         for(var j = i+1;j<nums.length;j++){
     9             if(nums[i]+nums[j]==target){
    10                return [i,j];
    11             }
    12         }
    13     }
    14 };

    方法二:数据结构之哈希表(Map数据结构)

      一、相关知识  

      哈希表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,而哈希表的查找时间复杂度为O(1),可加快查找的速度。

      而js的对象又是基于哈希结构的,本质上是键值对的集合。但是传统上只能用字符串当作键值,因此使他的使用带来了很大的限制,没有java中的hash map那么强大。

      于是为了解决这个问题,ES6提供了Map数据结构。类似于对象,也是键值对的集合,但“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键值。

      二、解题思路

      (1)建立一个map对象,(将数组中的数和下标分别当作key和value存起来)。

      (2)再用一个循环,用target和当前遍历值相减,得到差值。

      (3)在map中使用has方法,判断此差值是否存在于当前的map对象中,若存在,则返回数值在数组中的下标;不存在则将数组中的数和下标分别当作key和value存起来。

      时间复杂度:o(n)

      空间复杂度:o(n)【以空间换时间】

     1 /**
     2  * @param {number[]} nums
     3  * @param {number} target
     4  * @return {number[]}
     5  */
     6 var twoSum = function(nums, target) {
     7      let mapO = new Map();//创建map对象
     8      for(let j=0;j<nums.length;j++){
     9         let num = target-nums[j];
    10 
    11         if(mapO.has(num)){
    12             return [mapO.get(num),j]
    13         }else{
    14              mapO.set(nums[j],j);
    15         } 
    16     }
    17 };

    总结:

      脑袋里没有正儿八经的知识,虽然可以暴力解决处理,思维不够灵活。

      用map也没有好的思路,而且考虑不够全面。

      又出了乌龙事件,一直报错,找不到原因,后来发现是圆角和半角的导致的。

    不要忘了自己为了什么前进
  • 相关阅读:
    夜半饮酒
    邀你到成都来
    成都,我的天堂
    真不想松开你的手
    创业,你懂如何求人办事么?
    只要你愿意
    【五月的歌】重振山河
    成都,我爱你
    就算忘了自己也忘不了你
    假如
  • 原文地址:https://www.cnblogs.com/songForU/p/14475629.html
Copyright © 2011-2022 走看看