LeetCode 热题HOT100-两数之和(C语言)

news2024/11/19 3:21:17

LeetCode 热题HOT100-两数之和(C语言)

在这里插入图片描述
作为一名程序语言的学习者,刷力扣我想是必要经历的一条路,所以我也在这里分享刷题后所得知识,也可以帮助更多人理解题意。

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

在这里插入图片描述

唯For熟尔

可以看到题意中给了一个整数数组nums和目标值target
要求在数组里面找出两个数来实现 x+y=target

1.首先先观察所提供的代码

在这里插入图片描述

额外条件:给出了数组的长度 numsSize
还有一个我们暂时不知道用处的 int* returnSize(后面再看)

在这里插入图片描述

2.再注意看这段示例,很明显是返回了一个数组来存储nums中两个数的下标

那没什么说法,开空间整就完了

int *a = (int*)malloc(sizeof(int)*2);

到这里就分析得差不多了,很明显,要对nums进行一次遍历,找到合适的数,那万年不变我们就用for来解决,我们只会for,也是没有问题的,遍历出两个数,自然要两个for,就定义两个变量来实现

int i,j;
    for(i=0;i<numsSize;i++){
        for(j=i+1;j<numsSize;j++){
           
        }
    }

因为两个数不能重复出现,也就是不允许 x+x=target 即数组第一个数不可能再从 i
出发,而数组最后一个数也没必要再与任何一个数组合,这时候我们就可以直接令 j=i+1
省去判断两个数是否相等的步骤,而且当i位于倒数第二个数时,j处于最后一个数,又可以再减少一个步骤。

运用if找到那两个天选之子,填充好代码

int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{
    int *a = (int*)malloc(sizeof(int)*2);	/*整一个数组出来*/
    
    int i,j;
    for(i=0;i<numsSize;i++){
        for(j=i+1;j<numsSize;j++){
            if(nums[i]+nums[j] == target){	/*判断条件对应题意*/
                a[0] = i;
                a[1] = j;
                *returnSize = 2;
                return a;
            }
        }
    }
    return 0;
}
  • 到这里我们来填回上面留下的一个坑:returnSize有何作用?
    我们可以思考一下,我们是不是要返回两个已经存到了a[ ]这个数组的两个数,那就可以在这里结尾用returnSize表示我要返回的a[ ]的长度,同时后面为什么等于2就解释得通了

数组里面没有结束符号,它得知道你的数组长度才能判断内容

当然可能不理解为什么要出现在循环里,其实,我们放在外边也是可以的,在创建时就把这事解决了

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int *a = (int*)malloc(sizeof(int)*2);
    *returnSize = 2;	/*放在这里也是没有问题的,运行成功*/
    
    int i,j;
    for(i=0;i<numsSize;i++){
        for(j=i+1;j<numsSize;j++){
            if(nums[i]+nums[j] == target){
                a[0] = i;
                a[1] = j;
                return a;
            }
        }
    }
    return 0;
}

哈希表

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

// 哈希节点
typedef struct {
    int key;
    int value;
    UT_hash_handle hh;
} hash_node;

int* twoSum(int* nums, int numsSize, int target, int* returnSize){

    int* ans = (int*)malloc(sizeof(int) * 2); // 题目给出答案唯一 所以只有2个下标
    if (NULL == ans) exit(-1);
    *returnSize = 2; // 返回数组大小赋值

    // head为头节点
    hash_node* head = NULL, *cur, *tmp;
 
    // 循环nums把 target - nums[i] 存入哈希表
    for (int i = 0; i < numsSize; i++) {
        hash_node* tmp = NULL;
        HASH_FIND_INT(head, nums + i, tmp); // 查表
        if (NULL != tmp) { // 如果 当前nums[i]元素在哈希表,说明之前已经找到了另一半
            ans[0] = tmp->value; // 取出之前下标
            ans[1] = i; // 当前下标
            break;
        }
        // 不在哈希表就把 target - nums[i] 存入哈希表
        tmp = (hash_node*)malloc(sizeof(hash_node));
        if (NULL == tmp) exit(-1);
        tmp->key = target - nums[i];
        tmp->value = i;
        HASH_ADD_INT(head, key, tmp);
    }

    // 释放哈希表所有节点
    HASH_ITER(hh, head, cur, tmp) {
        HASH_DEL(head, cur);
        free(cur);
    }
    
    return ans;
}

