当前位置: 首页 > news >正文

Leetcode——菜鸟笔记1

文章目录

    • 题目
    • 解题
    • 笔记

题目

在这里插入图片描述

解题

/*** Note: The returned array must be malloced, assume caller calls free().nums=[2,7,11,15] numsSize=4 target =9 returnSize=2*/int* twoSum(int* nums, int numsSize, int target, int* returnSize) {int flag=0;*returnSize=2;int *returnSum=(int*)malloc((sizeof(int))*2);for(int j=0;j<numsSize;j++){for(int k=j+1;k<numsSize;k++){if(nums[j]+nums[k]==target){returnSum[0]=j;returnSum[1]=k;flag=1;return returnSum;}}if(flag){break;}}*returnSize=0;free(returnSum);return NULL;
}

笔记

  1. *returnSize=2;设置返回数组长度为2,最后使用完动态空间,该数组长度为0;
  2. int result = (int)malloc(sizeof(int) * 2); // 分配结果数组
    动态分配一个能存储 2 个整数的内存空间,并让指针 result 指向这块内存;
    ①malloc函数
#include <stdlib.h>  // 必须包含此头文件
void* malloc(size_t size);

参数:size 是要分配的字节数(size_t 是无符号整型)。
返回值:成功时返回 void*(通用指针),失败时返回 NULL。
使用方法

int *ptr = (int*)malloc(sizeof(int));  // 分配 1 个 int 的空间(通常 4 字节)
int *arr = (int*)malloc(5 * sizeof(int));  // 分配 5 个 int 的空间(20 字节)

检查是否分配成功,看指针是不是为NULL

if (ptr == NULL) {printf("内存分配失败!\n");exit(1);  // 退出程序
}

PS:malloc不会初始化内存,只是申请一块空间,所以里面的内容没有定义,是随机值。
可以使用手动初始化或者calloc

memset(arr, 0, 5 * sizeof(int));  // 全部设为 0
int *arr = (int*)calloc(5, sizeof(int));  // 分配并初始化为 0

②:与malloc匹配的是free,动态申请内存使用完后必须释放内存,不然会导致内存泄漏。
free规则:
只能 free 由 malloc/calloc/realloc 分配的内存。
不能 free 两次(会导致程序崩溃)。
释放后指针应设为 NULL,防止误用。
③:malloc使用场景
题目中的申请动态数组空间

int *arr = (int*)malloc(n * sizeof(int));//n为数组大小

数据结构中的链表、树

struct Node {int data;struct Node* next;
};//结点结构体 包含数据和指针(指向下一个结点的)struct Node* newNode(int data) {struct Node* node = (struct Node*)malloc(sizeof(struct Node));//定义一个结构体指针,指向新申请的空间,node 是一个指向 struct Node 的指针node->data = data;node->next = NULL;return node;
}//创建新节点的函数,malloc申请一个结构体指针,数据赋值给下一个节点的数据部分,新节点的指针先指向NULL

这里的malloc申请的一块大小是和节点大小一样,把malloc返回的void转换橙struct Node

返回堆内存中的数组
动态创建一个大小为 size 的整型数组,并返回该数组的指针。(是我查到的关于malloc使用的场景之一,没有具体用过,但仔细看和1是一样的,只是1给了具体内存的大小,这个用size代替了)

int* createArray(int size) {int *arr = (int*)malloc(size * sizeof(int)); // 动态分配内存return arr;  // 返回数组的首地址
}
http://www.dtcms.com/a/317652.html

相关文章:

  • Git 分支管理:从新开发分支迁移为主分支的完整指南
  • 鸿蒙app 开发中 全局弹窗类的封装 基于PromptAction
  • C#之基础语法
  • 机器学习之朴素贝叶斯
  • Suno API V5模型 php源码 —— 使用灵感模式进行出创作
  • 基于PHP的论坛社交网站系统开发与设计
  • 排序算法详解
  • 媒体资产管理系统和OCR文字识别的结合
  • Ethereum: L1 与 L2 的安全纽带, Rollups 技术下的协作与区别全解析
  • 解决启动docker报错Cannot connect to the Docker daemon问题
  • 阿里 Qwen-Image:开源 20B 模型引领图像生成新纪元,中文渲染超越 GPT-4o!
  • 数据结构与算法的认识
  • 手动开发一个TCP服务器调试工具(二):无界面 TCP 通信服最小实现
  • ETF期权分仓的风险如何管理?
  • 基于Hadoop的股票大数据分析可视化及多模型的股票预测研究与实现
  • 四十、【高级特性篇】接口用例数据驱动:引入随机变量与动态数据生成
  • 生成式模型 ?判别式模型?用【猫狗分类器】帮助理解!
  • 【网络安全】入侵检测系统 Suricata 概述 | IDS
  • 2025年大语言模型与多模态生成工具全景指南(V2.0)
  • PyCharm vs. VSCode 到底哪个更好用
  • 5个数据库 存储系统精选 | C/C++ 项目深度解析
  • 支持向量机(SVM)算法依赖的数学知识详解
  • 深度模拟用户行为:用Playwright爬取B站弹幕与评论数据
  • 使用Java爬取xxx律师协会网站上公开的律所信息并导出到Excel
  • 服务器——“查询不到显卡驱动,且输入nvidia-smi报错”的解决办法
  • 时序数据库的发展现状与未来趋势
  • 百度智能云给“数字人”发工牌
  • Unix/Linux 系统编程中用于管理信号处理行为的核心概念或模型
  • QT自定义控件
  • InnoDB 存储引擎对 MVCC 的实现详解