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

相关推荐
KaMeidebaby几秒前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
没钥匙的锁126 分钟前
05-Java面向对象构造器与封装
java·开发语言
Yang_jie_031 小时前
笔记:数据结构(栈是否使用底指针以及头指针的初始化值)
数据结构·笔记·算法
aaPIXa6221 小时前
C++采样引导优化SPGO——比PGO更智能的编译器决策新方案
java·c++·人工智能
蓝银草同学1 小时前
Stream 实战:博客列表排序、过滤与分页(AI 辅助学习 Java 8)
java·前端·后端
2301_800895101 小时前
信息安全数学基础复习
算法
爱折腾的小黑牛1 小时前
简记往来批量录入功能的实现:从文本到结构化数据
前端·算法
Starmoon_dhw1 小时前
题解:P17078 夏日甜点
c++·学习·算法·图论
某不知名網友1 小时前
C/C++动态内存管理,智能指针及RAlI思想。
java·c语言·c++
海石2 小时前
【JS击败90%】前缀和+定长滑动窗口
算法·leetcode