阿里 C++面试,算法题没做出来,,,

news2024/11/28 23:48:13

我本人是非科班学 C++ 后端和嵌入式的。在我面试的过程中,竟然得到了阿里​ C++ 研发工程师的面试机会。因为,阿里主要是用 Java 比较多,C++ 的岗位比较少​,所以感觉这个机会还是挺难得的。

阿里 C++ 研发工程师面试考了我一道类似于快速排序算法的算法题,虽然我算法题又一次没做出来然后面试挂了。

题目描述:

题号:215

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

解题思路:

思路一:快排变体(快速选择)

快速选择算法,这是快速排序算法的一种变种。快速选择算法可以在平均情况下以O(n)的时间复杂度找到数组中的第k个最小(或最大)元素。

步骤如下:

  1. 选择一个基准元素:我们可以随机选择一个元素作为基准,或者选择数组的第一个、最后一个或中间的元素。

  2. 分区:根据基准元素对数组进行分区,使得所有小于基准的元素都在基准的左边,所有大于基准的元素都在基准的右边。

  3. 判断基准元素的位置:如果基准元素正好是第k个最大的元素(从0开始计数),则直接返回该元素。如果基准元素的位置大于k,则在基准的左边部分继续寻找;如果基准元素的位置小于k,则在基准的右边部分继续寻找,并调整k的值。

  4. 递归:在选定的部分中重复上述步骤,直到找到第k个最大的元素。

时间复杂度:O(N) 

空间复杂度:O(log N)

C++

// C++
class Solution {
public:
    int quickselect(vector<int> &nums, int l, int r, int k) {
        if (l == r)
            return nums[k];
        int partition = nums[l], i = l - 1, j = r + 1;
        while (i < j) {
            do i++; while (nums[i] < partition);
            do j--; while (nums[j] > partition);
            if (i < j)
                swap(nums[i], nums[j]);
        }
        if (k <= j)return quickselect(nums, l, j, k);
        else return quickselect(nums, j + 1, r, k);
    }
​
    int findKthLargest(vector<int> &nums, int k) {
        int n = nums.size();
        return quickselect(nums, 0, n - 1, n - k);
    }
};

go

// go
func findKthLargest(nums []int, k int) int {
    n := len(nums)
    return quickselect(nums, 0, n - 1, n - k)
}
​
func quickselect(nums []int, l, r, k int) int{
    if (l == r){
        return nums[k]
    }
    partition := nums[l]
    i := l - 1
    j := r + 1
    for (i < j) {
        for i++;nums[i]<partition;i++{}
        for j--;nums[j]>partition;j--{}
        if (i < j) {
            nums[i],nums[j]=nums[j],nums[i]
        }
    }
    if (k <= j){
        return quickselect(nums, l, j, k)
    }else{
        return quickselect(nums, j + 1, r, k)
    }
}

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

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

相关文章

深度学习-22-基于keras的十大经典算法之深度神经网络DNN

文章目录 1 深度神经网络(DNN)1.1 DNN简介1.2 DNN基本结构2 模拟应用2.1 构建模型2.2 训练模型2.3 模型预测3 鸢尾花数据集3.1 加载数据3.2 构建模型3.3 训练模型3.4 模型预测4 问题及解决5 参考附录1 深度神经网络(DNN) 1.1 DNN简介 背景:深度神经网络(DNN)也叫多层感…

歌曲怎么去掉原唱只留伴奏?创作无界,轻松获取伴奏音轨

在音乐制作、翻唱或是卡拉OK等场合&#xff0c;我们经常需要歌曲的伴奏版本&#xff0c;即去掉原唱声音&#xff0c;只保留背景音乐的部分。然而&#xff0c;并非每首歌曲都会官方发布伴奏版本&#xff0c;这时我们就需要借助一些技术手段来实现这一目标。本文将介绍几种常见的…

linux线程 | 同步与互斥(上)

前言&#xff1a;本节内容主要是线程的同步与互斥。 本篇文章的主要内容都在讲解互斥的相关以及周边的知识。大体的讲解思路是通过数据不一致问题引出锁。 然后谈锁的使用以及申请锁释放锁的原子性问题。 那么&#xff0c; 废话不多说&#xff0c; 现在开始我们的学习吧&#x…

使用OpenCV实现基于EigenFaces的人脸识别

引言 人脸识别技术近年来得到了飞速的发展&#xff0c;它被广泛应用于安全监控、门禁系统、智能设备等领域。其中&#xff0c;基于特征脸&#xff08;EigenFaces&#xff09;的方法是最早期且较为经典的人脸识别算法之一。本文将介绍如何使用Python和OpenCV库实现一个简单的人…

【LeetCode】每日一题 2024_10_15 三角形的最大高度(枚举、模拟)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;三角形的最大高度 代码与解题思路 久违的简单题 这道题读完题目其实不难想到有两条路可以走&#xff1a; 1、题目很明显只有两种情况&#xff0c;枚举是第一个球是红球还是蓝球这两种情…

导数的概念及在模型算法中的应用

一. 导数概念与计算 1. 导数的物理意义&#xff1a; 瞬时速率。一般的&#xff0c;函数yf(x)在x处的瞬时变化率是 2. 导数的几何意义&#xff1a; 曲线的切线&#xff0c;当点趋近于P时&#xff0c;直线 PT 与曲线相切。容易知道&#xff0c;割线的斜率是当点趋近于 P 时&…

