Suma de dos números (Python + Java)

Dada una matriz de enteros nums y un objetivo de valor de destino de entero, encuentre los dos enteros cuya suma es el valor de destino de destino en la matriz y devuelva sus subíndices de matriz.
Se puede suponer que solo habrá una respuesta para cada entrada. Sin embargo, el mismo elemento de la matriz no puede aparecer repetidamente en la respuesta.
Las respuestas se pueden devolver en cualquier orden.

Ejemplo 1:

Entrada: nums = [2,7,11,15], destino = 9
Salida: [0,1]
Explicación: nums[0] + nums[1] ==9, devuelve [0, 1].

Ejemplo 2:

Entrada: nums = [3,2,4], destino = 6
Salida: [1,2]

Ejemplo 3:

Entrada: nums = [3,3],
objetivo = 6 Salida: [0,1]

Python:
Idea 1: Solución violenta: dos capas de bucle for para recorrer la lista

def sums(nums,target):
    for i in range(len(nums)):
        num = nums[i]
        for j in range(i+1,len(nums)):
            if nums[j] == target - num:
                return i,j

Idea 2: al usar objetos de enumeración, la función enumerate() combina un objeto de datos transitable (como una lista, una tupla o una cadena) en una secuencia de índice, enumera datos y subíndices de datos al mismo tiempo y usa un diccionario para almacenar números enteros y su subíndice

def enum(nums, target):
    dic = {
    
    }
    for index,el in enumerate(nums):
        if target - el not in dic:   # in操作符用于判断键是否存在于字典中
            dic[el] = index  # 存储数值和下标
        else:
            return [dic[target - el], index]

if __name__ == '__main__':
    nums = [2, 7, 11, 15]
    target = 9
    print(enum(nums,target))

enumerate(nums)返回值:
0 2
1 7
2 11
3 15
输出:[0, 1]

Java: use HashMap para realizar el mapeo de pares clave-valor

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

// 两数之和
public class TwoSum {
    
    
	public static void main(String[] arg){
    
    
		int[] arr = {
    
    2,7,11,15};
		int target = 9;
		for(int i : twosum(arr, target)){
    
    
			System.out.println(i);
		}
	}
	
	public static int[] twosum(int[] nums,int target) {
    
    
		int[] arr = new int[2];
		Map<Integer, Integer> map = new HashMap<>();
		for(int i = 0;i < nums.length;i++){
    
    
			int num = target - nums[i];
			if(map.containsKey(num)){
    
      //检查 hashMap 中是否存在指定的 key 对应的映射关系
				arr[0] = map.get(num);  //获取指定 key 对应对 value
				arr[1] = i;
			}
			map.put(nums[i], i);
		}
		return arr;
	}
}

Supongo que te gusta

Origin blog.csdn.net/qq_43325582/article/details/122528634
Recomendado
Clasificación