有大佬能帮忙看下我这段代码有什么问题吗,明明逻辑和答案的逻辑完全一致啊,提交却总...
143
2022.09.23
发布于 未知归属地
  1. 数组中的第K个最大元素 - 力扣(LeetCode) (leetcode-cn.com)
    自己写的代码
    public class Solution1 {
    public int findKthLargest(int[] nums,int k){//{3,2,1,5,6,4},2
    int hideCode = nums.length;
    findLargest(nums,hideCode);
    for(int i=nums.length-1;i>=nums.length-k+1;--i){
    swap(nums,0,i);
    --hideCode;
    findLargest(nums,hideCode);
    }
    return nums[0];
    }
    public void findLargest(int[] nums,int hideCode){//{3,2,1,5,6,4},2
    for (int i=hideCode/2;i>=0;--i){
    Largest(nums,i,hideCode);
    }
    }
    public void Largest(int[] nums,int i,int hideCode){//{3,2,1,5,6,4},2
    int l=i2+1,r=i2+2,largest=i;
    if (l<hideCode && nums[l]>nums[largest]){
    largest = l;
    }
    if (r<hideCode && nums[r]>nums[largest]){
    largest = r;
    }
    if (largest != i){
    swap(nums,i,largest);
    Largest(nums,largest,hideCode);
    }
    }
    public void swap(int[] nums,int pass,int now){
    int temp = nums[pass];
    nums[pass] = nums[now];
    nums[now] = temp;
    }
    答案代码
    public class RuleSolution {
    public int findKthLargest(int[] nums, int k) {
    int heapSize = nums.length;
    buildMaxHeap(nums, heapSize);
    for (int i = nums.length - 1; i >= nums.length - k + 1; --i) {
    swap(nums, 0, i);
    --heapSize;
    maxHeapify(nums, 0, heapSize);
    }
    return nums[0];
    }
public void buildMaxHeap(int[] a, int heapSize) {
    for (int i = heapSize / 2; i >= 0; --i) {
        maxHeapify(a, i, heapSize);
    }
}

public void maxHeapify(int[] a, int i, int heapSize) {
    int l = i * 2 + 1, r = i * 2 + 2, largest = i;
    if (l < heapSize && a[l] > a[largest]) {
        largest = l;
    }
    if (r < heapSize && a[r] > a[largest]) {
        largest = r;
    }
    if (largest != i) {
        swap(a, i, largest);
        maxHeapify(a, largest, heapSize);
    }
}

public void swap(int[] a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

}

评论 (0)