题目过百,是时候发一个阶段性总结了

Posted chentingk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目过百,是时候发一个阶段性总结了相关的知识,希望对你有一定的参考价值。

  被同学带着去刷算法,一晃两个月,突破了一百题了,期间经历过数据结构、贪心、动态规划、二分查找等等类型的题目,还有少数的智力题,在此过程中感觉获益良多,特此写一篇总结。

技术图片

 

 

   平台选用了leetcode,题目的水平属于ACM入门级(尽管这样还是难。。),题目有easy,medium,hard三档,再开始刷题大概半个月之后,我强迫自己不刷easy了。easy大多都是埋坑的题目,思维难度不大,细节多。直到最近,强迫自己刷多点hard的题目。在此篇中,我就自己做过的题目归类分为:数据结构类、分治类、动态规划类、贪心类、回溯剪枝类等五类。

一.热身篇

    要做这件事(刷题),首先对某门语言进行熟悉,只需要熟悉逻辑结构的语法就行了;接下来就是先从简单的开始(每个人的简单不一样),寻找正反馈;然后逐步提升难度、限时、加量。

    什么样的题目比较适合热身的?就是基于你现在的水平一眼就能看到逻辑的,最好能在脑里模拟程序运行步骤的,并且分析它的时间空间复杂度。

    来吧,我们一起水题。

    技术图片

 

 

     先看第一题,是不是特别简单一眼就看出来了。它需要寻找两个数加起来等于target的,并且把位置返回。直观的想到使用两个变量,双重循环做加法匹配。

     类似这样一次遍历,它的平均复杂度是O(n),空间复杂度O(1)  

     技术图片

class Solution {
    public int[] twoSum(int[] nums, int target) {
        for(int i=0;i<nums.length;i++){
            for(int j=0;j<i;j++){
                if(nums[i]+nums[j] == target){
                    return new int[]{j,i};
                }
            }
        }
        throw new IllegalStateException("there is no return");
    }
}

    如果针对这个算法做优化,可以做成O(n)时间复杂度,但是要付出另外O(n)的空间

    技术图片

public class TwoSum {
    public void test(){
        int[] nums = {3,2,4};
        int[] result = twoSum(nums,6);
        for(int v : result){
            System.out.println(v);
        }
    }
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> indexMap = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            int temp = target - nums[i];
            if(indexMap.containsKey(temp)){
                return new int[]{indexMap.get(temp),i};
            }
            indexMap.put(nums[i],i);
        }

        throw new IllegalStateException("there is no return");
    }
}

   使用HashMap可以使得查询效率变为O(1),这样写就是几乎最快的解法了。

技术图片

 

     还有很多类似的题目热身,就不再赘述了。

二.数据结构篇

    https://www.cnblogs.com/chentingk/p/11655834.html

三.动态规划篇

    https://www.cnblogs.com/chentingk/p/11608380.html

四.贪心法篇

    https://www.cnblogs.com/chentingk/p/11691755.html

五.回溯篇

    https://www.cnblogs.com/chentingk/p/11697506.html

六.其他篇

    https://www.cnblogs.com/chentingk/p/11697603.html

       https://www.cnblogs.com/chentingk/p/11335561.html

以上是关于题目过百,是时候发一个阶段性总结了的主要内容,如果未能解决你的问题,请参考以下文章

个人作业4-alpha阶段个人总结

个人作业4 alpha阶段 个人总结

第四阶段学习总结

9.18考试总结

20172316 结对编程-四则运算 第二周 阶段总结

oo第三阶段总结