Java之求数组中两个数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

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

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

通过使用空间换取时间,降低时间复杂度时间复杂度O(n)空间复杂度o(n)
public int[] twoSum(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];
        if (map.containsKey(complement)) {
            return new int[] { map.get(complement), i };
        }
        map.put(nums[i], i);
    }
    throw new IllegalArgumentException("No two sum solution");
}
 

原文地址:https://www.cnblogs.com/chaplin-code/p/10051366.html

时间: 2025-01-10 22:03:05

Java之求数组中两个数之和的相关文章

python实现给定一个数和数组,求数组中两数之和为给定的数

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数.你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 代码实现: def twoSum(self, nums, target): nums_bak = nums.copy() nums.sort() i = 0 j = 0 for k in range(0,

找出数组中两数之和为指定值的所有整数对

一,问题描述 给定一个整型数组(数组中的元素可重复),以及一个指定的值.打印出数组中两数之和为指定值的 所有整数对 二,算法分析 一共有两种方法来求解.方法一借助排序,方法二采用HashSet 方法一: 先将整型数组排序,排序之后定义两个指针left和right.left指向已排序数组中的第一个元素,right指向已排序数组中的最后一个元素 将 arr[left]+arr[right]与 给定的元素比较,若前者大,right--:若前者小,left++:若相等,则找到了一对整数之和为指定值的元素

求数组中两两相加等于20的组合(Python实现)

题目 求数组中两两相加等于20的组合. 例:给定一个数组[1, 7, 17, 2, 6, 3, 14],这个数组中满足条件的有两对:17+3=20, 6+14=20. 解析 分为两个步骤: 先采用堆排序或快速排序对数组进行排序,时间复杂度为O(nlogn). 然后对排序的数组分别从前到后和从后到前进行遍历, 时间复杂度为O(n). 假设从前到后遍历的下标为begin,从后到前遍历的下标为end. 当arr[begin] + arr[end] < 20时,满足条件的数一定在[begin+1, en

求数组中两两相加为某个数字的组合数

/** * 求数组中两两相加是20的组合数 * @param array * @param sum */ public static void getMethod_3(int[] array,int sum){ int count = 0; for(int i=0;i<array.length;i++){ if(i==array.length-1){ break; } for(int j=i+1;j<array.length;j++){ if(array[i]+array[j]==sum){

无序数组array, 找到数组中两个数的最大差值

题目链接: 无序数组array, 找到数组中两个数的最大差值, 且大数出现在小数之后,如:arr[i]-arr[j], 且 i<j.比如: array 是 [2, 3, 10, 6, 4, 8, 1],最大差值是8(10-2) 解题思路: 记录当前访问过的数组中的最小值 min_val; 2) 当前元素值arr[i] - min_val 和 max_diff作比较 若大于 max_diff , 则更新它的值 1 import javax.validation.constraints.Min; 2

java语言插入数组中一个数,仍然能够实现排序

package com.llh.demo; import java.util.Scanner; /** * * @author llh * */ public class Demo16 { /* * 插入数组中一个数,仍能排序 */ public static void main(String[] args) { int []arr={100,70,50,30,10,0}; int []bb=new int[arr.length+1]; System.out.print("请输入你要插入的数字:

剑指Offer解题报告(Java版)——排序数组中某个数的个数 38

? ? 分析问题 ? ? 问题只需要找到排序数组中某个数K的个数,由于已经是排序了,K一定是在一堆的,所以我们只需要找到第一个K的index1,然后找到最后一个K的index2就可以了 ? ? 而寻找K的过程我们一般通过二分法查找,这样时间复杂度能降到logn ? ? 解决问题 ? ? 我们通过二分法寻找k,如果中间的数小于k,那么在前半段找k:如果中间的数大于k,那么在后半段找k,那么如何判断找到的k是否是一堆k的边界呢 ? ? 找第一个k的时候判断方式如下: 如果中间的数等于k,那么先判断前

有序数组中两个数的和等于一个输入值的函数

题目:        输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度为O(N). 如果有多对数字的和等于输入的数字,输出任意一对即可. 例如输入数组1,2,4,7,11,15和数字15,由于4+11=15,因此输出4和11. 代码如下: /*data[] 为有序数组, length 为数组的长度 sum为用户输入的和 num1 为符合和等于sum的第一个数 num2 为第二个数*/ #include<iostream> using

[Swift]LeetCode421. 数组中两个数的最大异或值 | Maximum XOR of Two Numbers in an Array

Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum result of ai XOR aj, where 0 ≤ i, j < n. Could you do this in O(n) runtime? Example: Input: [3, 10, 5, 25, 2, 8] Output: 28 Explanation: The maximum resul