Dada una matriz de enteros y un dato de destino, la suma de los dos números en la matriz devuelta es el subíndice de matriz de los datos de destino -leetcode

package com.pshdhx.easy;

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

/**
 * twoSum
 * @author pshdhx
 * 给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
 *
 */
public class TwoSum {
	/**
	 * 暴力枚举法
	 * @param nums
	 * @param target
	 * @return
	 */
	public int[] twoSum(int[] nums, int target) {
		int res[] =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) {
					res[0] = i;
					res[1] = j;
				}
			}
		}
		return res;
    }
	/**
	 * 哈希法
	 * @param nums
	 * @param target
	 * @return
	 * 灵感:加法变减法=>两次循环遍历用哈希表的containsKey,数组在前,i在后;
	 */
	public int[] twoSum2(int[] nums, int target) {
        Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; ++i) {
            if (hashtable.containsKey(target - nums[i])) {
            	System.out.println(hashtable.get(target - nums[i])+"-----1");
            	System.out.println(i+"-----2");
                return new int[]{hashtable.get(target - nums[i]), i};
            }
            hashtable.put(nums[i], i); // (2,0) (//进入判断了)
            System.out.println(hashtable.toString());
        }
        return new int[0];
    }
	public static void main(String[] args) {
		
		  int a[]= {2, 7, 11, 15}; 
		  int[] twoSum = new TwoSum().twoSum(a, 9); 
		  for(int i=0;i<twoSum.length;i++) { 
			  System.out.println(twoSum[i]);
		  }
		 
		//int[] twoSum2 = new TwoSum().twoSum2(new int[] {2, 7, 11, 15}, 9);
	}
}

 

Use espacio para el tiempo: use hash para reducir un recorrido.

Supongo que te gusta

Origin blog.csdn.net/pshdhx/article/details/109314081
Recomendado
Clasificación