<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chen_ethan的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chen_ethan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chen_ethan]]></copyright><item><title><![CDATA[leetcode 542 01 矩阵  BFS 动态规划]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/105217984</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/105217984</guid><author>chen_ethan</author><pubDate>Thu, 02 Apr 2020 08:48:27 +0800</pubDate><description><![CDATA[解题思路： 如果从元素为1 的开始做bfs， 时间复杂度为O(N^2 * M^2)算法会超时；

从元素为0开始做bfs， 时间复杂度为O(N*M)， 不会导致超时。 另外需要将所有值为0 的元素全部入队列之后， 才开始开始第一轮的bfs， 可以确保所有为0 的元素开始向外扩展

动态规划思路： 从左下 和右上的两个方向进行 dp的计算


/**
 * Return an array of...]]></description><category></category></item><item><title><![CDATA[leetcode 684. 冗余连接 ufs]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104930941</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104930941</guid><author>chen_ethan</author><pubDate>Tue, 17 Mar 2020 21:00:33 +0800</pubDate><description><![CDATA[解题思路： ufs 并查集中

关键：一条边的两个节点的父节点不相同则Union，若相同则说明这两个节点之前已经被Union过即此边为多余边。（请细品）
并查集用了路径压缩和按秩归并提高效率。


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
typedef struct {
...]]></description><category></category></item><item><title><![CDATA[leetcode959. 由斜杠划分区域  矩阵和递归]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104820027</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104820027</guid><author>chen_ethan</author><pubDate>Thu, 12 Mar 2020 15:28:46 +0800</pubDate><description><![CDATA[解题思路： 将1个空格放到3*3 的矩阵， 这样 ‘/’ 和'\\' 变成如下数据， 扩展后使用递归的方式进行查找。

注意 '\\’ 为单个字符， 且字符串中长度即为1


0 0 1    1 0 0
0 1 0    0 1 0
1 0 0    0 0 1




void outputMaxtrix(int** map, int num)
{
    for (int i =...]]></description><category></category></item><item><title><![CDATA[leetcode 239 滑动窗口最大值]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104792780</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104792780</guid><author>chen_ethan</author><pubDate>Wed, 11 Mar 2020 11:29:26 +0800</pubDate><description><![CDATA[lession learn:

1、 如果出现一个新的最大值， 则队列清零

2、 如果出现的数字比上一个最大值小， 则需要记录在队列中

   其中队列满时需要把队列中最早加入的数字删除， 并重新排序

   队列不满时仅需要按顺序加入队列即可。

3、 第一个K个数字需要全部进入队列。


/**
 * Note: The returned array must be mall...]]></description><category></category></item><item><title><![CDATA[螺旋矩阵 54/59]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104782729</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104782729</guid><author>chen_ethan</author><pubDate>Tue, 10 Mar 2020 20:44:19 +0800</pubDate><description><![CDATA[lession learn: 判断数据为空时 需要注意不能使用*matrixCokSize， 因为本身就有可能是NULL

正确的方法：


    if (matrix == NULL || matrixSize == 0) {
        *returnSize = 0;
        return NULL;
    }

错误方法：


    if (matrix == NULL ...]]></description><category></category></item><item><title><![CDATA[leetcode 130. 被围绕的区域  994. 腐烂的橘子  BFS]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104718570</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104718570</guid><author>chen_ethan</author><pubDate>Sat, 07 Mar 2020 17:42:14 +0800</pubDate><description><![CDATA[typedef struct {
    int x;
    int y;
} position_t;
void BFS(char** board, int x, int y, int row, int col, int** visit)
{
    int rear = -1;
    int front = -1;
    int i, j;
    position_t tem...]]></description><category></category></item><item><title><![CDATA[leeetcode 36. 有效的数独]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104700672</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104700672</guid><author>chen_ethan</author><pubDate>Fri, 06 Mar 2020 17:39:57 +0800</pubDate><description><![CDATA[bool isValidSudoku(char** board, int boardSize, int* boardColSize){
    if (!board || (boardSize != 9) || (*boardColSize != 9)) return false;
    int col[9][9] = {0};
    int square[9][9] = {...]]></description><category></category></item><item><title><![CDATA[leetcode 33. 搜索旋转排序数组]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104700632</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104700632</guid><author>chen_ethan</author><pubDate>Fri, 06 Mar 2020 17:38:32 +0800</pubDate><description><![CDATA[static int search_start(int* nums, int numsSize, int start, int end)
{
    if (nums[start] &lt; nums[end]) {
        return 0;
    }
    while (start &lt;= end) {
        int tmp = (start + end)...]]></description><category></category></item><item><title><![CDATA[leetcode 31 下一个排列 （双排列）]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104700565</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104700565</guid><author>chen_ethan</author><pubDate>Fri, 06 Mar 2020 17:36:51 +0800</pubDate><description><![CDATA[int cmp(const void *a, const void *b)
{
    return *((int *)a) - *((int *)b);
}
void nextPermutation(int* nums, int numsSize){
    if(!nums || numsSize &lt;= 1) {
        return;
    }
   ...]]></description><category></category></item><item><title><![CDATA[leetcode16_最接近的三数之和  双指针 排序]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104700137</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104700137</guid><author>chen_ethan</author><pubDate>Fri, 06 Mar 2020 17:23:09 +0800</pubDate><description><![CDATA[int compare (void *a, void *b)
{
    return *((int *)a) - *((int *)b);
}
int threeSumClosest(int* nums, int numsSize, int target){
    if (!nums || numsSize &lt; 3) {
        return -INT_MAX;
    }...]]></description><category></category></item><item><title><![CDATA[leetcode 994. 腐烂的橘子  广度优先算法]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104681297</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104681297</guid><author>chen_ethan</author><pubDate>Thu, 05 Mar 2020 19:05:30 +0800</pubDate><description><![CDATA[解题思路：基础的广度优先算法， 需要创建的node 类型应该

包括该位置腐化的时间min， 下一轮腐化的时间等于原有基础上+1；

另外初始化队列时应轮询整个数组，全部放入；

四个方向的坐标需要注意方向。




typedef struct {
    int x;
    int y;
    int min;
} node_t;
#define MAX_DIRECTION 4
no...]]></description><category></category></item><item><title><![CDATA[leetcode 33. 搜索旋转排序数组  二分法查找]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104667692</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104667692</guid><author>chen_ethan</author><pubDate>Thu, 05 Mar 2020 09:04:22 +0800</pubDate><description><![CDATA[https://www.cnblogs.com/caoxinyu/p/10568496.html


static int search_start(int* nums, int numsSize, int start, int end)
{
    if (nums[start] &lt; nums[end]) {
        return 0;
    }
    while (...]]></description><category></category></item><item><title><![CDATA[leetcode31  下一个排列]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104667553</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104667553</guid><author>chen_ethan</author><pubDate>Thu, 05 Mar 2020 08:45:02 +0800</pubDate><description><![CDATA[int cmp(const void *a, const void *b)
{
    return *((int *)a) - *((int *)b);
}
void nextPermutation(int* nums, int numsSize){
    if(!nums || numsSize &lt;= 1) {
        return;
    }
    int i = nu...]]></description><category></category></item><item><title><![CDATA[leetcode 22 括号的生成   回溯法]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104667470</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104667470</guid><author>chen_ethan</author><pubDate>Thu, 05 Mar 2020 08:37:32 +0800</pubDate><description><![CDATA[/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int pos;
void getAns(char ** result, int left, int right, int *retNum, int n, char * map) {
    //printf("line:%d %...]]></description><category></category></item><item><title><![CDATA[两数相加 2 、445]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104510122</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104510122</guid><author>chen_ethan</author><pubDate>Thu, 27 Feb 2020 09:12:00 +0800</pubDate><description><![CDATA[struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    if(!l1 || !l2) {
        return NULL;
    }
    struct ListNode * ret = (struct ListNode *)calloc(1, sizeof(struct ...]]></description><category></category></item><item><title><![CDATA[leetcode 142 环形链表 II/  287. 寻找重复数 -- 快慢指针的使用]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104302059</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104302059</guid><author>chen_ethan</author><pubDate>Thu, 13 Feb 2020 20:32:42 +0800</pubDate><description><![CDATA[快慢指针介绍及功能：

https://blog.youkuaiyun.com/qq_21815981/article/details/79833976

https://www.jianshu.com/p/21b4b8d7d31b









问题转换为142题。那么针对此题，快、慢指针该如何走呢。根据上述数组转链表的映射关系，可推出
142题中慢指针走一步slow = slow.next ==&g...]]></description><category></category></item><item><title><![CDATA[leetcode 46 不重复数组全排列  47. 全排列 II]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104225568</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104225568</guid><author>chen_ethan</author><pubDate>Mon, 10 Feb 2020 08:55:27 +0800</pubDate><description><![CDATA[题目： 给定一个没有重复数字的序列，返回其所有可能的全排列。

易错点：

正确写法： (*returnColumnSizes)[i] = numsSize;

错误写法：*returnColumnSizes[i] = numsSize;


/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the ...]]></description><category></category></item><item><title><![CDATA[leetcode 39 -- 组合总和 查询所有子集的和等于targert 的组合 C语言解法]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104217528</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104217528</guid><author>chen_ethan</author><pubDate>Sat, 08 Feb 2020 15:59:04 +0800</pubDate><description><![CDATA[回溯法 = 深度搜索 + 剪枝 且深度搜索一般使用递归来实现，程序代码相对简洁

代码模板
/**
* dfs 模板.
* @param[in] input 输入数据指针
* @param[inout] cur or gap 标记当前位置或距离目标的距离
* @param[out] path 当前路径，也是中间结果
* @param[out] result 存放最终结果
* @return 路径...]]></description><category></category></item><item><title><![CDATA[优雅地非递归遍历二叉树]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104207360</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104207360</guid><author>chen_ethan</author><pubDate>Fri, 07 Feb 2020 11:23:34 +0800</pubDate><description><![CDATA[前中后序遍历二叉树


public class BinaryTreeNode&lt;T&gt;
    {
        public T Value { get;set; }
        public BinaryTreeNode&lt;T&gt; Parent { get;set; }
        public BinaryTreeNode&lt;T&gt; Left { get...]]></description><category></category></item><item><title><![CDATA[uthash 英文介绍]]></title><link>https://blog.youkuaiyun.com/chen_ethan/article/details/104206303</link><guid>https://blog.youkuaiyun.com/chen_ethan/article/details/104206303</guid><author>chen_ethan</author><pubDate>Fri, 07 Feb 2020 10:02:16 +0800</pubDate><description><![CDATA[C开源hash代码uthash的用法总结

https://blog.youkuaiyun.com/const_gong/article/details/50487806

Macro reference

Convenience macros

The convenience macros do the same thing as the generalized macros, but require fe...]]></description><category></category></item></channel></rss>