首页 > 其他分享 >LeetCode 1.两数之和

LeetCode 1.两数之和

时间:2023-10-23 20:37:25浏览次数:37  
标签:map target nums int 数组 new LeetCode 两数

题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例

image

第一次提交的代码

import java.util.*;
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map=new HashMap<>(nums.length);
        List<Integer> result=new ArrayList<>(2);

        for(int i=0;i<nums.length;i++){
            if (!map.containsKey(nums[i])) {
                map.put(nums[i], i);
            } else {
                int temp = nums[i] * 2;
                if (target==temp) {
                    result.add(i);
                    result.add(map.get(nums[i]));
                    return result.stream().mapToInt(x->x).toArray();
                }
            }

        }
        int another=0;
        for(int i=0;i<nums.length;i++){
            another=target-nums[i];
            if(map.containsKey(another)&&map.get(another)!=i){
                result.add(i);
                result.add(map.get(another));
                break;
            }
        }

        int[] res = result.stream().mapToInt(x -> x).toArray();
        return res; 

    }
}

提交之后发现了:
image
虽然这个并没有什么用,但还是去看了下大神的写法,发现想法都是一样的,但是我是事先把数组内的所有元素都放入map中了,所以虽然时间复杂度都是O(n),但我的是O(2n),而且在编码过程中还要考虑到下图的情况。
image
不够丝滑!

最终代码

import java.util.*;
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map=new HashMap<>(nums.length);
        List<Integer> result=new ArrayList<>(2);
        int another=0;
        for(int i=0;i<nums.length;i++){
            another=target-nums[i];
            if(map.containsKey(another)){
                result.add(i);
                result.add(map.get(another));
                break; 
            }
            map.put(nums[i],i);
        }
        return result.stream().mapToInt(x -> x).toArray();
    }
}

标签:map,target,nums,int,数组,new,LeetCode,两数
From: https://www.cnblogs.com/whitePuPigeon/p/17783389.html

相关文章

  • [Leetcode] 0088. 合并两个有序数组
    88.合并两个有序数组题目描述给你两个按非递减顺序排列的整数数组 nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1......
  • [Leetcode] 0824. 山羊拉丁文
    824.山羊拉丁文题目描述给你一个由若干单词组成的句子 sentence,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。请你将句子转换为“山羊拉丁文(GoatLatin)”(一种类似于猪拉丁文 -PigLatin的虚构语言)。山羊拉丁文的规则如下:如果单词以元音开头('a','e','i',......
  • [Leetcode] 0821. 字符的最短距离
    821.字符的最短距离题目描述给你一个字符串s和一个字符c,且c是s中出现过的字符。返回一个整数数组answer,其中answer.length==s.length且answer[i]是s中从下标i到离它最近的字符c的距离。两个下标 i和j之间的距离为abs(i-j),其中abs是绝......
  • LeetCode 300. 最长递增子序列
    最长递增子序列题目链接:300.最长递增子序列题目描述:给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,......
  • LeetCode 376. 摆动序列
    最长递增子序列题目链接:376.摆动序列题目描述:如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为**摆动序列。**第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如,[1,7,4,9,2,5]是一个摆动序列,因为差值......
  • leetcode102-二叉树层序遍历
    目标:将每层的结果放在每层的集合中问题:如何将不同父节点的同层节点,例如4和6,按照顺序放在一个list中思路:4和6的关联在与它们的父节点,遍历他们的父节点时将其子节点放在一个缓存队列中,从队列中取值就能够实现目标代码:点击查看代码classSolution{publicList<List<Inte......
  • Leetcode原题 -- 螺旋矩阵相关
    第一题:54. 螺旋矩阵题目描述:给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]解题思路:按层遍历,如图所示,找到规律后就差不多了publicList<Integer>spiral......
  • 6.使用leetcode去练习语言
    目录1本章预览2简单题举例2.1题目描述2.2题目解析2.3题解2.4涉及基础语法3中等题举例3.1题目描述3.2题目解析3.3题解3.4涉及基础语法4本章小结1本章预览事实上本章并不会去讲述go语言的基础情况,而是去介绍如何使用Leetcode去帮助我们去学习go语言的基本语法,当然本......
  • 1.两数之和
    目录题目法一、暴力法法二、哈希表题目给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序......
  • 算法训练day39LeetCode738.968.
    算法训练day39LeetCode738.968.738.单调递增的数字题目738.单调递增的数字-力扣(LeetCode)题解代码随想录(programmercarl.com)classSolution{public:intmonotoneIncreasingDigits(intn){stringstrNum=to_string(n);//int转换string......