面试笔试 场景题(部分总结)

news2024/9/20 0:30:46

文章目录

    • 题目--找出一堆随机数中的前 k 大数字
      • PriorityQueue 类
      • PriorityQueue 常用方法
    • 题目--数组中的第 K 个最大元素

题目–找出一堆随机数中的前 k 大数字

找出一堆随机数中的前 k 数字,找出一堆随机数中的前 k 数字。都一样

方法:快速排序。 最小堆法。

如果不了解堆这个数据结构:点击查看堆

最小堆法:
当数组规模很大时,排序的时间复杂度较高。为了优化,可以使用最小堆(Min-Heap)。在 Java 中可以利用 PriorityQueue 实现一个固定大小为 k 的最小堆来解决问题。

public static void main(String[] args) {
    int[] nums = {57, 32, 56, 20, 54, 99, 47, 8, 35, 23, 30, 29, 63, 69, 58};
    int k = 5; // 前k大

    // 最小堆
    PriorityQueue<Integer> minHeap = new PriorityQueue<>(k);

    // 遍历数组,维护最小堆
    for (int num : nums) {
        minHeap.offer(num);
        if (minHeap.size() > k) {
            minHeap.poll(); // 移除堆顶 即数组第一个元素
        }
    }

    System.out.println("前 " + k + " 大的数: ");
    while (!minHeap.isEmpty()) {
        System.out.print(minHeap.poll() + " ");
    }
}

PriorityQueue 类

PriorityQueue 是 Java 中实现堆(Heap)数据结构的一个重要类,它基于优先级队列(Priority Queue)的概念。它使用来实现,默认是最小堆,即堆顶是队列中最小的元素。也可以通过传递自定义的比较器来实现最大堆。

PriorityQueue的底层实现是使用一个数组来进行节点的存储

PriorityQueue 默认最小堆:
优先级队列表示为平衡二叉堆:queue[n] 的两个子节点为queue[2n+1] 和queue[2(n+1)]。优先级队列按比较器排序,如果比较器为空,则按元素的自然顺序排序:对于堆中的每个节点 n 和 n 的每个后代 d,n <= d。假设队列非空,则具有最小值的元素位于queue[0]中。【默认最小堆】
在这里插入图片描述

PriorityQueue 实现大根堆:
大根堆,则数组第一个元素最大
new PriorityQueue<>(Comparator.reverseOrder()) 传入一个参数即可

 public static void main(String[] args) {
     // 自定义比较器,将 PriorityQueue 变为最大堆
     PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Comparator.reverseOrder());

     maxHeap.offer(10);
     maxHeap.offer(40);
     maxHeap.offer(20);
     maxHeap.offer(30);

     System.out.println("最大堆中的元素:");
     while (!maxHeap.isEmpty()) {
         System.out.print(maxHeap.poll() + " "); // 输出时将从大到小
     }
 }

PriorityQueue 的特性:

  1. 自动排序:

    • PriorityQueue 会根据元素的优先级自动排序,默认排序方式是最小堆,意味着堆顶元素是队列中最小的元素。
    • 如果需要实现最大堆,可以传入一个自定义的比较器,使得元素按照降序排列。
  2. 不允许 null 元素:

    • PriorityQueue 不允许插入 null 元素,否则会抛出 NullPointerException
      在这里插入图片描述
  3. 线程不安全:

    • PriorityQueue 不是线程安全的。如果需要在多线程环境下使用,可以使用 PriorityBlockingQueue
  4. 时间复杂度:

    • 插入(offer())和删除最小元素(poll())的时间复杂度均为 O(log n),其中 n 是队列的大小。
    • 获取队列中最小元素的时间复杂度是 O(1),即通过 peek() 方法。

PriorityQueue 常用方法