哈希表代码中已经有了注释,可以仔细看看。这道题在这里就告一段落了

希望大家给个三连
给个关注(回关)你们的支持就是我最大的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zynq PS之UART调试

在创建应用工程时&#xff0c;选择Hello World模板即可&#xff0c;以XCZU21DR开发。 硬件原理图如下&#xff1a; Vivado中添加&配置IP 添加Zynq UltraScale MPSoc IP。 UART设置 DDR配置 硬件设计中选择的DDR4型号是MT40A2G8VA-062E IT&#xff0c;DDR配置如下图&…

6、SySeVR复现——Data preprocess(下)

紧接着上篇SySeVR复现——Data preprocess&#xff08;上&#xff09;5、SySeVR复现——Data preprocess&#xff08;上&#xff09;_sliver呀的博客-CSDN博客 目录 5、训练Word2vec模型 6、token向量化且划分数据集 7、固定每一个切片的长度 5、训练Word2vec模型 对应crea…

Jetpack Compose中使用Notification

发送通知相关的主要有两个关键的类 NotificationCompat.Builder 和 NotificationManagerCompat 为方便使用&#xff0c;首先定义一个扩展工具类来管理通知 const val MAIN_CHANNEL_ID "MainChannel ID" const val MAIN_CHANNEL "MainChannel"fun Contex…

人工智能导论实验——前馈神经网络

实验目的通过实验了解全连接神经网络的结构&#xff0c;应用全连接网络处理分类和回归任务。实验任务1&#xff09;初级实验&#xff1a;①手写体图像识别实验&#xff1b;②FashionMnist图像分类实验&#xff1b;③汽车里程数预测实验。2&#xff09;中级实验&#xff1a;①鸢…

数据集划分和交叉验证

机器学习实践中&#xff0c;为防止模型出现过拟合问题&#xff0c;需要预先将数据划分为训练集和测试集&#xff0c;训练集用来建模&#xff0c;训练模型&#xff0c;测试集用来提前测试模型的实际预测能力&#xff0c;这期间就会出现不同的数据集划分和模型评价方法&#xff0…

Linux常用命令——alias命令

Linux命令查询工具 alias 用来设置指令的别名 补充说明 alias命令用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时&#xff0c;用户必须使用单引号将原来的命令引起来&#xff0c;防止特殊字符导致错误。 alias命令的作用只局限于该次登入…

EventLoop与宏任务和微任务

1、JavaScript 是单线程的语言 JavaScript 是一门单线程执行的编程语言。也就是说&#xff0c;同一时间只能做一件事情。 单线程执行任务队列的问题&#xff1a;如果前一个任务非常耗时&#xff0c;则后续的任务就不得不一直等待&#xff0c;从而导致程序假死的问题。 2、同步…

性能优化系列之『混合式开发:Flutter内核及优势介绍』

文章の目录一、愿景二、技术优势三、底层实现四、选型建议写在最后一、愿景 A portable toolkit for building beautiful experiences wherever you might want to paint pixels on the screen.一个拥有美好构建体验的便携式的工具包&#xff0c;可以让你在屏幕的任何地方绘制…

LeetCode题解 二叉树(十四):669 修改二叉搜索树;108 将有序数组转换为二叉搜索树;538 把二叉搜索树转换为累加树

二叉树 669 修改二叉搜索树 medium 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有被移除&#xf…

数据可视化系列-06数据分析工具QuickBI

文章目录数据可视化系列-06数据分析工具QuickBI一文介绍QuickBIQuick BI 的基本对象快速入门Quick BI产品架构界面说明菜单栏我的看板工作台首页通过仪表板分析数据数据可视化系列-06数据分析工具QuickBI 参考&#xff1a; Quick BI 数据可视化分析平台 QuickBI官方文档 一文…

Jina AI 荣获「2022 稀土掘金引力榜」年度新锐企业 Top 10 称号!

