leetcode刷题日记##3

  • 3.无重复字符的最长子串
    设立两个指针分别指向子串的首位和当前位,
    当当前位的元素在子串中不可以被找到时,当前位元素加入子串。
    当当前位的元素在子串中可以被找到时,即子串首位到当前位前一位为一个有效解,与之前所得最优解相比较更新结果。
    将首位设到找到的那个位置的后一位,以保证当前位在子串中时,子串没有重复元素。
    将当前位遍历完整个字符串,最后更新得到的解即为最优解。
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int a=0;
        int l=s.size();
        int m=0;
        int i;
        for (i=0; i<l; i++) 
        {
            int k=s.find(s[i],a);
            if (k!=i) {m=max(m,i-a); a=k+1;}
        }
        return max(m,i-a);
    }
};
  • 4.寻找两个正序数组的中位数
    先合并在找中位数,主要是要考虑各种边界情况
    进阶的那个我没看懂题解

  • 5.最长回文子串
    用动态规划,从最简单的情况往深处迭代,左右位置为矩阵的横纵坐标,坐标点上的值代表了回文与否,后面的可以由前面的迭代获得

  • 53.最大子序和
    算法导论原题,用递归算法,分成跨越中间节点,不跨越的左右两边三种情况。

  • 101.对称二叉树
    递归很简单,就是判断两个子树值相等与否,以及各自左右右左子树是否对称
    迭代使用队列,类似于宽度优先搜索,同时搜索两边,一次取两个节点比较

  • 104.二叉树的最大深度
    很简单的递归算法

  • 121.买卖股票的最佳时机
    可以类似于最大子序和用递归,但是比较麻烦
    不如遍历,假设每一天卖出,则最优的买入就是之前股价最低的时候,遍历一遍就好了

  • 10.正则表达式匹配
    题解教的动态规划,给了迭代公式
    我是用的递归算法,从后往前递归,递归公式和迭代工诗一样的,就是最小问题的情况很多比较复杂,要一点一点试错。
    老实说我那个迭代公式也只是懂了个大概,还是没能确信它的完备性。

  • 11.盛最多水的容器
    直接遍历大概要 n 2 / 2 n^2/2 n2/2,超出时间限制
    用双指针法,每次将两侧较短的一根往里走,更新最优解即可,只要走n步就好
    这个方法的完备性其实我也没想太明白,只是确实我找不出反例。

  • 22.括号生成
    就是二叉树的宽度优先搜索,只不过有的分支肯定不满足要求的要提前排除(右括号的数目不大于左括号)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值