方法名描述
add(E e)插入元素 e 到队列中,若违反队列容量限制,抛出 IllegalStateException
offer(E e)插入元素 e 到队列中,返回 true 表示插入成功,若违反容量限制返回 false
poll()获取并移除队列的堆顶元素(即最小元素),若队列为空则返回 null
peek()获取但不移除队列的堆顶元素(即最小元素),若队列为空则返回 null
remove(Object o)从队列中移除指定的元素 o
isEmpty()检查队列是否为空。
size()返回队列的元素个数。
clear()清空队列中的所有元素。
contains(Object o)检查队列中是否包含指定的元素 o

题目–数组中的第 K 个最大元素

这个题也可以利用 PriorityQueue 秒了
在这里插入图片描述

public int findKthLargest(int[] nums, int k) {
      PriorityQueue<Integer> queue = new PriorityQueue<>();
      for (int num : nums) {
          queue.offer(num);
          if (queue.size() > k) {
              queue.poll();
          }
      }
      return queue.peek();
  }

❤觉得有用的可以留个关注~❤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【springsecurity】使用PasswordEncoder加密用户密码

目录 1. 导入依赖2. 配置 PasswordEncoder3. 使用 PasswordEncoder 加密用户密码4. 使用 PasswordEncoder 验证用户密码 1. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifac…

docker部署NginxProxyManager

1.效果展示 有啥用&#xff1f;&#xff0c; 能把域名代理到 117.xx.xx.xx:3000 服务器上 而不用写一堆的location / { proxy… } 2.步骤 2.1往期docker安装 docker和docker-compose安装脚本-CSDN博客 2.2创建目录 mkdir ~/npm #创建一个目录用来安装此服务 cd ~/npm #…

兴业周报|“一套房子不留”的马斯克 在北京买房了?

稀有房源&#xff1a;标的物位于北京五环内&#xff0c;真正的城市别墅。中间建筑三区“全网无二手”&#xff0c;二手房市场无在售房源。 高性价比&#xff1a;标的物市场价2800万&#xff0c;起拍价1124万&#xff0c;四折上拍&#xff0c;四室两厅南北通透&#xff0c;建面…

基于SpringBoot的口腔管理平台

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展示 首页 会员管理 病例就诊…

RuoYi-Vue若依框架-系统监控内定时任务的使用

定时任务 之前定时任务是在后端代码内使用cron表达式对对应的接口方法按照表达式执行&#xff0c;现在可以在框架内自行添加任务&#xff0c;包括自定义任务名&#xff0c;在调用方法内写对应实体类.接口方法名&#xff0c;cron表达式&#xff0c;添加好后即可执行 调用方法…

业余考什么证书比较实用?

在业余时间里&#xff0c;获得一些有用的证书不仅能提升你的专业素养&#xff0c;还能增强你在职场上的竞争力。 特别是职业技能证书和行业认证证书&#xff0c;这两者受到了广大职场人士的高度关注。 一、业余时间考取的实用证书 行业认证证书主要针对特定行业或职业&#…

16 训练自己语言模型

在很多场景下下&#xff0c;可能微调模型并不能带来一个较好的效果。因为特定领域场景下&#xff0c;通用话模型过于通用&#xff0c;出现多而不精。样样通样样松&#xff1b;本章主要介绍如何在特定的数据上对模型进行预训练&#xff1b; 训练自己的语言模型&#xff08;从头开…

AT3340-6T杭州中科微BDS定位授时板卡应用领域

AT3340-6T是一款高性能多系统卫星定位安全授时板卡&#xff0c;具有高灵敏度、高精度、抗干扰、低功耗等优势&#xff0c;可以满足电力授时、通信授时和金融授时等领域的应用。 电文完好性检测与告警 AT3340-6T 板卡支持电力授时标准要求的 UTC 信息异常告警&#xff0c;和卫…

基于Spring Boot的高校选课平台的设计与实现81917

目 录 1 绪论 1.1研究背景与意义 1.2研究内容 1.3论文结构与章节安排 2 高校选课平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 高校选课…

【OpenCV-图像梯度】Scharr算子和laplacian算子

