leetcode(1)two sum

本文介绍了LeetCode上经典题目“两数之和”的三种解法,包括暴力破解、哈希表优化及进一步改进的方法,详细展示了每种方法的实现思路与代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天开始自己的leetcode刷题之旅,希望能多多锻炼自己的思维和代码能力!

先从easy的开始

 

题目简介:给出一个数组,从中找到两个数相加等于目标值,返回这两个数的下标

 

解法一:暴力突破,时间复杂度o(n*n) 

思路:两层循环,第一层循环确定第一个加数,第二层循环,让第一个加数与数组的每一个值相加,如果结果等于目标值,并且两个数的下标不相等,那么就输出这两个数的下标

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
   var temp=0;
    for(var i=0;i<nums.length;i++){
        temp=nums[i];
        for(var j=0;j<nums.length;j++){
            if(temp+nums[j]==target && j!=i){
                return [i,j];
            }
        }
    }
};

解法二 :利用哈希,时间复杂度O(n)

思路:首先将数组的值保存到hash表中,然后在下一个循环中判断(target-num[j])在hash表中是否存在,如果存在且二者下标不相等的话,那么就返回二者的下标

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    var hash={};
    for(var i=0;i<nums.length;i++){
        hash[nums[i]]=i;
 }
    for(var j=0;j<nums.length;j++){
        if(hash[target-nums[j]] && j!=hash[target-nums[j]]){
            return [j,hash[target-nums[j]]];
        }
    }
};

 解法三:把解法二再稍稍优化一点点

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    var hash={};
    var temp=0;
    for(var i=0;i<nums.length;i++){
        temp=hash[target-nums[i]];
        if(temp!==undefined && temp!=i)
            return [temp,i];
            hash[nums[i]]=i;
    }
};

本来以为写一道题可简单了,一下子就通过了,但是要写出优秀的代码来,还是很费劲啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值