自学Scala的第四天——去leetcode上刷刷题,顺便学学基础语法
通过漫山遍野的寻找,依旧找不到学习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上刷刷题,顺便学学基础语法相关推荐
- mysql等值连接语句_MySql的回顾四:多表查询上(等值连接/非等值连接/自连接)-1992语法...
时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由 ...
- Spark记录-Scala基础语法
如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进 ...
- Leetcode上测试用例测试结果正确,但提交后有错的问题
本文参考博客原址:https://blog.csdn.net/Tomwildboar/article/details/85933955 问题说明:在leetcode上刷题的时候,有时候会出现,测试的时 ...
- leetcode上奇怪的解答错误
最近在leetcode上刷题,有一题的错误很奇怪,题目如下 解答的代码和报错如下: 图片: 代码: class Solution { public:void reverse(string& s ...
- 关于leetcode第三题的巧妙解法
最近在leetcode上刷题,无聊看到第三题,题干如下: Longest Substring Without Repeating Characters: Given a string, find th ...
- 四 . LeetCode标签刷题——树/二叉树(一) 算法部分
各种二叉树的介绍汇总: 二叉树:最多有两棵子树的树被称为二叉树 满二叉树:二叉树中所有非叶子结点的度都是2,且叶子结点都在同一层次上 完全二叉树:如果一个二叉树与满二叉树前m个节点的结构相同,这样的二 ...
- 八十四、Python | Leetcode回溯算法系列
@Author:Runsen @Date:2020/7/7 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- 七十四、Python | Leetcode数字系列(下篇)
@Author:Runsen @Date:2020/7/3 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- 自学Linux命令的四种方法
本文由 极客范 - 小道空空 翻译自 Danny Stieben.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. 如果你想成为Linux高手,那么掌握一些Linux命令是必不 ...
最新文章
- python IP地址无效化
- php如何去除侧栏,设置内容区侧栏
- Mybatis映射文件!CDATA[[]] 转义问题
- C++ STL : 模拟实现STL中的关联式容器unordered_map/unordered_set
- Android学习手记(2) Activity生命周期
- java - 根据条件求对应数字
- 基于Salmon的转录组批量定量流程和差异分析
- ip别名及其在tcp压力测试时候的作用
- MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!
- godotenv简介
- 深度学习8-常用评估函数与自定义评估函数
- 6年专注,只因热爱——方创广告设计
- 嵌入式常见 c语言笔试题
- 调通sina33下的AP6212A0(WIFI+BT)V1.2
- 浅析双11背后的电商IT基础架构
- 贪吃蛇c语言代码vc,纯C语言实现贪吃蛇游戏(VC6.0)
- 最新版PS CC 2017版下载,可汉化可激活
- 如何购买阿里云服务器和域名,Xshell连接服务器,域名备案。
- CVE-2021-30461 - VoIPMonitor未授权远程代码执行漏洞
- 学习笔记(2):A110测试-测试课程申请1888