LeetCode热题100(一)—— 1.两数之和

LeetCode热题100(一)------ 1.两数之和

题目描述

复制代码
给定一个整数数组 nums 和一个整数目标值 target,
请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
        输入:nums = [2,7,11,15], target = 9
        输出:[0,1]
        解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
        输入:nums = [3,2,4], target = 6
        输出:[1,2]
示例 3:
        输入:nums = [3,3], target = 6
        输出:[0,1]
提示:
        2 <= nums.length <= 104
        -109 <= nums[i] <= 109
        -109 <= target <= 109
        只会存在一个有效答案
进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

代码实现

java 复制代码
// 思路一:双循环
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] result = 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){
                    result[0] = i;
                    result[1] = j;
                }
            }
        return result;
    }
}
// 思路二:哈希表
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int num = target - nums[i];
            if (map.containsKey(num)) {
                return new int[]{i, map.get(num)};
            }
            map.put(nums[i], i);
        }
        return null;
    }
}

思路解析

  1. 输入:整数数组和目标值int[] nums, int target
  2. 输出:两个元素下标 [i, j] 且 nums[i] + nums[j] = target
  3. 思路一:双层循环
    • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
    • 空间复杂度: O ( 1 ) O(1) O(1)
  4. 思路二:哈希表
    • 时间复杂度: O ( n ) O(n) O(n)
    • 空间复杂度: O ( n ) O(n) O(n)

相关推荐
信奥卷王8 小时前
[GESP202609 六级] 分树规划
算法
夏幻灵8 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
徐小黑ACG10 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
码完就睡10 小时前
数据结构——红黑树
数据结构
码爸10 小时前
数据结构详细介绍
数据结构
Navigator_Z10 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛11 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记11 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
浮链序11 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm