前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日一题

每日一题

作者头像
Taishan3721
发布2021-12-09 17:50:31
2200
发布2021-12-09 17:50:31
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

如转发 请标明出处!

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/two-sum/

给定一个整数数组 nums和一个整数目标值 target,在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。可以假设每种输入只会对应一个答案。而且,数组中同一个元素在答案里不能重复出现。可以按任意顺序返回答案。

我的解答

代码语言:javascript
复制
#include <stdio.h>

UINT64 twoSum
    (
    INT32 *nums,
    UINT32 numsSize,
    INT32  target)
    {
    UINT32 i;
    UINT32 j;
    UINT64 result = 0;

    for(i = 0; i < numsSize; ++i)
        {
        for(j = i + 1; j < numsSize; ++j)
            {
            if(nums[i] + nums[j] == target)
                {
                result = (UINT64)i | ((UINT64)j<<32);

                /* break the loop */
                i = numsSize;
                i = numsSize;
                }
            }
        }
    return result;
    }

/* test case */
void test(INT32 target)
    {
    INT32 data[] = {1, 2, 4, 7, 12};
    UINT64 result = twoSum(data, 5, target);
    if(result != 0)
        printf("%d + %d = %d\n", data[result>>32], data[result&0xffffffff], target);
    }

与官方的主要区别

  • 少了输出型入参,通过返回值表示是否匹配成功
  • 只有一个出口
  • 不需要动态申请内存,使用64位返回值的高低位表示两个下标
  • 另外,我认为空间换时间的进阶方案不合算

我是泰山 专注VX好多年!

一起学习 共同进步!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档