zoukankan      html  css  js  c++  java
  • 最小的K个数

    题目描述

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
    思路一:堆排序,小根堆,每次找到取出最小的根
    代码一:
     1     void Heap(vector<int> &arr,int len,int Root)
     2     {
     3         int index;
     4         while(1)
     5         {
     6             if(Root*2+2 < len )//有左,右孩子
     7              {
     8                  //左右孩子中大的
     9                 // printf("999
    ");
    10                 index = arr[Root*1+1] < arr[Root*2+2] ? Root*1+1 : Root*2+2;
    11              }
    12              else if(Root*1+1 < len)//只有左孩子
    13             {
    14                 index = Root*1+1;
    15             }
    16             else//没孩子
    17                 break;
    18             if(arr[index] < arr[Root]) //与根交换
    19              {
    20                  arr[index] = arr[index]^arr[Root];
    21                  arr[Root] = arr[index]^arr[Root];
    22                  arr[index] = arr[index]^arr[Root];
    23                  Root = index;
    24              }
    25              else
    26                 break;
    27         }
    28     } 
    29     vector<int> GetLeastNumbers_Solution(vector<int> &input, int k) {
    30         vector<int> vec;
    31         int len = input.size();
    32         if(k > input.size()||k==0)  return vec;
    33          for(int i = len/2-1;i >=0 ;i--)
    34             Heap(input,len,i);
    35         
    36          for(int i = len-1;i>=0;i--)
    37         {
    38              vec.push_back(input[0]);
    39              if(vec.size() == k)
    40                  break;
    41             //交换
    42             input[0] = input[0]^input[i];
    43             input[i] = input[0]^input[i];
    44             input[0] = input[0]^input[i];
    45             //调整根
    46             Heap(input,i,0);
    47         }
    48         return vec;
    49     }
    堆排序
  • 相关阅读:
    WIN8 下 Hyper-V和Vmware Workstation
    小技巧总结
    工具软件
    php开发入门
    docker的用法总结
    [工具] 同步本地文件夹与VPS中的文件夹
    读书笔记之《The Art of Readable Code》Part 3
    读书笔记之《The Art of Readable Code》Part 2
    正则表达式小试牛刀
    读书笔记之《The Art of Readable Code》part 1
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9117485.html
Copyright © 2011-2022 走看看