zoukankan      html  css  js  c++  java
  • leetcode 1.两数之和

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

    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

    示例:

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

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

    解法一:for双重循环

    var twoSum = function(nums, target) {
        var arr = [];
        for (var i = 0; i < nums.length-1; i++){
            let a = target - nums[i];
            for (var j = i+1; j < nums.length; j++){
                if(a === nums[j]){
                     arr.push(i);
                     arr.push(j);
                     return arr
                }
            }
        }
        return false
    };

    解法二:map + indexOf方法

    var twoSum = function (nums, target) {
            let arr = []
            nums.map( (item,index) => {
                if(nums.indexOf(target - item) > -1 && nums.indexOf(target - item) != index){
                arr = [index,nums.indexOf(target - item)].sort((a,b)=> a-b)
            }
            })
            return arr
        }

    map遍历数组,item是数组中的每一项,index是下标值

    indexOf返回元素在数组中第一次出现的位置

    sort对要返回的数组排序

     解法三:双指针法

    着如果方法有点类似二分法查找,只不过不需要设置中间值。因为数组是排好序的,所有可以用双指针查找,前后各一个指针开始走,如果两数之和大于target,就让后面的指针向前走,这样值会小一些,如果两数之和小于target,就让前边的指针向后走,这样值会越来越大

    var twoSum = function(numbers, target) {
        let result = []
        let left  = 0
        let right = numbers.length -1
        while(left < right) {
            if(numbers[left] + numbers[right] === target) {
                result.push(left+1)
                result.push(right+1)
                break
            }else if(numbers[left] + numbers[right] > target) {
                right--
            }else {
                left++
            }
        }
        return result
    };

    解法三的性能相对比前两个要好一些

    不积跬步无以至千里
  • 相关阅读:
    博客园博客
    mongo
    函数式编程与面向对象编程的对比
    python_字典dict要点总结
    pyhon_列表、元组要点总结
    vue-element框架通过blob进行后端token权限验证下载
    node-本地搭建服务
    (转载)测试用例标准
    soapUI学习笔记--用例字段参数化
    soapUI学习笔记---断言的小使用
  • 原文地址:https://www.cnblogs.com/lyt0207/p/12405525.html
Copyright © 2011-2022 走看看