最小K个数(力扣面试题17.14)

本文采用的是大堆排序求最小的K个值。需要有堆的数据结构基础哦。

代码展示:


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
void AdjustDown(int* parr,int n,int root)//向下调整
{
    int parent=root;
    int child = parent*2+1;
    while(child<n)
    {
        if(child+1<n&&parr[child+1]>parr[child]){
            child++;
        }
        if(parr[parent]<parr[child])
        {
            int tem=parr[parent];
            parr[parent]=parr[child];
            parr[child]=tem;

            parent=child;
            child=parent*2+1;
        }
        else
        {
            break;
        }
    }
}
int* smallestK(int* arr, int arrSize, int k, int* returnSize){
    
    if(k==0)
    {
        return NULL;
    }
    int* st=(int*)malloc(sizeof(int)*k);
    *returnSize=k;
    for(int i=0;i<k;i++)
    {
        st[i]=arr[i];
    }
    for(int i=(k-2)/2;i>=0;i--)//向下调整形成大堆,(k-2)/2是求父亲节点
    {
        AdjustDown(st,k,i);
    }
    for(int i=k;i<arrSize;i++)//如果数组元素小于堆顶元素,则代替堆顶元素,再形成新的大堆
    {
        if(arr[i]<st[0])
        {
            st[0]=arr[i];
            AdjustDown(st,k,0);
        }
    }
    return st;
}

 值得注意的是,已知孩子节点求父亲节点的公式是:parent=(child-1)/2。

相关推荐

  1. 面试150 | 209.长度的子数组

    2024-04-30 09:34:03       61 阅读
  2. 面试17.18.短超串

    2024-04-30 09:34:03       34 阅读
  3. 100】【好】155.

    2024-04-30 09:34:03       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 09:34:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 09:34:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 09:34:03       82 阅读
  4. Python语言-面向对象

    2024-04-30 09:34:03       91 阅读

热门阅读

  1. 数据库三范式

    2024-04-30 09:34:03       26 阅读
  2. 构建嵌入空间

    2024-04-30 09:34:03       32 阅读
  3. Zephyr storage存储子系统系统学习记录

    2024-04-30 09:34:03       35 阅读
  4. AnolisOS8.8基于yum安装mariadb并配置远程访问

    2024-04-30 09:34:03       28 阅读
  5. js执行顺序

    2024-04-30 09:34:03       25 阅读
  6. Visual Studio Installer 运行python 汉字

    2024-04-30 09:34:03       27 阅读
  7. 使用WSGI服务器在生产环境中运行Flask应用程序

    2024-04-30 09:34:03       30 阅读
  8. Jenkins下拉取gitlab的branches和tags的字段说明

    2024-04-30 09:34:03       30 阅读