美文网首页
我刻意练习了很久才有那么一点自信

我刻意练习了很久才有那么一点自信

作者: 143e7673f04b | 来源:发表于2020-06-20 22:43 被阅读0次

    关于算法题的做法,自己也很少去看,也很少去做,所以这里自己也是一位算法做题的"萌新",还记得大学时自己买过一本关于算法题的书,有的时候还会翻翻这本书,但是这本书留在了郑州,是的,那个临近毕业的时候自己,不需要的书籍都卖了,唯独自己喜欢的几本书没有卖,那本算法书就没有卖,因为它承载了自己大学里美好的一段时光,至少每每看到那本书自己还会去回忆一下。

    关于为什么自己现在开始会去做算法题了,其实就是刚开始毕业的时候,由于找工作的原因都是面向企业级应用开发,所以自然工作比较重要,所以算法题自然放到了一边,无暇顾及,后面随着工作的深入,也基本上用不到算法,但是会用到java原有的集合,这个时候自己也分析了一些集合的源码分析文章,或许你读过我的文章就知道分析源码的文章自己基本上分析完了,所以这里就想着自己看看能不能做些算法题呢,至少自己不反感它,因为目前自己不会涉及spring这样优秀框架源码的阅读,因为它本身的特性自己也是在前段时间刚分析完,觉得还是需要沉淀一下,况且自己工作中也用不到必须要分析spring的源码的场景。

    这里就开始了自己公众号算法题的内容输出了,其实前面已经写了几十道了,见前面文章的github地址进行获取,其实各个网站都有自己的提交记录,这里也是将自己编写的代码在文章中进行说明一下,这样以后可以看自己公众号里面的内容就可以了。

    这里说明一下吧,由于题目的介绍自己就不在文章中进行说明了,这里以截图的方式进行说明,给与题目的连接就可以了

    两数之和:https://leetcode-cn.com/problems/two-sum/

    这样的方式还是比较友好,内容还是比较清晰的,以后就会以这样的风格来进行编写了。

    这里提供两种解法,一种是暴力解法,另外一种就是基于HashMap做的,暴力解法也可以做,主要是时间复杂度高O(n^2),采用了HashMap主要是基于空间换时间的角度出发的,这里就不过多说明什么了,看下示例程序就可以了

    package com.wpw.niuketest;
    import java.util.Arrays;import java.util.HashMap;import java.util.Map;
    public class TwoSumTest { public static void main(String[] args) { int[] nums = {2, 7, 11, 15}; int target = 9;// int[] result = twoSum(nums, target); int[] result = twoSumWithMap(nums, target);
    Arrays.stream(result).forEach(x -> System.out.print(x + "\t")); }
    public static int[] twoSum(int[] nums, int target) { int length = nums.length; final int arrayCount = 2; int[] result = new int[arrayCount]; for (int i = 0; i < length; i++) { for (int j = 1; j < length - 1; j++) { if (nums[i] + nums[j] == target) { result[0] = i; result[1] = j; return result; } } } return result; }
    public static int[] twoSumWithMap(int[] nums, int target) { int length = nums.length; final int arrayCapacity = 2; int[] result = new int[arrayCapacity]; Map<Integer, Integer> hashMap = new HashMap<>(16); for (int i = 0; i < length; i++) { if (hashMap.containsKey(target - nums[i])) { result[0] = hashMap.get(target - nums[i]); result[1] = i; return result; } hashMap.put(nums[i], i); } return result; }}

    这里说明一点,由于内存空间还是比较有用的,也就是在返回的数组大小时,指定大小为2,这样可以减少内存空间的分配,到这里就结束了。下面由于觉得还是HashMap这样的用法比较省时间,所以这里就提交了方法二的代码。

    快乐工作,懂得生活。

    相关文章

      网友评论

          本文标题:我刻意练习了很久才有那么一点自信

          本文链接:https://www.haomeiwen.com/subject/bcknxktx.html