春节刷题计划(一)| 当Kotlin遇上LeetCode
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了作者在春节假期中的刷题计划,以及使用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-304 - 白乾涛我知道为啥找不到 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-0222 - 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-072 - 梁中华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-191 - PoPlus涛哥,校招生还推荐用 kotlin 来写算法吗,感觉有些简化的太过了 😅
作者回复: 放心,校招考察的是思维,哪个语言其实没那么重要,语言跟岗位相关会更好,关联不大也不会有太大问题。只要别过渡依赖API即可。 举个例子,面试官让你实现:“字符串匹配算法”,这时候我们就不能用contains、indexOf之类的API,而是要老老实实去实现KMP之类的算法。让面试官看到你的算法功底、解题思路,这就够了。
2022-03-041 - 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-071 - jim春节还更新吗?
编辑回复: 春节期间老师会带大家刷题哈,我知道大家都很着急学协程,但是心急吃不了热豆腐嘛,先跟着老师一起练习和复习,把基础夯实好了,春节后协程就到啦,这门课又跑不了~
2022-01-281 - 爱学习的小羊我这个算是半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 - $Kotlinfun 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