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

相关推荐
Dola_Zou2 小时前
工厂智能排产软件算法保护与按产线计费实战
算法·自动化·软件工程·软件加密
yxlalm2 小时前
Spring AI+RAG 01-项目背景与技术选型
java·人工智能·spring
程序员清风3 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
Seoyoneh4 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
海南java第二人4 小时前
对外 API 如何保证幂等性?插入数据 / 上传表格场景全方案汇总
java·幂等性
啦啦啦啦啦zzzz4 小时前
Logger的组装(c++20)
c++·算法·c++20
tryxr4 小时前
Chat2Excel 文件服务模块上传文件功能开发
java·项目·oss·easyexcel·文件服务
Tangyuewei4 小时前
Java 写 Agent:模型只是组件
java·开发语言
尾善爱看海5 小时前
前端算法与手写题集
前端·算法
彧azz5 小时前
Java学习语法篇:变量
java·学习