专栏首页后端Coder我刻意练习了很久才有那么一点自信

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

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

关于为什么自己现在开始会去做算法题了,其实就是刚开始毕业的时候,由于找工作的原因都是面向企业级应用开发,所以自然工作比较重要,所以算法题自然放到了一边,无暇顾及,后面随着工作的深入,也基本上用不到算法,但是会用到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这样的用法比较省时间,所以这里就提交了方法二的代码。

本文分享自微信公众号 - WwpwW(gh_245290c1861a),作者:后端Coder

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LeetCode113|两数之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    码农王同学
  • LeetCode69|消失的数字

    之前自己已经分享了几篇关于桶排序的使用了,这里又基于桶排序进行解题了,最近一段时间的输出文章都是自己之前做过的内容,自己打算将做过的题都整理成一篇篇文章进行梳理...

    码农王同学
  • LeetCode116|移除元素

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

    码农王同学
  • Single Number III

    Tyan
  • 浙大版《C语言程序设计(第3版)》题目集 习题5-2 使用函数求奇数和

    其中函数even将根据用户传入的参数n的奇偶性返回相应值:当n为偶数时返回1,否则返回0。函数OddSum负责计算并返回传入的N个整数List[]中所有奇数的和...

    C you again 的博客
  • LeetCode|560. 和为K的子数组--C++题解

    本题原本按我最喜欢的暴力破解提交的,结果到最后几个大数据的时候提示超时了,最后也是看了官方的思路,了解了动态规划的思路去解的这个题,所以本篇写了两个实现的方法。...

    Vaccae
  • Leetcode 220. Contains Duplicate III

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.cs...

    Tyan
  • 力扣198——打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小...

    健程之道
  • UNPv13:#第4章#基于TCP套接字编程

    概述 ? socket函数 #inlcude <sys/socket.h> int socket(int family, int type, int prot...

    _gongluck
  • UESTC 1584 Washi与Sonochi的约定【树状数组裸题+排序】

    题目链接:UESTC 1584 Washi与Sonochi的约定 题意:在二维平面上,某个点的ranked被定义为x坐标不大于其x坐标,且y坐标不大于其y坐标的...

    Angel_Kitty

扫码关注云+社区

领取腾讯云代金券