数据流的第K大数值

news/2024/5/19 6:24:48 标签: 堆排序, 数据结构, 算法, c++, leetcode

剑指 Offer II 059. 数据流的第 K 大数值 - 力扣(LeetCode) (leetcode-cn.com)

#define MIN 0x80000000
class KthLargest {
    int* minHeap;
    int K;
public:
    KthLargest(int k, vector<int>& nums) {
        K = k;
        minHeap = new int[k + 1];
        int size = nums.size();
        int ini_scale = min(size, k);
        for (int i = 1; i <= ini_scale; ++i) minHeap[i] = nums[i - 1];
        size <= k ? fill(size + 1, k + 1) : add(nums, k, size);
    }

    int fill(int begin, int end) {
        for (int i = begin; i != end; ++i) minHeap[i] = MIN;
        return effervesce();
    }

    int add(vector<int>& nums, int begin, int end) {
        effervesce();
        for (int i = begin; i != end; ++i) add(nums[i]);
        return 0;
    }

    int add(int val) {
        return val < minHeap[1] ? minHeap[1] : sink(val, 1);
    }

    int effervesce() {
        for (int pos = K / 2; pos; --pos) sink(minHeap[pos], pos);
        return 0;
    }
    //核心代码
    int sink(int pebble, int pos) {
        int bubble;
        while ((bubble = pos * 2) <= K) {
            bubble != K && minHeap[bubble + 1] < minHeap[bubble] ? ++bubble : 0;
            if (pebble <= minHeap[bubble]) break;
            minHeap[pos] = minHeap[bubble];
            pos = bubble;
        }
        minHeap[pos] = pebble;
        return minHeap[1];
    }
};


http://www.niftyadmin.cn/n/1817354.html

相关文章

【达内课程】自定义控件(走势图)

控件选择顺序&#xff1a;原生&#xff0c;开源&#xff0c;自定义控件 今天做一个类似于股票走势图的控件&#xff0c;效果图&#xff1a; 首先先了解下自定义控件的执行流程 新建CustomView CustomView //继承View或View的子类&#xff0c;就是自定义控件 public class …

【达内课程】自定义控件(字幕移动)

创建CustomSurfaceView public class CustomSurfaceView extends SurfaceView {int viewWidth,viewHeight;//管理surfaceviewSurfaceHolder surfaceHolder;public CustomSurfaceView(Context context, AttributeSet attrs) {super(context, attrs);surfaceHolder getHolder()…

【达内课程】自定义控件(下拉刷新)

这一节要实现的效果是下拉刷新 首先需要一个布局头部listview_header <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"andro…

Android 性能优化—— 启动优化

应用启动速度 一个应用App的启动速度能够影响用户的首次体验&#xff0c;启动速度较慢(感官上)的应用可能导致用户再次开启App的意图下降&#xff0c;或者卸载放弃该应用程序 本文将从两个方向优化应用的启动速度 : 视觉体验优化代码逻辑优化 视觉优化 应用程序启动有三种…

Android启动界面SplashActivity的实现方法

实现 创建欢迎页SplashActivity public class SplashActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_splash);Handler handler new Handler();ha…

关于编译器的一些常识性知识

编译器基于编程语言的规则、目标机器的指令集和操作系统遵循的惯例&#xff0c;经过一系列的阶段生成机器代码。GCC C语言编译器以汇编代码的形式产生输出&#xff0c;汇编代码是机器代码的文本表示&#xff0c;给出程序中的每一条指令。 以适当的命令行选项调用编译器&#x…

Android中如何计算 App 的启动时间

adb命令统计 应用第一次启动 也就是我们常说的冷启动,这时候你的应用程序的进程是没有创建的. 这也是大部分应用的使用场景.用户在桌面上点击你应用的 icon 之后,首先要创建进程,然后才启动 MainActivity 使用以下命令行可以获取启动时间 adb shell am start -W packagename…