leetcode(力扣)第15题-三数之和---使用c语言双指针法,二级指针的应用

题目:

15. 三数之和 - 力扣(LeetCode)

编写过程的问题:

  1. 记住线索 1、对数组使用快排排序;2、固定 a 对 b、c 使用双指针;3、注意去重问题。
  2. 函数返回值的类型。{1,2,-3}。结果作为函数的返回值返回。二级指针的应用如下。理解二级指针花费了很长很长时间,并画了示意图。

3、记住快排的参数和用法。第三个参数是 sizeof(int)。

4、注意i 循环的边界。必须是 减2 而不是 减1。

5、注意 sum 应该放入到 内层循环里面。

c 语言给出的固定函数接口:

/** * 返回一个数组,该数组由多个子数组组成,每个子数组的大小为 *returnSize。 * 子数组的大小存储在 *returnColumnSizes 数组中。 * 注意:返回的数组和 *returnColumnSizes 数组都必须通过 malloc 分配内存, * 假设调用者会调用 free() 释放这些内存。 */

int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {}

代码如下:

int cmp(const void *a, const void *b)
{return (*(int *)a - *(int *)b); 
}int** three_sum(int *nums, int numsSize, int* returnSize, int** returnColumnSizes)
{int captital = 38000;int **result = (int **)malloc(captital * sizeof(int));int ret_num = 0;if(numsSize < 3){*returnSize = 0;return result;}    qsort(nums, numsSize, sizeof(int), cmp);int i, left, right, sum;for(i = 0; i < numsSize -2; i++){       if(i > 0 && nums[i] == nums[i -1])continue;left = i+1;right = numsSize -1;//sum = nums[i] + nums[left] + nums[right];while(left < right){sum = nums[i] + nums[left] + nums[right];if(sum < 0){left ++;}else if(sum > 0){right --;   }else{result[ret_num] = (int *)malloc(sizeof(int) * 3);result[ret_num][0] = nums[i];result[ret_num][1] = nums[left];result[ret_num][2] = nums[right];while(left<right && nums[left] == nums[left+1])left++;while(left<right && nums[right] == nums[right-1])                right--;ret_num += 1;left ++;right --;}      }    }*returnColumnSizes = (int *)malloc(ret_num * sizeof(int));int j = 0;for(j = 0; j < ret_num; j++){(*returnColumnSizes)[j] = 3;   }*returnSize = ret_num; return result;      
}int main()
{int i = 0;//int nums[] = {-1, 0, 1, 2, -1, -4};int nums[] = {1,-1,-1,0};//int nums[] = { 0, 0, 0 };//int nums[] = { 0, 1, 1 };int count = 0;int *returnColumnSizes;int **result = three_sum(nums, sizeof(nums)/sizeof(int), &count, &returnColumnSizes);if(count == 0)printf("[ ]\n");printf("["); for(i = 0; i < count; i++){printf("[%d,%d,%d]", result[i][0], result[i][1], result[i][2]);if(i != (count -1))printf(",");   }printf("]\n");return 0;
}

运行中出现的两个错误:

1、预期值出错:

原因是我将 sum = nums[i] + nums[left] + nums[right]; 放到了 while 循环的外面。应该放到 while 循环的里面。

2、报告的错误:Line 43: Char 33: runtime error: store to address 0x631001836140 with insufficient space for an object of type 'int *' [solution.c] 0x631001836140: note: pointer points here 20 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 是什么意思

也就是对应 result[ret_num] = (int *)malloc(sizeof(int) * 3); 出错,将 int captital = 38000; 的值修改更大后问题解决,通过全部的测试用例。

3、此处还没有搞懂 *returnColumnSizes = (int *)malloc(ret_num * sizeof(int));

必须注意的要点:

pixpin 没有 snipaste 聪明,下面的选项框被任务栏遮挡住了,snipaste 可以变到顶上去,而 pixpin 傻傻的被挡住,第二张图用的 snipaste 截图的。

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

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

相关文章

2024.6.9 二

Python类的继承 class 子类(父类1,父类2,…) 子类继承父类的和方法,即如果什么都不改,就相当于父类改了个名字接着用 构造函数继承与改写 当在Python中出现继承的情况时&#xff0c;一定要注意初始化函数_init_的行为&#xff1a; 如果子类没有定义自己的初始化函数&#xf…

如何获取当前dll或exe模块所在路径?

有时我们需要在当前运行的dll或exe模块中去动态加载当前模块同路径中的另一个库&#xff0c;或者启动当前模块同路径中的另一个exe程序&#xff0c;一般需要获取当前模块的路径&#xff0c;然后去构造同路径下目标模块的绝对路径&#xff0c;然后通过该绝对路径去加载或启动该目…

高速USB转串口芯片CH343

CH343封装 截止目前&#xff0c;主要封装有 SOP16: CH343G QFN16: CH343P ESSOP10: CH343K,截止24年6月未生产 CH343串口速度 最高串口速度&#xff1a; 6Mbps,比CH340的2M&#xff0c;快3倍 1、概述 参考版本&#xff1a;1E CH343 是一个 USB 总线的转接芯片&#xff0c;…

使用ORM Bee时, Condition, SuidRich的方法中, 字段是否支持使用Orders::getName的形式,避免使用静态字段串写死字段值

使用ORM Bee时, Condition, SuidRich的方法中, 字段是否支持使用Orders::getName的形式,避免使用静态字段串写死字段值. 可以使用V2.4.0 的ConditionExt和SuidRichExt 需要引用BeeExt. 示例代码如下: package org.teasoft.exam.bee.osql.ext24;import org.teasoft.bee.osql…

Yolov9比其他yolo版本的改进

YOLOv9模型在多个方面进行了改进&#xff0c;根据搜索结果&#xff0c;以下是一些主要的改进点&#xff1a; 1. **可逆函数角度的分析**&#xff1a;YOLOv9从可逆函数的角度理论上分析了现有的CNN架构&#xff0c;基于这种分析&#xff0c;设计了PGI&#xff08;可编程梯度信息…

4、Spring之Bean生命周期~获取Bean

4、Spring之Bean生命周期~获取Bean 获取BeantransformedBeanName()方法BeanFactoryUtils的transformedBeanName方法canonicalName()方法 getObjectForBeanInstance()方法getObjectFromFactoryBean()方法 获取Bean Spring Bean的生命周期首先会经过扫描&#xff0c;然后回经过合…

git本地配置及IDEA下Git合并部分文件

目录 1、IDEA 下 Git 合并部分文件 2、分支合并忽略特定文件步骤 3、git本地配置 1、IDEA 下 Git 合并部分文件 1.1Git 下存在两个分支&#xff0c;foo 和 bar 分支&#xff0c;想要把 bar 分支上的部分文件合并到 foo 分支: 首先切换到 foo 分支&#xff0c;点击右下角的 …

Java Web学习笔记31——Maven介绍

Maven&#xff1a;Java项目的构建工具。 Maven&#xff1a; Maven是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建Java项目的工具。 Apache软件基金会&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受欢迎的开源软件基金会&#xff0c;也是一个专…

Java | Leetcode Java题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; class Solution {public int minCut(String s) {int n s.length();boolean[][] g new boolean[n][n];for (int i 0; i < n; i) {Arrays.fill(g[i], true);}for (int i n - 1; i > 0; --i) {for (int j i 1; j < n; j) {g[i]…

深度学习中几种常见数据标准化方法

目录 一、介绍 二、总结 三、详情 1. StandardScaler 2. MinMaxScaler 3. RobustScaler 4. MaxAbsScaler 5. Normalizer 6. QuantileTransformer 7. PowerTransformer 8. Log Transform 四、示例 五、心得 一、介绍 方法名称缩放范围适用条件StandardScaler均值…

vue基础P7-17

1、模板语法 插值语法 {{xxxx}}用在标签体中&#xff0c;也就是<>{{xxx}}</> xxx是js表达式&#xff0c;有返回值&#xff0c;如num1、Date.now()。不是js代码 指令语法 以v开头&#xff0c;用于解析标签&#xff0c;包括标签属性、标签体内容、绑定事件 v-o…

web前端常识:深入理解与实战应用

web前端常识&#xff1a;深入理解与实战应用 Web前端作为现代互联网技术的核心组成部分&#xff0c;涉及的知识点既广泛又深入。对于初学者和进阶者而言&#xff0c;掌握Web前端常识是构建扎实基础、提升技能水平的关键。本文将从四个方面、五个方面、六个方面和七个方面对Web…

python 判断点和线段相交

python 判断点和线段相交 import numpy as np import cv2 import numpy as npdef point_to_line_distance(points, line_segments):# line_segments [[549, 303], [580, 303]]# points [565, 304]x0, y0, x1, y1line_segments[0][0], line_segments[0][1], line_segments[1]…

【python】OpenCV GUI——Trackbar(14.2)

学习来自 OpenCV基础&#xff08;12&#xff09;OpenCV GUI中的鼠标和滑动条 文章目录 GUI 滑条介绍cv2.createTrackbar 介绍牛刀小试 GUI 滑条介绍 GUI滑动条是一种直观且快速的调节控件&#xff0c;主要用于改变一个数值或相对值。以下是关于GUI滑动条的详细介绍&#xff1a…

win10文件夹.git或者文件被隐藏的开启姿势

按需排查&#xff0c;有的文件隐藏是好事 基本操作更多操作某些系统设置的隐藏操作在idea或者pycharm项目中显示.git文件夹 基本操作 文件夹-> 查看 -> 隐藏的项目点亮 更多操作 文件夹 -> 查看 -> 选项 -> 查看 -> 高级设置 -> 文件和文件夹 -> 隐…

服务器部署spring项目jar包使用bat文件,省略每次输入java -jar了

echo off set pathC:\Program Files\Java\jre1.8.0_191\bin START "YiXiangZhengHe-8516" "%path%/java" -Xdebug -jar -Dspring.profiles.activeprod -Dserver.port8516 YiXiangZhengHe-0.0.1-SNAPSHOT.jar 将set path后面改成jre的bin文件夹 START 后…

knoXSS(case01~10)

case 01: 先在每个框里都输入:<script>alert(1)</script> 检查源码 这里第三个和第四个点都被处理过了&#xff0c;所以先考虑第一个和第二个点 这里试了一下&#xff0c;发现GET也能传参&#xff0c;所以构造 成功 case 02: 这里发现变量a和这个似乎有关联&…

专业学习|南开大学《随机过程》学习笔记(一)

&#xff08;1&#xff09;有哪些经典的关于基本随机过程的书籍推荐&#xff1f; 对于想要系统学习基本随机过程的学生来说&#xff0c;可以参考Sheldon M.Rose编著的经典著作《随机过程》。该书涉及的内容也比较宽泛。但并不局限于单个细节论证。 此外&#xff0c;萨缪尔科林(…

嵌入式学习——Linux高级编程复习(标准IO)——day36

1. 标准IO概念——&#xff08;有缓存、流指针&#xff09; &#xff08;1&#xff09;标准IO是编程语言中处理输入和输出的一种通用方法&#xff0c;涉及以下三个预定义的文件指针&#xff1a; 1. stdin&#xff1a;标准输入&#xff0c;通常默认关联到键盘输入。 2. stdout&…

抓住时机的核心:坚持学习准备着

在这个快节奏的时代&#xff0c;时间对于每个人来说都是宝贵的。能否在合适的时间做正确的事情&#xff0c;往往决定了我们成功的概率。但同时&#xff0c;我们也要认识到&#xff0c;逆风翻盘虽少&#xff0c;却并非不可能。在这个过程中&#xff0c;投资自己&#xff0c;投资…