zoukankan      html  css  js  c++  java
  • leetcode_1-两数之和_javascript

    题目

    1.两数之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9

    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]

    思路

    • javascript 解法

    • 一开始看到这个下意识就想先排序,然后用两个变量记录下标,假设两个变量为x = 0y = arr.length - 1,那么arr[x],arr[y]就分别代表最小和最大的值了,这时候再进入循环判断,如果小于target,则 x += 1,若大于target,则y -= 1,直到相等之后就跳出循环。

    • 复杂度就是sort的nlogn,最后代码的运行时间在80ms,内存消耗36.8MB

    代码

    
    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number[]}
     */
    var twoSum = function(nums, target) {
      const copy = [];
      for(let k=0; k <= nums.length - 1; k++) {
        // 这边copy是要记录原来数字的下标,排序之后就会打乱
        // 又因为js中数组是引用类型,如果直接复制的话是浅拷贝是不行的,当然这样子也是浅拷贝,不过都是数字就无所谓了
          copy.push(nums[k]);
      }
      nums.sort((a, b) => {
          return a - b;
      });
      let i = 0, j = nums.length - 1;
      for (;;) {
          if (nums[i] + nums[j] === target) {
              break;
          }
          if (nums[i] + nums[j] < target) {
              i += 1;
          } else {
              j -= 1;
          }
      }
      let m = -1, n = -1, flag = 0;
      for (let k=0;k<nums.length;k++) {
          if (flag == 2) {
              break;
          }
          if (nums[i] === copy[k] && m === -1) {
              m = k;
              flag++;
          } else if (nums[j] === copy[k] && n === -1) {
              n = k;
              flag++;
          }
    
      }
      return [m, n];
    };
    
    

    注意点

    • JavaScript内置的sort方法对数字的排序是无效的,所以需要另外传进去一个函数来进行判断
  • 相关阅读:
    Unique Binary Search Trees——LeetCode
    Binary Tree Inorder Traversal ——LeetCode
    Maximum Product Subarray——LeetCode
    Remove Linked List Elements——LeetCode
    Maximum Subarray——LeetCode
    Validate Binary Search Tree——LeetCode
    Swap Nodes in Pairs——LeetCode
    Find Minimum in Rotated Sorted Array——LeetCode
    Linked List Cycle——LeetCode
    VR AR MR
  • 原文地址:https://www.cnblogs.com/azoux/p/13306047.html
Copyright © 2011-2022 走看看