leetcode (C语言)-第1题-两数之和

给定一个整数数组和目标值,需要找到数组中两数之和等于目标值的下标。这是LeetCode的一道题目,主要考察查找算法,特别是哈希表的应用。通过哈希查找,可以在O(1)的时间复杂度内解决,相比顺序查找的O(n^2)更高效。文章提供了C语言实现哈希表的思路和代码示例。
摘要由CSDN通过智能技术生成

题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:

  1. 本质上是考察**“查找**”算法,而查找算法分为**:顺序查找,有序表查找,插值查找,索引查找,二叉树查找,散列表查找(哈希表)**等等
  2. 通常朴素的算法是从头开始查找,这种方式就是所谓的 顺序查找。代码如下所示:时间复杂度较高O(n^2).
  3. 使用其他查找方式,例如有序表,插值,二叉树,本质上都是对数据进行有序排列进而缩短查找时间。
  4. 使用哈希查找,本质是散列技术,将key值和其存储位置进行散列映射:存储位置 = f(key),进而由key可以快速得到其存储位置,其时间复杂度可近似看做O(1) (忽略哈希冲突的情况下)。

Notes: 在数据量小的情况下,Hash查找可能还比不过顺序查找,但是一旦数量级很大的时候,Hash查找的优势就会很明显了。

// 顺序查找

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
   
    
    int i = 0;
    int j = 0;
    int* array = (int*)malloc(2 * sizeof(int));
    
    array[0] = -1;
    array[1] = -1;
    
    if (nums == NULL || returnSize == NULL){
   
        
        return NULL;
    }
    
    for (i = 0; i < numsSize; i++){
   
        
        for (j = i + 1; j < numsSize; j++){
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值