力扣做题心得堆放

1.栈的数组写法

int * stack = (int *)malloc(sizeof(int) * propertiesSize);
 int stackSize = 0;
stack[stackSize++] = properties[i][1];

通过减小stackSize模拟pop过程,增大来模拟push过程

2.使用uthash

typedef struct HashTable{
    int key;
    int value;
    UT_hash_handle hh;
}HashTable;

 

增加操作

查找操作 

3.这个求余好骚(旋转字符串abcdef->cdefab)

4.C#中的二维数组

public class Solution {
    public IList<IList<int>> Generate(int numRows) {
        IList<IList<int>> listAll = new List<IList<int>>();
            int i =1;
            while (i<=numRows)
            {
                List<int> list = new List<int>();
                for (int j = 1; j <=i; j++)
                {
                    if (i <= 2)
                    {
                        list.Add(1);
                    }
                    else if (j == 1 || j == i)
                    {
                        list.Add(1);
                    }
                    else
                    {
                        list.Add(listAll[i -2][j - 2] + listAll[i - 2][j-1]);
                    }
                }
                listAll.Add(list) ;
                i++;
            }
            
            return listAll;
    }
}

作者:long-yu-8
链接:https://leetcode-cn.com/problems/pascals-triangle/solution/if-else-by-long-yu-8/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

5.删除链表倒数第n个节点,漂亮的回溯法

6.

leetcode报错:

load of null pointer of type 'int'

原因1.return null时,参数列表的*returnSize没有设置为0;

2.return的数组以int array[SIZE]形式声明【会被系统回收】应该用malloc

7.滑动窗口

最近学了滑动窗口算法。

经典题目:

最小覆盖字串

字符串的排列

字母异位词

无重复字母最长字串

8.位运算+分治的骚操作

9.

注意逻辑运算的懒惰性 

这里我本来是没有设置abcd四个变量,全部且在一起的。因而可能会导致四个方向有些不执行。

10.

DFS/BFS遍历时可以建一个方向数组

11.BFS求最短路径 

其实很有套路。BFS一圈一圈搜索就是了

12.还有这种逆序遍历单调栈问题

13.学了回溯算法

都是这样的爆搜题。感觉蛮有套路的。基本就是如下格式:

if 边界条件

return;

循环        添加,递归,删除

14.一些简单的动态规划

 感觉核心就是得找到f(n)和前几项的关系。

15.百题了

 

16.

如果在测试台测试通过,但是样例不通过,可能是因为全局变量没手动清空

17.注意看数值是否溢出

我这里一直没注意,原来是没有转换成long导致数值溢出了 

18.记忆化搜索

其实就是搜索(DFS)+动态规划思想。

搜索可能大量重复,动态规划列出的关系式子又建议用递推处理【如下图】,这时候就可以用记忆化搜索的方式。

我们会像动态规划一样列出状态转移方程,再采用递归形式求解。 

19.动态规划关于子序列问题

最大连续子序列和   dp[i]=max(dp[i-1]+a[i],a[i])   该点被选中

最大上升子序列元素数  dp[i]=max( dp[j]+1) 0<j<i,a[j] < a[i]    该点被选中

最大公共子序列元素数  dp[i][j] ={ dp[i-1][j-1] + 1     a[i]==b[j]

                                                   { max( dp[i-1][j], ap[i][j-1] )   a[i]!=b[j]

                                                   前ij项的最大值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值