力扣HOT100——(1)两数之和

题目

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

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

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

题解一------暴力枚举

c 复制代码
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    for(int i=0;i<numsSize - 1;i++)
    {
        for(int j=i+1;j<numsSize;j++)
        {
            if(nums[i]+nums[j]==target)
            {
                int* result=malloc(sizeof(int)*2);
                result[0]=i;
                result[1]=j;
                (*returnSize)=2;
                return result;
            }
        }
    }  
    return NULL;

利用双重for循环依次遍历出数组中的所有的两个值之和

优点:简单不动脑

缺点:时间复杂度高,时间复杂度为O(n^2)

题解二------哈希表法

java 复制代码
class Solution {
    public int[] twoSum(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])) {
                return new int[]{hashtable.get(target - nums[i]), i};
            }
            hashtable.put(nums[i], i);
        }
        return new int[0];
    }
}

哈希表利用Java会更简便

方法:创建一个哈希表,先将数组中第一个值输入进去,然后依次用target-x的值与哈希表中的所有值进行对比,如果没有相等的,就将x值输入进哈希表,反之就将x与target-x对应的数组下标存入结果数组中

优点:时间复杂度下降为O(n)

缺点:以空间换时间,需要额外申请一块(n-1)内存大小的空间

相关推荐
Arthas2172 小时前
Java大厂面试:从Spring到微服务的全面技术考察
java·jvm·spring·微服务·面试·并发
Z.风止2 小时前
Large Model-learning(2)
开发语言·笔记·python·leetcode
m0_738120722 小时前
我的创作纪念日0328
java·网络·windows·python·web安全·php
用户8307196840822 小时前
Spring Boot 中Servlet、Filter、Listener 四种注册方式全解析
java·spring boot
xixingzhe22 小时前
spring boot druid 10秒超时问题
java·数据库·spring boot
無限進步D2 小时前
算竞常用STL cpp
开发语言·c++·算法·竞赛
ok_hahaha2 小时前
java从头开始-黑马点评-分布式锁-redis实现基础版
java·redis·分布式
仟濹2 小时前
【算法打卡day34(2026-03-30 周一)】DFS专项训练(今日算法:DFS & 记忆化搜索 & 回溯)
算法·深度优先
Nyarlathotep01132 小时前
ReentrantReadWriteLock基础和原理
java·后端