题解 | #第k轻的牛牛#

第k轻的牛牛

https://www.nowcoder.com/practice/7676478b46794456b145e8e48b0e2763

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param weights int整型一维数组
     * @param k int整型
     * @return int整型
     */
    public int findKthSmallest (int[] weights, int k) {
        // write code here
        for (int i = 0; i < k; i++) {
            for (int j = weights.length - 1; j > i; j--) {
                if (weights[j] < weights[j - 1]) {
                    swap(j, j - 1, weights);
                }
            }
        }

        return weights[k - 1];
    }

    public void swap(int a, int b, int[] arr) {
        int c = arr[a];
        arr[a] = arr[b];
        arr[b] = c;
    }
}

知识点:

堆排序、数组。

解题思路分析:

这段代码实现了一个函数 findKthSmallest,接受一个整数数组 weights 和一个整数 k 作为参数,并返回一个整数结果。

函数的目标是在给定的权重数组中找到第k小的元素。

代码中的主要逻辑如下:

  1. 首先创建一个堆数组 heap,长度为原始数组长度加1。创建一个变量 size_h 并赋值为原始数组的长度。
  2. 遍历原始数组,将元素复制到堆数组中。
  3. 使用循环从数组的中间位置开始,依次对每个非叶子节点进行向下调整,即调用 down 方法。
  4. 在 down 方法中,比较当前节点与其左右子节点的大小关系,如果需要交换,则进行交换,并继续向下调整。
  5. 调整完堆后,开始进行提取最小元素的操作。将堆顶元素(即根节点)复制到原始数组的相应位置,并将堆尾元素移动到堆顶。
  6. 对新的堆顶元素进行向下调整,即再次调用 down 方法。
  7. 重复步骤5和步骤6,直到堆中的元素全部提取完毕。
  8. 返回原始数组中倒数第k个元素作为结果。
  9. 编程语言:

    Java。

全部评论

相关推荐

老板加个卤鸡蛋:HR看了以为来卧底来了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务