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