UE5学习笔记25-游戏中时间同步

一、原因 1.由于网络问题会导致服务器上的时间和客户端上获得的时间不一致 二、解决方法 在程序启动时向服务器请求服务器的时间返回给客户端并获得客户端发送消息的往返的时间&#xff0c;在获得客户端上的时间&#xff0c;用服务器上获得的时间加上往返时间减去客户端上的时…

稳字诀! 洞见 强者的社交格局:从不恋战——早读(逆天打工人爬取热门微信文章解读)

都是文字 引言Python 代码第一篇 洞见 强者的社交格局&#xff1a;从不恋战第二篇 稳字诀结尾 引言 今天很奇怪 一直都挺烦造的 好像有很多事情忙 但是就是忙着找不定 不能定下心来 主要还是在股市 其他方面应该没啥 计划表还是不够给力 没办法把心在约定住 稳字诀 勤燃香,奋…

深入 IDEA 字节码世界:如何轻松查看 .class 文件?

前言&#xff1a; 作为一名 Java 开发者&#xff0c;理解字节码对于优化程序性能、调试错误以及深入了解 JVM 运行机制非常重要。IntelliJ IDEA 作为最流行的开发工具之一&#xff0c;为开发者提供了查看 .class 文件字节码的功能。在本文中&#xff0c;我将带你一步步探索如何…

在 Spring 中使用 @EhCache 注解作为缓存

文章目录 项目概况项目设置一个简单的 RESTful Web 服务Spring 整合 EhCache第 1 步&#xff1a;更新依赖项以使用 EhCache Spring 注解第 2 步&#xff1a;设置自定义缓存管理器第 3 步&#xff1a;配置 EhCache第 4 步&#xff1a;测试缓存 刷新缓存总结推荐阅读文章 EhCache…

AD报错failed to add class member\net

什么原因导致的我到现在还没弄懂&#xff0c;总之解决方法是在PCB端删除所有现有的并且可删除的nets与components。下次问题复现了再补充截图&#xff08;不想再遇到了球球了这种玄学问题&#xff09;。 网络截图&#xff1a; 解决步骤&#xff1a;设计->类 把可删除的网络…

【论文翻译】HTVGNN:一种用于交通流量预测的混合时间变化图神经网络

题目A Novel Hybrid Time-Varying Graph Neural Network For Traffic Flow Forecasting论文链接https://arxiv.org/pdf/2401.10155v4关键词交通流预测&#xff0c;图神经网络&#xff0c;Transformer&#xff0c;多头自注意力 摘要 实时且精确的交通流量预测对于智能交通系统的…

OpenAI的Swarm是一个实验性质的多智能体编排框架

先上文档&#xff0c;然后解释&#xff0c;然后是代码 OpenAI的Swarm是一个实验性质的多智能体编排框架&#xff0c;旨在简化多智能体系统的构建、编排和部署。以下是对Swarm的详细介绍&#xff1a; 一、核心概念和特点 智能体&#xff08;Agent&#xff09;&#xff1a; Swar…

目标检测——Libra R-CNN算法解读

论文&#xff1a;Libra R-CNN: Towards Balanced Learning for Object Detection (2019.4.4) 作者&#xff1a;Jiangmiao Pang, Kai Chen, Jianping Shi, Huajun Feng, Wanli Ouyang, Dahua Lin 链接&#xff1a;https://arxiv.org/abs/1904.02701 代码&#xff1a;https://git…

计算机毕业设计 基于Python的汽车销售管理系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Android Settings 设置项修改

Settings 设置项 在 Android 系统上,WRITE_SETTINGS 这个权限从 API 1 就已经开始有了。 通过在 app 中设置权限 android.permission.WRITE_SETTINGS 允许 app 读/写 系统设置。 在官方文档的描述中,还有一段注意事项: Note: If the app targets API level 23 or higher,…

live2d 实时虚拟数字人形象页面显示,对接大模型

live2dSpeek 测试不用gpu可以正常运行 https://github.com/lyz1810/live2dSpeek 运行的话还需要额外下载https://github.com/lyz1810/edge-tts支持语音 ## 运行live2dSpeek >npm install -g http-server >http-server . ## 运行edge-tts python edge-tts.py

前端布局与响应式设计综合指南(二)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Css篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Css篇专栏内容:前端布局与响应式设计综合指南(二) 目录 23、行内元素和块级元素&#xff1f;img算什么&…

【全网最全】AI产品经理面试高频100题答案解析

详细的目录如下&#xff0c;需要的小伙伴可以详细看一下~ 第一章&#xff1a;机器学习和深度学习的关系 第二章&#xff1a;机器学习7大经典算法 算法一&#xff1a;K近邻算法【分类算法】 1.1 KNN 算法的实现原理 1.2 KNN应用场景举例&#xff1a;预测候选人能不能拿到 O…

DVWA | Files Upload(文件上传)通关笔记

概念 **文件上传漏洞**是网络安全中常见的漏洞之一&#xff0c;攻击者可以利用该漏洞上传恶意文件&#xff0c;进而在服务器上执行恶意代码、绕过权限验证或获取敏感数据。文件上传漏洞主要发生在允许用户上传文件的Web应用程序中&#xff0c;比如图像、文档上传功能等。 ###…