博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARTS-Week1
阅读量:4080 次
发布时间:2019-05-25

本文共 2827 字,大约阅读时间需要 9 分钟。

Algorithm

题目

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

来源:力扣(LeetCode)

链接:

第一个解

class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int [] {
0,0}; for(int i=0;i

方法总结

很简单的一个功能,脑袋里面第一时间的想法。事后总结,这只能算一个码农级别的解法。

执行效果

执行用时 :46 ms, 在所有Java提交中击败了44.75%的用户

内存消耗 :35.8 MB, 在所有Java提交中击败了97.76%

看到内存消耗和执行时间,很容易想到用空间换时间的办法来优化。很可惜的是,自己陷在第一个解法的思维里面,跳不出来。或者说,根本想不到。

第二个解

带着疑惑,看了官方的答案,第一个和自己的一样。第二个就是打击到我了,根本没有想到用HashMap来转换值和序列的关系,总是想这要减少时间,但是又想不到用操作时间复杂度是O(1)的HashMap的get来做!后续查询了下,这个几乎是常规操作,貌似在《疯狂Java讲义》里面有提到。

class Solution {
public static int[] twoSum(int[] nums, int target) {
Map
, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) {
ArrayList
key = new ArrayList<>(); key.add(nums[i]); key.add(target - nums[i]); Collections.sort(key); System.out.println(key); if (i!=0 && map.containsKey(key) && nums[i]+nums[map.get(key)]==target) {
return new int[] {
i, map.get(key) }; } else {
map.put(key, i); } } throw new IllegalArgumentException("No two sum solution"); }}

方法总结

属于自己用力过猛的解法!因为只看了官方中的两遍Hash的解法,想自己写出一遍的解法,最后又了这个解法。但是实际上自己有想过在两遍Hash的方法中找一遍Hash的解法,但是自认为不可能!呵呵。

一遍Hash答案

class Solution {
public int[] twoSum(int[] nums, int target) {
Map
map = new HashMap<>(); for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i]; if (map.containsKey(complement)) {
return new int[] {
map.get(complement), i }; } map.put(nums[i], i); } throw new IllegalArgumentException("No two sum solution");}}

总结

List和HashMap的映射关系转换,可以让查询更加快速,便捷。

Review

  1. REPL(Read-Eval-Print-Loop):应答式编程器?
  2. JShell:REPL 工具
  3. 改变
    • 减少编程反馈时间
    • 不需要分号
    • 便捷网络访问:用JShell连接远程服务器,操作数据库。省去安装XShell工具?
    • 保存和加载工作空间:列出代码可用函数和变量的命令。鸡肋?
    • JShell没有异常抛出,都会被后台处理。
    • JShell API:方便扩展,方便给IDE集成使用
    • 变量的初始化,有提示信息

Tip

Docker镜像导入导出

一、准备

1.1 安装docker

在一台虚拟机或实体机中安装docker,可参考:

1.2 配置私服Nexus信息

在/etc/docker中找到daemon.json文件,没有则创建。添加私服司nexus信息:

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], "insecure-registries": ["192.168.126.96:8098"]}

1.3 重启docker

重启docker,生效配置

systemctl daemon-reloadsystemctl restart docker

二、拉取镜像

docker pull 192.168.126.96:8098/{
image-name}:{
tag}

三、导出镜像

导出镜像,到/abc目录下,文件名为:{file-name}.tar

docker sava -o /abc/{
file-name}.tar {
image-name}:{
tag}

四、导入镜像

复制导出的镜像文件到需要部署的机器,导入镜像到docker。在部署机器中运行镜像

docker load < /root/{
file-name}.tar或者docker load -i {
file-name}.tar

五、Push镜像

docker tag 192.168.126.96:8098/{
image-name}:{
tag} remote-ip:port/{
image-name}:{
tag}docker push remote-ip:port/{
image-name}:{
tag}

Share

参与改进了下:

转载地址:http://mtsni.baihongyu.com/

你可能感兴趣的文章
如何用好碎片化时间,让思维更有效率?
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
Encoding Schemes
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Java8 HashMap集合解析
查看>>
自定义 select 下拉框 多选插件
查看>>
Linux常用统计命令之wc
查看>>
fastcgi_param 详解
查看>>
搞定Java面试中的数据结构问题
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Sum Root to leaf Numbers
查看>>
如何成为编程高手
查看>>
本科生的编程水平到底有多高
查看>>
从mysql中 导出/导入表及数据
查看>>
几个常用的Javascript字符串处理函数 spilt(),join(),substring()和indexof()
查看>>
9、VUE面经
查看>>
Golang 数据可视化利器 go-echarts ,实际使用
查看>>
mysql 跨机器查询,使用dblink
查看>>