Leetcode刷题总结

leetcode刷题总结1-20

1、两数之和
(1)空间换时间。
(2)map类型的使用:map<key,value> table; key类似于vector中的下标。
链接: map详解.

2、两数相加
(1)结点指针的声明:ListNode* pNewNode = new ListNode;
否则不能之间出现在等式右侧。
(2)注意末尾指针p的p-next是nullptr,p->next->next不存在,写while循环的时候要注意。

3、无重复字符的最长子串
(1)双指针的思想很重要。
这题我们依次求从i开始的最长无重复子串。右边界right右移,把新的字符加入set,如果重复就停止并计算长度。(注意判断用right+1判断或者right回退;从left——right无重复,表明从left+1——right无重复,减少了遍历的次数)
(2)set类型的使用

4、寻找两个正序数组的中位数
(1)两个数列的中位数,就是第(m+n)/2=k小的数。取各自第k/2个数,比较大小。若a[k/2]<b[k/2]说明a中的前k/2个数都是小的,且k/2<k;迭代k=k-k/2;继续在新的a和b中找第k-k/2小的数。
二分法

5、最长回文子串
(1)动态规划——dp[i][j]表示i-j是否为回文。只要做上三角矩阵即可。

10、正则表达式匹配
(1)动态规划,用 f[i][j]表示 s 的前 i 个字符与 p 中的前 j 个字符是否能够匹配。
在这里插入图片描述
11、盛最多水的容器
(1)双指针法
移动一个指针 i 的前提:该指针 i 确定,另一个指针 j 移动到任意位置得到的值都不如当前 i , j 对应的值好。

13、罗马数字转整数
(1)switch-case用法

switch (s[i])
            {
                case 'I' :
                    if (i+1<len && s[i+1]=='V')
                    {
                        num = num + 4;
                        i++;
                    }
                    else if (i+1<len && s[i+1]=='X')
                    {
                        num = num + 9;
                        i++;
                    }
                    else
                    {
                        num = num + 1;
                    }
                    break;
                case 'V' :
                    num = num + 5;
                    break;
                //......
            }
        }

17、电话号码的字母组合
(1)深度优先搜索dfs。考虑是有返回值的,还是void类型;同时,注意退出边界的条件;注意回溯的写法。
对于只要求出一个解的递归,需要用一个全局遍历if_exit来判断,跟在递归调用后面。(见37、解数独)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值