通过漫山遍野的寻找,依旧找不到学习scala的方向,突然想到了leetcode,不知道上面支不支持scala,记得最早学习java时候,是在上面一顿刷题,一顿操作,先不说别的,至少语法什么的是学到了不少。

leetcode上第一题两数之和是非常简单的一道题,大概就是从一个数组中找出两个数,让这两个数的和是给定的target,就可以返回这两个数在数组中的下标,保证每一数组中有且仅有一对符合要求。

这一题思路太简单了,就是直接一个两层遍历,找到直接返回就行了,这要是java,10秒还不就过了,可惜这个是scala,从第一步我就卡主了,scala怎么遍历... ...

通过不断的上网查询语法之后,我的代码终于通过了编译,并且顺利提交通过,以下就是我别别扭扭的代码

object Solution {def twoSum(nums: Array[Int], target: Int): Array[Int] = {for (i <- 0 until nums.length)for(j <- i+1 until nums.length)if(nums(i)+nums(j) == target)return Array(i,j)return Array()                  }
}

虽然看上去好像一下就能明白,但是毕竟我是去学习语法的,所以先从我这吭哧瘪肚的代码里找找吧。

1.for循环里面遍历数组,使用‘until’关键字,

2.数组的长度使用 .length(和java一样)

3.取数时使用()而不是 [](这个地方编译不通过好几次,害得我不得不打开idea去编写)

大概也就上面这么多了,提交之后的成绩如图

执行时间和内存消耗都能排到一半左右,我自己还是很知道满足的,但是既然是来学习了,就得去瞅瞅排第一的代码是怎么写得,顺便看看能不能多学习一些语法,于是我就打开了执行时间最短的代码

 object Solution {def twoSum(nums: Array[Int], target: Int): Array[Int] = {val len = nums.lengthvar res = new Array[Int](2)for (i <- 0 until len) {for (j <- i+1 until len) {if ((target - nums(i)) == nums(j)) {res(0) = ires(1) = jreturn res}}}res     }
}

这里面总体思路和我是一样的,但是里面很多点还是有区别

1.声明一个Array数组用来保存结果,数组声明方式new Array[数据类型](数组长度)

2.最后一个返回值可以不写return,学到了

为什么这个时间最短我感觉就是玄学了。

下面这个是消耗内存最少的代码

object Solution {def twoSum(nums: Array[Int], target: Int): Array[Int] = {import scala.collection.mutable.Mapval mii: Map[Int, Int] = Map()for (i ← 0 until nums.size) {val adder = target - nums(i)if (mii.contains(adder)) {return Array(mii.get(adder).get, i)}mii += (nums(i) → i)}Array(0, 0)}
}

这个代码真的是知识量多一些

1.scala可以随时随地import

2.Map的声明方式

3.Map的使用 += (key -> value)向map里赋值

4.Map取值 get(key).get

为什么这个内存消耗最少,不太明白,如果你明白,感谢告知~

自学Scala的第四天——去leetcode上刷刷题,顺便学学基础语法相关推荐

  1. mysql等值连接语句_MySql的回顾四:多表查询上(等值连接/非等值连接/自连接)-1992语法...

    时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由 ...

  2. Spark记录-Scala基础语法

    如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进 ...

  3. Leetcode上测试用例测试结果正确,但提交后有错的问题

    本文参考博客原址:https://blog.csdn.net/Tomwildboar/article/details/85933955 问题说明:在leetcode上刷题的时候,有时候会出现,测试的时 ...

  4. leetcode上奇怪的解答错误

    最近在leetcode上刷题,有一题的错误很奇怪,题目如下 解答的代码和报错如下: 图片: 代码: class Solution { public:void reverse(string& s ...

  5. 关于leetcode第三题的巧妙解法

    最近在leetcode上刷题,无聊看到第三题,题干如下: Longest Substring Without Repeating Characters: Given a string, find th ...

  6. 四 . LeetCode标签刷题——树/二叉树(一) 算法部分

    各种二叉树的介绍汇总: 二叉树:最多有两棵子树的树被称为二叉树 满二叉树:二叉树中所有非叶子结点的度都是2,且叶子结点都在同一层次上 完全二叉树:如果一个二叉树与满二叉树前m个节点的结构相同,这样的二 ...

  7. 八十四、Python | Leetcode回溯算法系列

    @Author:Runsen @Date:2020/7/7 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  8. 七十四、Python | Leetcode数字系列(下篇)

    @Author:Runsen @Date:2020/7/3 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  9. 自学Linux命令的四种方法

    本文由 极客范 - 小道空空 翻译自 Danny Stieben.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. 如果你想成为Linux高手,那么掌握一些Linux命令是必不 ...

最新文章

  1. python IP地址无效化
  2. php如何去除侧栏,设置内容区侧栏
  3. Mybatis映射文件!CDATA[[]] 转义问题
  4. C++ STL : 模拟实现STL中的关联式容器unordered_map/unordered_set
  5. Android学习手记(2) Activity生命周期
  6. java - 根据条件求对应数字
  7. 基于Salmon的转录组批量定量流程和差异分析
  8. ip别名及其在tcp压力测试时候的作用
  9. MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!
  10. godotenv简介
  11. 深度学习8-常用评估函数与自定义评估函数
  12. 6年专注,只因热爱——方创广告设计
  13. 嵌入式常见 c语言笔试题
  14. 调通sina33下的AP6212A0(WIFI+BT)V1.2
  15. 浅析双11背后的电商IT基础架构
  16. 贪吃蛇c语言代码vc,纯C语言实现贪吃蛇游戏(VC6.0)
  17. 最新版PS CC 2017版下载,可汉化可激活
  18. 如何购买阿里云服务器和域名,Xshell连接服务器,域名备案。
  19. CVE-2021-30461 - VoIPMonitor未授权远程代码执行漏洞
  20. 学习笔记(2):A110测试-测试课程申请1888

热门文章

  1. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)
  2. 15.微信小程序(JS逻辑文件)
  3. php公钥私钥使用,PHP实现公钥加密私钥解密机制
  4. Noise-contrastive estimation简介
  5. ssm之地区表三级联动
  6. HTML实现登录注册界面
  7. 步进电机S曲线加减速控制生成器-VB6.0实现
  8. 浙政钉DING消息对接文档
  9. 优炫软件斩获“创客北京2022”海淀赛区二等奖
  10. 七层网络模型与四层网络模型以及每层网络协议