政协网站法治建设,织梦免费企业网站,龙岩网络三大巨头,html教程视频教程给你一个字符串数组 nums 和一个整数 k 。nums 中的每个字符串都表示一个不含前导零的整数。
返回 nums 中表示第 k 大整数的字符串。
注意#xff1a;重复的数字在统计时会视为不同元素考虑。例如#xff0c;如果 nums 是 [1,2,2]重复的数字在统计时会视为不同元素考虑。例如如果 nums 是 [1,2,2]那么 2 是最大的整数2 是第二大的整数1 是第三大的整数。 示例 1
输入nums [3,6,7,10], k 4
输出3
解释
nums 中的数字按非递减顺序排列为 [3,6,7,10]
其中第 4 大整数是 3示例 2
输入nums [2,21,12,1], k 3
输出2
解释
nums 中的数字按非递减顺序排列为 [1,2,12,21]
其中第 3 大整数是 2示例 3
输入nums [0,0], k 2
输出0
解释
nums 中的数字按非递减顺序排列为 [0,0]
其中第 2 大整数是 0提示
1 k nums.length 1041 nums[i].length 100nums[i] 仅由数字组成nums[i] 不含任何前导零
题解当看到这个题目的时候第一反应是将字符串转为整数然后按照整数的大小进行排序然后返回第K大的数字转为字符串结果就行了。 这个复杂度应该是O(nlgn)O(M),其中n表示nums的长度M表示所有字符串连起来的总长度。
于是开始写代码。第一次提交
class Solution {fun kthLargestNumber(nums: ArrayString, k: Int): String {val temp:ArrayInt Array(nums.size){0}for(i in 0 until nums.size){temp[i]nums[i].toInt()}temp.sort()return temp[nums.size-k].toString()}
}
很开心没想到中等难度的题目这么简单。然后执行出错Line 5: Exception in thread main java.lang.NumberFormatException: For input string: 6888794705
哦哦原来是超越整数的界限了。那么再来我这次用Double数据类型。
class Solution {fun kthLargestNumber(nums: ArrayString, k: Int): String {/*val temp:ArrayInt Array(nums.size){0}for(i in 0 until nums.size){temp[i]nums[i].toInt()}*///nums.sort(){c-c.toInt()}//return nums[nums.size-k].toString()val sortedArr nums.sortedWith(Comparator { s1, s2 -val i1 s1.toDouble()val i2 s2.toDouble()(i1 - i2).toInt() // Comparator 这个比较器默认返回的是Int类型所以这里强制转换})return sortedArr[nums.size-k].toString()}
}
当输入倒数第二个测试用例的时候也是一个数字有这么长的时候9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
又报错了
又超过限制了于是又想到了一个办法使用BigInteger类
class Solution {fun kthLargestNumber(nums: ArrayString, k: Int): String {/*val temp:ArrayInt Array(nums.size){0}for(i in 0 until nums.size){temp[i]nums[i].toInt()}*///nums.sort(){c-c.toInt()}//return nums[nums.size-k].toString()val sortedArr nums.sortedWith(Comparator { s1, s2 -val i1 s1.toBigInteger()val i2 s2.toBigInteger()(i1 - i2).toInt()})return sortedArr[nums.size-k].toString()}
}
以为解决的是但是toInt这个地方又越界了。。郁闷了一会之后继续又想到了when这个单词
class Solution {fun kthLargestNumber(nums: ArrayString, k: Int): String {/*val temp:ArrayInt Array(nums.size){0}for(i in 0 until nums.size){temp[i]nums[i].toInt()}*///nums.sort(){c-c.toInt()}//return nums[nums.size-k].toString()val sortedArr nums.sortedWith(Comparator { s1, s2 -val i1 s1.toBigInteger()val i2 s2.toBigInteger()when{i1i2 - -1 i1i2 - 1 else - 0 }})return sortedArr[nums.size-k].toString()}
}
既然comparator要返回Int型那么比较的话只有三种情况都返回就行了。终于通过了
时间1328 ms
击败
N/A
内存69.8 MB
击败
N/A