leetcode-基础知识点1

1、LeetCode出现的heap-buffer-overflow的问题几种可能?

1、返回数组,但是没有返回数组的数目*returnSize,或者**returnColSize
2、返回字符串,没有结束的标志位,直接返回传入参数的指针,返回自建的malloc数组的字符串
3、数组长度设置和malloc数组的长度溢出(尤其注意二维数组的分配时的长度)
4、传入参数为int **matrix,可以用matrix[x][y]来访问元素,而不是非要用

*(int *(matrix) + row + col)
*( *(matrix + row) + col)
*(a[row] + col)

char** temp = (char**)malloc(sizeof(char*)*length);
for(int i=0; i<length; i++)
{
	temp[i] = (char*)malloc(sizeof(char)*length);
	temp[i][i] = 0;
}

2、Leetcode中的链表是什么结构

srtuct BinTree *p = head;
head作为一个传入参数,代表的是链表的头
注意:p是有值的,且为一个节点,可以代表为0号节点
计算链表的长度时,需要将p=head 算在内部长度

3、链表生成的流程

首节点有值,尾结点无值
首节点无值,尾结点有值
首先都是创建pNode tail(记录当前的节点)
static pNode tail = NULL
(外部单个单个输入创建时,前后能够记录下当前的尾结点)
【若是没有static定义,也可以用len函数,求出当前链表的尾结点】

pNode temp = (pNode)malloc(sizeof(Node));
将temp中值存入
if(head->next == NULL)
存入head中值,或者不存入
else
将tail中存值,tail->next = temp
tail = temp;
return head

头插法生成链表

1、定义head节点,函数传入head和后续的节点值val,利用val生成temp
2、将head->next = temp(head->next == NULL)
3、temp->next = head->next
head->next = temp

4、函数返回值int *returnSize和int **returnColumnSizes的含义

问:*returnSize是什么?
答:返回数组大小数据的地址,返回二维数组则是行数的地址

*returnSize = 0 初始化
*returnSize = row;

问:returnColumnSizes是什么?
答:一个一维数组的地址的地址

returnColumnSizes	是一维数组的地址的地址
* returnColumnSizes		是一维数组的地址
(* returnColumnSizes)[i]	是一维数组的i个元素

5、如何定义int **returnColumnSizes 和 返回的二位数组

int **res = (int **)calloc(10000, sizeof(int *));
res[row] = (int*)calloc(size, sizeof(int));
res[row][col] = num;
一般情况下直接使用:
(*returnColumnSizes)[row] = col;
也可能需要在函数内部重新赋值空间大小
*returnColumnSizes = (int*)malloc(sizeof(int)*size);

6、树问题的递归

一般对于树的解决方案是:广度优先搜索(辅助结构:队列),深度优先搜索(递归,迭代的栈)

递归:
自己调用自己,在上层函数还没有结束的情况下,开启下层函数运行,首先返回的应该是调用层数
最深的函数部分,上层函数的返回值会参照下层的返回值;
最终的返回值肯定只有一个啊
【自顶向下】

树的递归题目是非常有套路可循的
因为树有两个分支,所以在递归里也有两个分支,一般是通过 递归 A(||,&&)递归 B 来实现分支

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值