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;  // 返回数组的首地址
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值