1 图像梯度-Sobel算子 import cv2 # 导入 OpenCV 库# 读取灰度图像 img cv2.imread(./img/pie.png, cv2.IMREAD_GRAYSCALE) # 使用 imread 函数读取图像文件&#xff0c;路径为 ./img/pie.png # cv2.IMREAD_GRAYSCALE 表示以灰度模式读取图像# 显示图像 cv2.imshow("im…

Muduo库介绍及使用

文章目录 MuduoMuduo库是什么Moduo 库的原理Muduo 库常见接口TcpServer类EventLoop类TcpConnection类TcpClient类Buffer类 Muduo库实现一个简单英译汉服务器和客⼾端 Muduo Muduo库是什么 Muduo由陈硕⼤佬开发&#xff0c;是⼀个基于⾮阻塞IO和事件驱动的C⾼并发TCP⽹络编程库…

SpringSecurity原理解析(三):请求流转过程

1、当web系统启动的时候SpringSecurity做了哪些事情&#xff1f; 当web系统启动的时候会加载WEB-INF下的web.xml文件&#xff0c;在web.xml主要配置了下边几块的 内容&#xff0c;分别是&#xff1a; 1&#xff09;加载classpath路径下的配置文件&#xff08;包括SpringSecurit…

开关电源自动化测试有哪些流程和步骤?-天宇微纳

开关电源自动化测试的总体流程包括测试前的准备、测试过程中的具体步骤和测试后的数据处理三大部分。 以纳米软件ATECLOUD平台测试为例&#xff1a; ‌测试前的准备‌ ‌连接设备和仪器‌&#xff1a;通过LAN通讯总线、测试夹具以及其它线缆将需要测试的电源模块连接到纳米服…

【C语言】指针深入讲解(下)

目录 前言回调函数回调函数的概念回调函数的使用 qsort函数的使用和模拟实现qsort函数的介绍qsort函数的使用qsort函数模拟实现 前言 今天我们来学习指针最后一个知识点回调函数&#xff0c;这个知识点也很重要&#xff0c;希望大家能坚持学习下去。 没学习之前指针知识内容的…

k8s的配置管理

一、配置管理分为两种&#xff1a; 1. 加密配置&#xff1a;用来保存密码和token密钥对以及其它敏感的k8s资源。 2.应用配置&#xff1a;我们需要定制化的给应用进行配置&#xff0c;我们需要把定制好的配置文件同步到pod当中的容器。 二、加密配置 1.secret三种类型&#xf…

WPS取消首字母自动大写

WPS Office&#xff08;12.1.0.17827&#xff09; ① 点击文件&#xff0c;在文件中找到选项 ② 选择编辑&#xff0c;取消勾选

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利&#xff0c;不是随便说说&#xff0c;诸葛亮六出祁山&#xff0c;连关中陇右的几座小城都攻不下来&#xff0c;行军山高路险&#xff0c;无法携带和建造攻城器械&#xff0c;是最难的&#xff0c;所以在汉中&#xff0c;无论从哪一方进攻&#xff0c;防守方…

计算机为啥选中二进制?

坊间传闻&#xff0c;当年&#xff0c;彷徨少年computer有幸读到东方奇书《道德经》中一段&#xff1a;“道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物。”忽然灵光乍现&#xff0c;做五体投地状。“啊门、主啊&#xff0c;我get到了&#xff0c;狗屁二生三…

「滚雪球学MyBatis」教程导航帖(已完结)

写在前面 我是bug菌&#xff0c;CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家&#xff0c;C站博客之星Top30&#xff0c;华为云2023年度十佳博主&#xff0c;掘金多年度人气作者Top40&#xff0c;掘金等各大社区平台签约作者&#xff0c;51CTO年度博…

python爬虫爬取淘宝商品比价||淘宝商品详情API接口

最近在学习北京理工大学的爬虫课程&#xff0c;其中一个实例是讲如何爬取淘宝商品信息&#xff0c;现整理如下&#xff1a; 功能描述&#xff1a;获取淘宝搜索页面的信息&#xff0c;提取其中的商品名称和价格 探讨&#xff1a;淘宝的搜索接口 翻页的处理 技术路线:requests‐…