朱涛 · Kotlin 编程第一课
朱涛
Google 认证的 Kotlin、Android 开发者专家,博客“Kotlin Jetpack 实战”作者
6717 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
朱涛 · Kotlin 编程第一课
15
15
1.0x
00:00/00:00
登录|注册

春节刷题计划(一)| 当Kotlin遇上LeetCode

你好,我是朱涛。
时光飞逝,不知不觉间,我们就已经完成了基础篇的学习,并且也已经完成了三个实战项目,但这终归是不够过瘾的。想要完全掌握 Kotlin 的基础语法,我们还需要更多的练习。我相信,你现在的心情就像是一个手握屠龙刀的勇士,热切希望找一些对手来验证自己的学习成果。
其实,我自己在学习一门新的编程语言的时候,有一个高效的方法,也分享给你。这里我以 Kotlin 为例,假设我现在是一个新手,想快速掌握 Kotlin 的话,我会这样做:
第一步,我会去 Google 搜索一些语言特性对比的文章。比如,我熟悉 Java,想学 Kotlin,我就会去搜“from Java to Kotlin”,然后去看一些 Java、Kotlin 语法对比的文章。这时候,我大脑里就会建立起 Java 与 Kotlin 的语法联系。
第二步,我会打开Kotlin 官方文档,花几个小时的时间粗略看一遍,对 Kotlin 的语法有个大致印象。
最后一步,我会打开 LeetCode 之类的网站,开始用 Kotlin 刷题。在刷题的过程中,我也会先从模拟类的题目开始,之后再到数组、链表、Map、二叉树之类的数据结构。整个过程由易到难,刚开始的时候,我会选择“简单题”,等熟练以后,再选择“中等题”,心情好的时候,我偶尔会做个“困难题”挑战一下。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了作者在春节假期中的刷题计划,以及使用Kotlin解决LeetCode算法题的方法和技巧。作者分享了学习新编程语言的高效方法,包括通过Google搜索语言特性对比文章、粗略了解语法后开始刷题等步骤。文章列举了三个算法题作为热身,分别是移除字符串中的元音字母、寻找最常见的单词和用Kotlin实现冒泡排序。作者强调了通过刷算法题夯实基本功、面试加分的重要性,并指出使用Kotlin解决算法题相比Java更加简洁和爽快。最后,作者留下了一个小作业,鼓励读者使用Kotlin完成。整体而言,本文以实际案例为主线,结合作者的经验分享了Kotlin刷算法题的方法和技巧,对于想要提升编程能力的读者具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《朱涛 · Kotlin 编程第一课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • 郑峰
    ```Kotlin fun compareVersion(version1: String, version2: String): Int { val v1 = version1.split(".").map { it.toInt() } val v2 = version2.split(".").map { it.toInt() } for (i in 0 until maxOf(v1.size, v2.size)) { val diff = (v1.getOrElse(i) { 0 } - v2.getOrElse(i) { 0 }) if (diff != 0) return if (diff > 0) 1 else -1 } return 0; } ```

    作者回复: 简洁、干净、优雅!

    2022-01-30
    4
  • 白乾涛
    我知道为啥找不到 maxBy 了,估计是因为这个方法在 1.6 版本中隐藏了 @DeprecatedSinceKotlin(warningSince = "1.4", errorSince = "1.5", hiddenSince = "1.6") public inline fun <T, R : Comparable<R>> Sequence<T>.maxBy(selector: (T) -> R): T? { return maxByOrNull(selector) }

    作者回复: 是的,有的时候,找不到API了也有可能是废弃了。

    2022-03-02
    2
    2
  • Geek_Adr
    // 我能找到的最大程度的函数式 fun compareVersion(version1: String, version2: String): Int { return (version1.split(".").map { it.toInt() } to version2.split(".").map { it.toInt() }) .run { (0 until maxOf(first.size, second.size)) .fold(0) { acc, i -> if (acc != 0) acc else first.getOrElse(i) { 0 }.compareTo(second.getOrElse(i) { 0 }) } } }

    作者回复: 思路很不错,这种方式不必定义额外的函数,大家可以参考。

    2022-02-07
    2
  • 梁中华
    fun mostCommonWord1(paragraph: String, banned: Array<String>) = paragraph.toLowerCase() .replace("[^a-zA-Z ]".toRegex(), " ") .split("\\s+".toRegex()) .filter { it !in banned.toSet() } .groupBy { it } .mapValues { it.value.size } // .maxBy { it.value } //这里编译不过,我改了下 // ?.key?:throw IllegalArgumentException() .toList() //先转成List才能用MaxBy .maxByOrNull { it.second }

    作者回复: 嗯,因为新版本里隐藏了,LeetCode 能用。

    2022-03-19
    1
  • PoPlus
    涛哥,校招生还推荐用 kotlin 来写算法吗,感觉有些简化的太过了 😅

    作者回复: 放心,校招考察的是思维,哪个语言其实没那么重要,语言跟岗位相关会更好,关联不大也不会有太大问题。只要别过渡依赖API即可。 举个例子,面试官让你实现:“字符串匹配算法”,这时候我们就不能用contains、indexOf之类的API,而是要老老实实去实现KMP之类的算法。让面试官看到你的算法功底、解题思路,这就够了。

    2022-03-04
    1
  • Geek_Adr
    // 函数式 176ms 击败19% fun compareVersion(version1: String, version2: String): Int { return (version1.split(".").map { it.toInt() } to version2.split(".").map { it.toInt() }) .run { (0 until max(first.size, second.size)) .fold(0) { acc, i -> if (acc != 0) acc else first.getOrElse(i) { 0 } - second.getOrElse(i) { 0 } } }.let { when { it > 0 -> 1 it < 0 -> -1 else -> 0 } } } // java 156ms 击败70% fun compareVersion(version1: String, version2: String): Int { val v1 = version1.split(".").map { it.toInt() } val v2 = version2.split(".").map { it.toInt() } var idx = 0 while (idx < v1.size && idx < v2.size) { if (v1[idx] > v2[idx]) { return 1 } else if (v1[idx] < v2[idx]) { return -1 } idx++ } while (idx < v1.size) { if (v1[idx++] > 0) { return 1 } } while (idx < v2.size) { if (v2[idx++] > 0) { return -1 } } return 0 }

    作者回复: 这个题解也非常值得参考。 再次感谢这位同学。

    2022-02-07
    1
  • jim
    春节还更新吗?

    编辑回复: 春节期间老师会带大家刷题哈,我知道大家都很着急学协程,但是心急吃不了热豆腐嘛,先跟着老师一起练习和复习,把基础夯实好了,春节后协程就到啦,这门课又跑不了~

    2022-01-28
    1
  • 爱学习的小羊
    我这个算是半java半kotlin编程了吧 fun compareVersion(version1: String, version2: String): Int { val nums1 = version1.split(".") val nums2 = version2.split(".") for (i in 0..maxOf(nums1.size,nums2.size)){ var a = 0 var b = 0 if (i < nums1.size) a = nums1[i].toInt() if (i<nums2.size) b = nums2[i].toInt() val data = a - b when { data > 0 -> return 1 data < 0 -> return -1 } } return 0 }

    作者回复: 这样也挺好看的

    2022-03-21
  • 浅色的风
    是不是java思维 fun compareVersion(version1: String, version2: String): Int { val listV1 = version1.split(".").toList() val listV2 = version2.split(".").toList() val result = if (listV1.size > listV2.size) 1 else -1 val maxList = if (listV1.size > listV2.size) listV1 else listV2 val minList = if (listV1.size <= listV2.size) listV1 else listV2 for(i in 0..minList.size - 1){ if(listV1[i].toInt() > listV2[i].toInt()){ return 1 }else if(listV1[i].toInt() < listV2[i].toInt()){ return -1 } } for(j in minList.size..maxList.size - 1){ if(maxList[j].toInt() > 0){ return result } } return 0 }

    作者回复: 这思路也不差。

    2022-03-02
  • $Kotlin
    fun compareVersion(version1: String, version2: String): Int { val versionList1 = version1.split(".").toMutableList() val versionList2 = version2.split(".").toMutableList() if (versionList1.size > versionList2.size) { repeat(versionList1.size - versionList2.size) { versionList2.add("0") } } else { repeat(versionList2.size - versionList1.size) { versionList1.add("0") } } for (index in 0..versionList1.size-1) { val v1Int = versionList1[index].toInt() val v2Int = versionList2[index].toInt() if (v1Int > v2Int) { return 1 } else if (v1Int < v2Int) { return -1 } } return 0 }

    作者回复: 代码写的不错,思路很清晰,能加上一些代码注释就更好了。

    2022-01-28
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部