2023 年 1 月 6 日&#xff0c;由稀土掘金技术社区打造的「掘金引力榜」正式公布。凭借在开源技术、产品等领域的积极布局&#xff0c;在社区生态影响力的突出贡献&#xff0c;Jina AI 荣获「掘金引力榜 2022 年度新锐企业 Top10」&#xff01;「掘金引力榜」是由稀土掘金技术社…

什么是商家转账到零钱

1. 什么是商家转账到零钱商家转账到零钱为商户提供向一个或者同时向多个用户微信零钱转账的能力&#xff0c;商户可免费使用。1.1. 使用场景商户可以使用商家转账用于现金营销、分销返佣、行政补贴、行政奖励、保险理赔、佣金报酬、企业报销、企业补贴、服务款项、采购货款等向…

阿里微服务质量保障系列(二):研发流程知多少

持续坚持原创输出&#xff0c;点击蓝字关注我吧介绍研发流程主要是给大家一个体感&#xff0c;可以直观感受阿里测试工程师从项目的立项到最终发布经历了哪些过程、做了什么工作。需求的产生刚毕业工作那会&#xff0c;认为需求来源于产品&#xff0c;把PD宣讲的产品需求奉为圭…

12.30第一周 星期五SSH

SSH功能&#xff1a;1.远程连接 2.sftp 1. 使用之前首先确认系统中有无 ssh 的软件包 rpm -qa | grep ssh 主程序或执行文件位置&#xff1a;/usr/sbin/ss服务端配置文件: /etc/ssh/sshd_config服务器用客户端的公钥对数据---->加密---->到客户端时&#xf…

TemplateFlow:一个跨物种,多尺度脑部模板和图谱的共享平台

Problem大脑的参考模板在神经影像工作流程中起着核心作用&#xff0c;是报告标准化结果的基础。而模板或者图谱的选择是不同研究中方法学差异的一个相关来源&#xff0c;最近被认为是对神经科学可重复性的一个重要挑战而受到关注。大多数情况下&#xff0c;我们所使用的模板由神…

Linux中Shell与环境变量与配置文件

Shell是什么 Shell是个程序&#xff0c;他会在用户登录系统后系统开启的&#xff0c;他可以通过标准输入来接收命令&#xff0c;然后执行命令&#xff0c;Shell可以执行内部命令和外部命令&#xff0c;内部命令就是Shell程序里面自己的逻辑&#xff0c;外部命令是Shell调用其他…

Linux常用命令——firewall-cmd命令

在线Linux命令查询工具 firewall-cmd Linux上新用的防火墙软件&#xff0c;跟iptables差不多的工具。 补充说明 firewall-cmd 是 firewalld的字符界面管理工具&#xff0c;firewalld是centos7的一大特性&#xff0c;最大的好处有两个&#xff1a;支持动态更新&#xff0c;不…

【SCL】博图scl语言应用项目:装配流水线模拟控制

使用西门子博图SCL语言和factoryio软件来编写应用案例——装配流水线模拟控制项目 文章目录 目录 前言 一、应用&#xff1a;装配流水线模拟控制 1.控制要求 2.完善控制要求和场景 1.布置场景&#xff08;factoryio&#xff09; 2.控制要求 3.变量表&#xff08;I/O分配&…

Cocos Creator Protobuf的js版本使用

一、基础知识参考Protocol Buffers 在游戏中的应用Protobuf语言指南android与PC&#xff0c;C#与Java 利用protobuf 进行无障碍通讯【Socket】1.性能好/效率高现在&#xff0c;俺就来说说Google公司为啥放着好端端的XML不用&#xff0c;非要另起炉灶&#xff0c;重新造轮子。一…

10.0、Linux-磁盘管理简单初体验

10.0、Linux-磁盘管理简单初体验 列出文件系统整体的磁盘使用量 -> df -h ( 检查磁盘空间使用量 ) 查看目录中所有的文件磁盘空间使用情况 -> du -a -h 根目录下每个目录所占空间大小容量 -> du -sm /* Mac 或者想使用 Linux 挂载我们的一些本地磁盘或者文件 挂载&am…