每日一题——两数之和(返回下标和返回数值两种情况)

这篇具有很好参考价值的文章主要介绍了每日一题——两数之和(返回下标和返回数值两种情况)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

每日一题

两数之和

题目链接

每日一题——两数之和(返回下标和返回数值两种情况)

思路

注:本题只采用暴力解法,时间复杂度为O(n2),如果采用哈希表,可以将时间复杂度降到O(n),但由于笔者还未对哈希表展开学习,故不做讨论

  • 我们直接用两层for循环来解决问题

  • 第一层for循环用来遍历整个数组,第二层for循环用来判断遍历的两个数的和是否等于target

    for(int i = 0; i < numsSize - 1; i++)
        {
            for(int j = i + 1; j < numsSize; j++)
            {
                if(nums[i] + nums[j] == target)
                {
                    ……………………;
                }
            }
        }
    

实现代码

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    //确定返回数组的大小
    *returnSize = 2;
    //申请的返回数组
    int *res = (int *)malloc(sizeof(int) * 2);
    //寻找满足条件的两个数
    for(int i = 0; i < numsSize - 1; i++)
    {
        for(int j = i + 1; j < numsSize; j++)
        {
            if(nums[i] + nums[j] == target)
            {
                res[0] = i;
                res[1] = j;
            }
        }
    }
    //返回这两个数的下标
    return res;
}

拓展

  • 这道题要求返回的是满足条件的两个数的下标,但如果将题目要求改为返回这两个数的值呢?
思路
  • 当然我们同样可以上面的暴力解法来解决问题,但有没有效率更高的方法呢?

  • 我们可以采用双指针的方法

  • 首先我们假设题目给的数组是一个有序数组,那题解过程如图所示:

    每日一题——两数之和(返回下标和返回数值两种情况)

  • 由此可见,要使用双指针的方法,就一定要确保数组是有序的(只有这样,才能保证i右移后,nums[i] + nums[j]会变大,j左移后,nums[i] + nums[j]会变小),因此,我们最开始就要用排序算法来使数组nuns有序。文章来源地址https://www.toymoban.com/news/detail-467337.html

实现代码
void Sort(int *nums, int numsSize)
{
    for(int i = 0; i < numsSize - 1; i++)
    {
        for(int j = i + 1; j < numsSize; j++)
        {
            if(nums[i] > nums[j])
            {
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
    }
}
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int *res = (int *)malloc(sizeof(int) * 2);
    *returnSize = 2;
    //排序
    Sort(nums,numsSize);
    //从数组的头和尾对数组进行遍历
    int i = 0, j = numsSize - 1;
    //找到符合条件的两个数
    while(i < j)
    {
        if(nums[i] + nums[j] > target)
            j--;
        else if(nums[i] + nums[j] < target)
            i++;
        else
        {
            res[0] = nums[i];
            res[1] = nums[j];
            break;
        }
    }
    //返回数组
    return res;
}

到了这里,关于每日一题——两数之和(返回下标和返回数值两种情况)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 每日一练:前端js实现算法之两数之和

    方法一:暴力法 方法二:哈希表 方法一 :使用暴力法,通过两层循环遍历数组来查找符合条件的两个数。 方法二 :使用哈希表,通过一次遍历数组,将每个数的值和索引存储在哈希表中,同时查找是否存在符合条件的数。 暴力法的时间复杂度为 O(n^2) ,空间复杂度为 O(1

    2024年02月21日
    浏览(31)
  • 【每日一题】2. 两数相加

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1: 示例 2: 示例 3: 提

    2024年02月11日
    浏览(28)
  • 【C语言】每日一题(寻找数组的中心下标)

    寻找数组的中心下标,链接奉上 ​​​​​​​思路: 依旧是我们的老朋友,暴力循环。 1.可以利用外层for循环,循环变量为数组下标,在循环内分别求出下标左边与右边的sum 2.在边界时讨论, 当下标为左边界(nums[0])时,left sum=0;当下标为右边界(nums[numsSize-1)时,r

    2024年02月13日
    浏览(37)
  • 【每日一题】445. 两数相加 II

    给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例1: 示例2: 示例3: 提示: 链表的长度范围为 [1, 100] 0 = node.val

    2024年02月11日
    浏览(26)
  • 【Leetcode每日一题】35.搜素插入位置|二分查找数组下标

    🌱博主简介:大一计科生,努力学习Java中!热爱写博客~预备程序媛 📜所属专栏:LeetCode每日一题–进击大厂 ✈往期博文回顾: 【JavaSE】保姆级教程|1万字+10张图学会类与对象–建议收藏 🕵️‍♂️近期目标:成为千粉小博主。 🌺“再牛的程序员也是从小白开始,既然开始

    2024年02月21日
    浏览(33)
  • 2023/07/02_leetcode每日一题_2.两数相加

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:l1 = [9,9,9,9,9,9

    2024年02月11日
    浏览(37)
  • 每日一题——三数之和(双指针)

    题目链接 思路 解析函数原型 首先我们来看一下题目给的函数原型: 题目要求我们 返回一个二维数组,数组的行数代表着存在多少个满足条件的三元组,而在本题中,列数规定为3,即每行存储3个元素 在螺旋矩阵中我们已经做过分析, nums就是题目给的整数数组,numsSize就是

    2024年02月07日
    浏览(28)
  • 每日一题之数值的整数次方

    描述: 实现函数 double Power(double base, int exponent),求 base 的 exponent 次方。 注意: 1.保证base和exponent不同时为0。 2.不得使用库函数,同时不需要考虑大数问题 3.有特殊判题,不用考虑小数点后面0的位数。 我的思路:直接使用递归,让它每次乘一个它自身。但这存在一个问题,

    2024年02月12日
    浏览(26)
  • 【力扣每日一题】2023.7.15 四数之和

    这题和本月出过的每日一题:两数之和,三数之和类似。 不夸张的说只要把三数之和的代码拿来再套层for循环改改就可以了。 不过我这里还是简单捋一捋思路,题目给一个数组,要求返回所有长度为4,总和为 target 的子数组(不用连续)。 比较容易想到的是暴力解法,直接

    2024年02月16日
    浏览(74)
  • (双指针 ) 18. 四数之和 ——【Leetcode每日一题】

    难度:中等 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且 不重复 的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): 0 = a, b, c, d n a 、 b 、 c 和 d 互不相同 nums[a] + nums[b] + nums[c

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包