前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我刻意练习了很久才有那么一点自信

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

作者头像
码农王同学
发布2020-06-24 16:15:13
3600
发布2020-06-24 16:15:13
举报
文章被收录于专栏:后端Coder后端Coder

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

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

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

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

代码语言:javascript
复制
两数之和:https://leetcode-cn.com/problems/two-sum/

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

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

代码语言:javascript
复制
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这样的用法比较省时间,所以这里就提交了方法二的代码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档