TwoSum-Leetcode

twoSum问题

/**

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

*因为 nums[0] + nums[1] = 2 + 7 = 9

*所以返回 [0, 1]

*/

通过这题了解了HashMap,

boolean containsKey(object key)用来检查map中是否包含要查询的key的信息

boolean containsValue(object value)用来检查map中是否包含要查询的value的信息

       package LeetCode;

import java.util.HashMap;
import java.util.Map;

public class TwoSum {

	public static int[] twoSum(int[] nums, int target) {
        Map <Integer,Integer> map = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            int temp = target-nums[i];
            if(map.containsKey(temp)) { //containsKey判断是否存在map中        	
                return new int[] {map.get(temp),i}; 
            }
            map.put(nums[i],i);  //加索引存入map
        }
        return new int[] {-1,-1};
    }
	public static void main(String[] args) {
		int nums[]= {1,3,5,2,7};
		int[] res = twoSum(nums,8);
		System.out.println(res[0]+" "+res[1]);
	}	
}

这几天看到公众号大牛对这个题的剖析,让我感觉自己还是没有总结好

他提到:现在的问题里面数据是无序的,那么除了用暴力求解外,还可以学到用HashMap、HashSet集合的方式;

如果题目是有序的数据,你又有什么好的想法呢?有序,就应该尝试想到双指针,一个尾,一个头,不够或者过大,移动两个指针来找。

int []twoSum(int[] nums,int target){
    int left = 0,right = nums.length-1;
    while(left<right){
        int sum = nums[left]+nums[right];
        if(sum==target) return new int[] {left,right};
               else if(sum>target)
                    right--;
               else if(sum<target)
                    left++;
        }
     return new int{-1,-1};
}

至于HashMap和HashSet的实现,等我学了再写出来记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值