详解力扣中int *returnSize和int **returnColumnSizes 您所在的位置:网站首页 c语言理解但是不知道怎么输入 详解力扣中int *returnSize和int **returnColumnSizes

详解力扣中int *returnSize和int **returnColumnSizes

2023-10-28 14:44| 来源: 网络整理| 查看: 265

本文首发(其实是补发)于我的个人博客,阅读体验会比 CSDN 好一些。

https://www.ceyewan.top/p/bddf0945.html

正文开始:

在用C语言刷力扣的时候,我们经常会看到这两个东西,int* returnSize 和 int** returnColumnSizes。连题目都看不懂,更何况是做题呢?我也是查找了网上零零碎碎的资料和做了蛮多题之后,终于想明白了。遂整理成此文,希望能帮到后来者。个人理解,如有不足,烦请斧正。

首先我们来看一道题,力扣的第 15 题,三数之和。这是笔者第一次接触到这两个东西的题目。

三数之和 题干:

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 输入:nums = [] 输出:[] 输入:nums = [0] 输出:[] 提示: 0 int nums[6] = {-1, 0, 1, 2, -1, -4}; int numsSize = 6; int returnSize;// 表示返回的二维数组的行数 int **returnColumnSize;// 指向列数组指针的指针 // 注意:列数组在哪我们无从得知,也不需要知道, // 我们只要知道有个一阶指针指向它就行了,我把它叫做列数组指针 int **ans = threeSum(nums, numsSize, &returnSize, returnColumnSizes); // &returnSize 引用传值 // 最后一个参数我认为也可以是 int *returnColumnSize,然后传入&returnColumnSizes,效果是一样的 for (int i = 0; i // ans是二维数组,先假设有100000个答案,准备有100000个一阶指针的空间先 // 每个一阶指针可以指向一个数组,即一个答案 int **ans == (int **)malloc(sizeof(int *) * 100000); // returnSize是一阶指针, *returnSize是值 *returnSize = 0;// 答案组数为0 while (找到一组答案) { // malloc一个数组存储答案 int *temp = (int *)malloc(sizeof(int) * 3);// 3个数嘛,3个int f(把答案写入temp); ans[(*returnSize)] = temp;// 这两个都是一阶指针 (*returnSize)++; } // returnColumnSizes是二阶指针, (*returnColumnSizes)是一阶指针 // 有(*returnSize)行就malloc(*returnSize)个元素 (*returnColumnSizes) = (int *)malloc(sizeof(int) * (*returnSize)); // 本题中每一个元素都是3 for (int i = 0; i return *(int *)a > *(int *)b ? 1 : 0; } int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){ qsort(nums, numsSize, sizeof(int), comp); int **ans = (int **)malloc(sizeof(int *) * MAX); *returnSize = 0; if (numsSize int sum = nums[left] + nums[right] + nums[i]; if (sum == 0) { int *temp = (int *)malloc(sizeof(int) * 3); temp[0] = nums[i]; temp[1] = nums[left]; temp[2] = nums[right]; ans[(*returnSize)++] = temp; } // 这个地方不能是else if,因为总得改变当前的状态,如果是else if,那么找到了一个答案之后就永远不变了,这是不行的 if (sum


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有