力扣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)内存大小的空间

相关推荐
MY_TEUCK几秒前
Sealos 平台部署实战指南:结合 Cursor 与版本发布流程
java·人工智能·学习·aigc
三毛的二哥4 分钟前
BEV:典型BEV算法总结
人工智能·算法·计算机视觉·3d
我爱cope30 分钟前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
南宫萧幕1 小时前
自控PID+MATLAB仿真+混动P0/P1/P2/P3/P4构型
算法·机器学习·matlab·simulink·控制·pid
朝新_1 小时前
【Spring AI 】图像与语音模型实战
java·人工智能·spring
RH2312111 小时前
2026.4.16Linux 管道
java·linux·服务器
zmsofts2 小时前
java面试必问13:MyBatis 一级缓存、二级缓存:从原理到脏数据,一篇讲透
java·面试·mybatis
故事和你912 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
我叫黑大帅2 小时前
为什么map查找时间复杂度是O(1)?
后端·算法·面试
炽烈小老头3 小时前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积
学习·算法