找出数组中第K大整数——JS实现

74 阅读1分钟

1985. 找出数组中的第 K 大整数

给你一个字符串数组 nums 和一个整数 knums 中的每个字符串都表示一个不含前导零的整数。

返回 nums 中表示第 k 大整数的字符串。

注意: 重复的数字在统计时会视为不同元素考虑。例如,如果 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"

思路:

首先他是字符串不能直接使用sort,在函数参数中可以将其转化成number类型的

nums.sort((a,b) => Number(b) - Number(a))

发现问题:在最后一个测试用例时发现存在误差 应该是精度的问题

解决:修改回调函数:

  • 首先:判断两个字符串的长度是否相同,若不同则直接返回长度大的,即相减
  • 其次:长度相同分别判断第一位第二位...大小是否相同,不同则返回
/**
 * @param {string[]} nums
 * @param {number} k
 * @return {string}
 */
var kthLargestNumber = function(nums, k) {
    //  nums = nums.map(item => BigInt(item))
    nums.sort(sort)
    return String(nums[k-1])
};
​
var sort=(a,b)=>{
    if(a.length!=b.length) return b-a
    if(a.length==b.length){
        for(let i=0;i<a.length;i++){
            if(b[i]!=a[i]){
                return b[i]-a[i]
            }
        }
        // return true
    }
}