面试算法题

news/2024/11/16 4:16:37/

1

使用栈实现队列

#include <iostream>
#include <stack>
class MyQueue
{
public:MyQueue() {}void push(int x){in.push(x); // 直接将元素push入in栈}int pop(){int data = peek(); // 先查一遍,就是更新一遍out栈out.pop();return data;}// 查找队列头的元素int peek(){// 首先检查out栈是否为空,如果为空,则将in栈的元素出栈然后入栈outif (out.empty())// 这里刚开始写成当in为空时执行循环了,就会出错while (!in.empty()) // 必须全部将in栈的数据搬到out栈,不然会导致数据混乱{out.push(in.top());in.pop();}return out.top();}bool empty(){return in.empty() && out.empty();}private:std::stack<int> in;std::stack<int> out;
};int main()
{MyQueue que;que.push(1);que.push(2);que.push(3);que.push(4);que.push(2);std::cout << que.pop() << std::endl;std::cout << que.pop() << std::endl;std::cout << que.pop() << std::endl;std::cout << que.pop() << std::endl;std::cout << que.pop() << std::endl;return 0;
}

2

输入一个数组,找到任意一个峰值元素返回其位置,时间复杂度为O(logN)。

#include <iostream>
#include <vector>
/* 输入一个数组,找到任意一个峰值元素(大于其最近左边和右边的元素),返回其位置,时间复杂度是O(logN) */int peak_Index(std::vector<int> &data)
{int left = 0;int right = data.size() - 1;while (left < right){int mid = left + (right - left) / 2;if (data[mid] > data[mid + 1]) // 比右边的数大,那就在mid左边right = mid;               // mid有可能是峰值元素else                           // 比右边数小,那就在mid右边left = mid + 1;            // mid不可能是峰值元素}return left;
}int main()
{std::vector<int> data = {1, 2, 3, 1};std::cout << peak_Index(data) << std::endl;return 0;
}

http://www.ppmy.cn/news/977754.html

相关文章

linux 驱动开发常用知识点与API

linux 驱动开发常用知识点与API 前言笔记正文最后 前言 之前的读书笔记&#xff0c;以.c 文件的方式记录&#xff0c;在这里也以代码的方式记录 笔记正文 /***************************************中断常用API****************************************/ /* flags 是中断处…

Transformer+医学图像最新进展【2023】

Transformer主要用于自然语言处理领域。近年来,它在计算机视觉(CV)领域得到了广泛的应用。医学图像分析(MIA,Medical image analysis)作为机器视觉(CV,Computer Vision)的一个重要分支,也极大地受益于这一最先进的技术。 机构:新加坡国立大学机械工程系、中山大学智能系…

php套用Iframe访问导致cookie跨域session失效问题

一.背景 a网站&#xff08;www.aa.com&#xff09;嵌入b网站 (www.bb.com) 网站&#xff0c;因为跨域原因&#xff0c;其实如果b网站是以aa.com后缀结尾的话是正常的 二.博客参考 https://juejin.cn/post/7123652955282079751 1.上面的试了这个IE的没什么用&#xff08;有可能…

AI Chat 设计模式:9. 命令模式

本文是该系列的第九篇&#xff0c;采用问答式的方式展开&#xff0c;问题由我提出&#xff0c;答案由 Chat AI 作出&#xff0c;灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 介绍下命令模式A.1Q.2 详细说说命令模式适用于啥场景呢A.2Q.3 举一个命令模式的例子&a…

linux LVM磁盘管理

Linux运维过程中经常会遇到扩容的场景&#xff0c;下面做一点简单笔记&#xff0c;所谓好记性不如烂笔头。 1、新建磁盘挂载 &#xff08;1&#xff09;先看看主机上有没有挂载磁盘或挂载的磁盘有没有剩余的。 如下图可以看到这台机器挂了两个盘&#xff0c;一个/dev/sda,这…

Form Generator 扩展子表单组件之表单校验(超详细)

一、form-generator是什么?✨ ⭐️ 🌟 form-generator的作者是这样介绍的:Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 但目前它提供的组件并不能满足我们在项目中的…

WPF实战学习笔记06-设置待办事项界面

设置待办事项界面 创建待办待办事项集合并初始化 TodoViewModel&#xff1a; using Mytodo.Common.Models; using Prism.Commands; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Sy…

Golang 中使用不定数量空格分割字符串的方法

有这样一个使用空格分割字符串的场景&#xff0c;字符串中被分割的子串之间的空格数量不确定&#xff0c;有一个两个或者多个空格&#xff0c;这种场景下&#xff0c;使用最容易想到的 strings.Split 函数就做不到了。本文接下来就介绍几种行之有效的方法。 使用 strings.Fiel…