Leetcode每日一題(1)

拾壹�發表於2020-10-06

呼呼呼~開始刷演算法題了,過程註定痛苦但是能看到自己的成長也是很快樂的事情啊!加油!!!
題目:
兩數之和
給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素不能使用兩遍。

我用的是暴力法= =

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

更優解:

class Solution{
	public int[] twoSum(int[]nums,int target){
		int len = nums.length;
		//鍵儲存陣列中的值,value是它的下標
		HashMap<Integer,Integer>map=new HashMap<>();
		//判斷target-nums[i]是否在雜湊表中,有的話返回這兩個下標,沒有的話把當前這個數和它的下標放到map集合中
		for(int i =0;i<len;i++){
			if(map.containsKey(target-nums[i])){
				return int[]{i,map.get(target-nums[i])};
			}
			map.put(nums[i],i);
		}
		return null;
	}
}

相關文章