leetcode目录

2019年5月22日10:50:22
今天最少要做到70题的位置,既然不考研复习,那就写20个题。

考研倒计时
http://www.haomeili.net/DaoJiShi/?key=考研&year=2019

2019年5月7日【KY228】
整个4月一直被毕业论文分散精力
今天开始从新刷题(此外准备二战杭州某校计算机)
然后我突然发现我这1-30个题做的是啥都忘了(╯‵□′)╯︵┻━┻这代码真的都是我写的吗?怎么一个也看不懂啊,这都是啥啊。。。。。
总之,重新开始重新开始。。。。。。

2019年5月20日 【KY 214】
鸽了鸽了,又tj了半个月,21日进行答辩。之后,emmmmm

leetcode 题号算法思路难度date
1
2
3
4模拟双数组-找第K大值(Median)H
5字符串最长回文字串(DP 两边扩展 马拉车 暴力)H
6模拟遍历输出
7数学反转字符串(注意越界情况)
8模拟
9模拟回文数字
10字符串DP,模拟H
11两个指针纯暴力不可取
12字符串论打表的正确姿势
13字符串论打表的正确姿势
14字符串最长公共前缀 LCPhttps://leetcode-cn.com/articles/longest-common-prefix/
15K-sum二分框架
16K-sum二分框架
17DFS逻辑上可以整理成树,所以是DFS值得一看
18K-sum这种题都是二分法框架
19链表删除指定位置的元素值得一看,没啥难度
20STL
21链表链表归并
22DFS你还是没做出来
23链表K路归并(分治,最小堆)重点研究
24链表相邻链表反转
25链表K组链表反转24升级 H
26数组处理一步到位
27数组处理一步到位26升级
28字符串字符串匹配
29数学没有乘除号的除法边界条件的控制 H
30字符串字符串复杂匹配,要求速度H
31全排列
32
33
34
35
36
37
38
39
40全排列DFS应该掌握的模板题目2019年5月20日20:32:04
41unordered_set名不副实2019年5月20日21:13:43
42DP重写2019年5月20日22:22:36
43字符串计算乘法错位相乘套路题2019年5月20日23:01:09
44字符串匹配DP2019年5月20日22:25:53
45跳跃游戏贪心应该掌握的模板题目2019年5月21日09:24:25
46全排列系列DFS必须掌握的一个套路
47

函数参数用引用最大的作用——也就是传递参数的内存地址而不是额外创建一个变量。
42 双指针法 和 DP法进行分析。
双指针法的本质是:首先计算最底层的水,然后逐层计算更上层的水的情况。【比较复杂】
DP法:
首先从左到右进行遍历,存储进入dp的是左边的最大值;然后右向左进行遍历,存储的是右边的最大值和左边最大值的较小者,最后就是这个较小值和当前的数值进行比较,如果最值较小者更大,我们就把差值存进去。
http://www.cnblogs.com/grandyang/p/4402392.html

10&&44 字符串匹配问题,第一个应该想到的就是DP【神器级别】【10是正则匹配,而44是wildMatch,两种匹配方式是不一样的】【还是不会写】

43 由字符串表示的数字来计算超出范围的数字,进而表示为字符串输出。
【简单说就是,套路,必须记住】

把乘法转变为错位相加,i和j相乘的结果分别对应i+j和i+j+1的结果。【错位相加】

45 第一感觉是DP,到达每一个位置的最小步数可以构造一个状态转移方程。但是仔细想想并不是一个纯的DP。根据GrandYang的文章,决定采用Greedy方式。
cur当前可以到达的最远位置
pre之前可以到达的最远位置

class Solution {
public:
    int jump(vector<int>& nums) {
        int cur = 0;//当前可以到达的最远位置
        int pre = cur;//上一次可以达到的最远位置
        int res = 0;
        int n = nums.size();
        int i=0;// 把这个东西放到里面就会TLE,因为进行了大量的重复操作。
        
        while(cur < n-1){
            res++;
            pre = cur;
            for(;i<=pre;i++){
                cur = max(cur,nums[i]+i);
            }
        }
        return res;
    }
};

47 关于全排列,我们应该知道的一点就是,大概有DFS(insert)和 DFS(swap)两种方式来实现你的想法。

48 数学 转置矩阵,对数组的操作。
最容易理解的,就是首先进行矩阵转置【直接交换到对应的位置就行】,交换每一行的顺序情况。

49 字符串聚类,聚类标准就是元素相同。注意,元素的个数也同样重要。
我一开始的想法是哈希表,但是后来发现,你不就是26个字母吗,那还不如创建一个数组,记录你元素出现的个数情况。【此外,这个26字母出现次数的数组可以转变为一个字符串,进而比较统计字符串,统计字符串也要和字符串构建一一对应的映射关系】
【STL】

50 一个数学问题,第一个要注意的就是,如果N是INT_MIN怎么办;第二个就是要注意,构造递归函数来简化计算。

51 N皇后是典型的递归来求解的题目了。
需要一个函数,用于对目标数组判断某行某列的某一个元素是不是符合规定的要求。在实际中就是bool isValid函数。

注意,vector< string > 是有着二维数组的效果的。
而vector< vector< string >>说明最后的可行结果不止一种,也就是不止一个二维数组。

class Solution {
public:
    vector<vector<string>> solveNQueens(int n) {
        vector<vector<string>> res;
        vector<string> queens(n,string(n,'.'));
        helper(0,queens,res);
        return res;
    }
    void helper(int curRow,vector<string> &queens,vector<vector<string>> &res){
        int n = queens.size();
        if(curRow==n){
            res.push_back(queens);
            return;
        }
        for(int i=0;i<n;i++){
            if(isValid(queens,curRow,i)){
                queens[curRow][i] = 'Q';
                helper(curRow+1,queens,res);
                queens[curRow][i] = '.';
            }
        }
    }
    // 
    bool isValid(vector<string>& queens,int row,int col){
        //如果同一列有Q就不行
        for(int i=0;i<row;i++){
            if(queens[i][col]=='Q') return false;
        }
        //如果斜对角线有Q也行
        for(int i=row-1,j=col-1;i>=0&&j>=0;--i,--j){
            if(queens[i][j]=='Q') return false;
        }
        for(int i=row-1,j= col+1;i>=0 && j<queens.size();i--i,++j){
            if(queens[i][j]=='Q') return false;
        }
        return true;
    }
};

注意:由于你的目的是进行一个递归的操作,那么你的函数的位置,应该是严格的递归函数。这个递归的情况,跟DFS是一样的,就是要进行恢复,也就是你先前设置为Q的点,要增加一句话来恢复。

2019年6月17日17:08:46

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值