【leetcode记录帖】【1】TwoSum

题目链接:https://leetcode-cn.com/problems/two-sum/

1、暴力法:

双重循环。复杂度O(n)。

class Solution {
    public int[] twoSum(int[] nums, int target) {
	        int a[]=new int[2];
	        for(int i=0;i<nums.length;i++)
	        {
	        	for(int j=i+1;j<nums.length;j++)
	        	{
	        		if(nums[i]+nums[j]==target)
	        		{
	        			a[0]=i;
	        			a[1]=j;
	        			return a;
	        		}
	        	}
	        }
	        return a;
	    }
}

2、哈希表对全部元素记录并标记下标,一重循环即可。时间复杂度O(N)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=1;i<nums.length;i++)
        {
            map.put(nums[i],i);
        }
        for(int i=0;i<nums.length;i++)
        {
            int res=target-nums[i];
            if(map.containsKey(res) && map.get(res)!=i)
            {
                return new int[]{i,map.get(res)};
            }
        }
        return new int[]{};
    }
}

3、依然采用哈希表,第二种策略的升级版

略快,平均时间复杂度依然O(N)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<nums.length;i++)
        {
            int res=target-nums[i];
            if(map.containsKey(res) && map.get(res)!=i)
            {
                return new int[]{i,map.get(res)};
            }
            map.put(nums[i],i);
        }
        return new int[]{};
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值