这个问题通过减少键方法意味着什么?

问题描述

给出一个包含N个整数的数组,您的任务是:

  • 使用基于1的索引创建最小堆(一一插入元素)。
  • 使用“减小键”方法从第一步创建的堆中删除索引k中存在的元素。
  • 第二步后打印更新的堆。

我特别无法通过测试用例

enter image description here

我得到这个作为输出

enter image description here

这是我的代码

#include <bits/stdc++.h>
using namespace std;

void heapify(vector<int>&v,int idx,int last)
{
   int left = 2*idx;
   int right = left+1;
   int min_idx = idx;

   if(left<=last and v[min_idx]>v[left]) min_idx = left;
   if(right<=last and v[right]<v[min_idx]) min_idx = right;

   if(min_idx != idx)
   {
       swap(v[min_idx],v[idx]);
       heapify(v,min_idx,last);
   }

 }

 void build_min_heap(vector<int>&v)
 {
    int n = v.size()-1;

    for(int i=n/2; i>=0; i--) heapify(v,i,n);
 }

 void print(vector<int>v)
 {
     for(int i=0; i<v.size(); i++) cout<<v[i]<<" ";
     cout<<endl;
 }

 int main()
 {
     int t;
     cin>>t;

    while(t--)
    {
       int n,rm;
       cin>>n>>rm;

       vector<int>v;
       v.reserve(n);

       for(int i=0; i<n; i++) 
       {
           int k;
           cin>>k;
           v.push_back(k);
       }

       build_min_heap(v);
       v.erase(v.begin()-1+rm);
       build_min_heap(v);
       print(v);
  }

   return 0;
 }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)