当前位置: 首页 > news >正文

C/C++每日一练(20230310)

目录

1. 用栈实现队列  ★★

2. 单词搜索 II  ★★★

3. 直线上最多的点数  ★★★


1. 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

说明:

  • 你只能使用标准的栈操作 —— 也就是只有 push to toppeek/pop from topsize, 和 is empty 操作是合法的。
  • 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

进阶:

  • 你能否实现每个操作均摊时间复杂度为 O(1) 的队列?换句话说,执行 n 个操作的总时间复杂度为 O(n) ,即使其中一个操作可能花费较长时间。

示例:

输入:
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 1, 1, false]
解释: 
MyQueue myQueue = new MyQueue(); 
myQueue.push(1); // queue is: [1] 
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue) 
myQueue.peek(); // return 1 
myQueue.pop(); // return 1, queue is [2] 
myQueue.empty(); // return false

提示:

  • 1 <= x <= 9
  • 最多调用 100 次 pushpoppeek 和 empty
  • 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)

代码:

#include <bits/stdc++.h>
using namespace std;class MyQueue
{
public:/** Initialize your data structure here. */stack<int> a, b;MyQueue(){}/** Push element x to the back of queue. */void push(int x){while (!b.empty()){a.push(b.top());b.pop();}b.push(x);while (!a.empty()){b.push(a.top());a.pop();}}/** Removes the element from in front of queue and returns that element. */int pop(){int res = b.top();b.pop();return res;}/** Get the front element. */int peek(){return b.top();}/** Returns whether the queue is empty. */bool empty(){return b.empty();}
};int main()
{MyQueue myQueue = MyQueue(); myQueue.push(1); // queue is: [1] myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue) cout << myQueue.peek() << endl; // return 1 cout << myQueue.pop() << endl; // return 1, queue is [2] myQueue.empty(); // return falsereturn 0;
}

输出:

1
1


2. 单词搜索 II

给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。

单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。

示例 1:

输入:board = [["o","a","a","n"],["e","t","a","e"],["i","h","k","r"],["i","f","l","v"]], words = ["oath","pea","eat","rain"]
输出:["eat","oath"]

示例 2:

输入:board = [["a","b"],["c","d"]], words = ["abcb"]
输出:[]

提示:

  • m == board.length
  • n == board[i].length
  • 1 <= m, n <= 12
  • board[i][j] 是一个小写英文字母
  • 1 <= words.length <= 3 * 10^4
  • 1 <= words[i].length <= 10
  • words[i] 由小写英文字母组成
  • words 中的所有字符串互不相同

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:struct Node{bool isflag = false;Node *next[27] = {};};set<string> res;vector<string> ans;Node *root;vector<int> dirx{0, 0, 1, -1};vector<int> diry{1, -1, 0, 0};bool flag;void createtree(vector<string> &words){root = new Node();for (auto w : words){Node *p = root;for (int i = 0; i < w.length(); i++){if (p->next[w[i] - 'a'] == NULL){p->next[w[i] - 'a'] = new Node();}p = p->next[w[i] - 'a'];}p->isflag = true;}}void backtrack(vector<vector<char>> &board, vector<vector<bool>> visited, int row, int col, Node *roott, string cur){cur += board[row][col];roott = roott->next[board[row][col] - 'a'];if (!roott)return;if (roott->isflag == true){res.insert(cur);flag = true;}visited[row][col] = true;for (int i = 0; i < 4; i++){int nx = row + dirx[i];int ny = col + diry[i];if (nx < 0 || ny < 0 || nx >= board.size() || ny >= board[0].size())continue;if (visited[nx][ny] == false){backtrack(board, visited, nx, ny, roott, cur);}}}vector<string> findWords(vector<vector<char>> &board, vector<string> &words){if (board.size() == 0 || words.size() == 0)return ans;createtree(words);for (int i = 0; i < board.size(); i++){for (int j = 0; j < board[i].size(); j++){Node *p = root;flag = false;if (p->next[board[i][j] - 'a']){vector<vector<bool>> visited{board.size(), vector<bool>(board[0].size(), false)};backtrack(board, visited, i, j, p, "");}}}set<string>::iterator it;for (it = res.begin(); it != res.end(); it++)ans.push_back(*it);return ans;}
};int main()
{Solution s;vector<vector<char>> board = {{'o','a','a','n'},{'e','t','a','e'},{'i','h','k','r'},{'i','f','l','v'}};vector<string> words = {"oath","pea","eat","rain"};for (auto str: s.findWords(board, words))cout << str << " ";cout << endl;return 0;
}

输出:

eat oath


3. 直线上最多的点数

给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。

示例 1:

输入:points = [[1,1],[2,2],[3,3]]
输出:3

示例 2:

输入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
输出:4

提示:

  • 1 <= points.length <= 300
  • points[i].length == 2
  • -10^4 <= xi, yi <= 10^4
  • points 中的所有点 互不相同

代码:

#include <bits/stdc++.h>
using namespace std;
struct Point
{int x;int y;Point() : x(0), y(0) {}Point(int a, int b) : x(a), y(b) {}
};
class Solution
{
public:int maxPoints(vector<Point> &points){int ans = 0;for (int i = 0; i < points.size(); ++i){map<pair<int, int>, int> m;int p = 1;for (int j = i + 1; j < points.size(); ++j){if (points[i].x == points[j].x && (points[i].y == points[j].y)){++p;continue;}int dx = points[j].x - points[i].x;int dy = points[j].y - points[i].y;int d = gcd(dx, dy);++m[{dx / d, dy / d}];}ans = max(ans, p);for (auto it = m.begin(); it != m.end(); ++it){ans = max(ans, it->second + p);}}return ans;}int gcd(int a, int b){return (b == 0) ? a : gcd(b, a % b);}
};int main()
{Solution s;vector<Point> points = {{1,1},{2,2},{3,3}};cout << s.maxPoints(points) << endl;points = {{1,1},{3,2},{5,3},{4,1},{2,3},{1,4}};cout << s.maxPoints(points) << endl;return 0;
}

输出:

3
4


🌟 每日一练刷题专栏

 持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

 收藏,你的青睐是我努力的方向! 

✏️ 评论,你的意见是我进步的财富!  

C/C++ 每日一练 ​专栏

​​

Python 每日一练 专栏

 

相关文章:

C/C++每日一练(20230310)

目录 1. 用栈实现队列 ★★ 2. 单词搜索 II ★★★ 3. 直线上最多的点数 ★★★ 1. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; v…...

Go语言基础知识

常量//定义方式 const a int12;//指定变量类型 const b12;//不指定变量类型&#xff0c;由编译时go自动确认 const(//多行定义方式a12b23 ) //说到const&#xff0c;不得不得不提到的一个参数iota,初始值为0&#xff0c;在用const多行定义的方式中&#xff0c; 如果第一行定义了…...

案例06-没有复用思想的接口和sql--mybatis,spring

目录一、背景二、思路&方案问题1优化问题2优化三、总结四、升华一、背景 写这篇文章的目的是通过对没有复用思想接口的代码例子优化告诉大家&#xff0c;没有复用思想的代码不要写&#xff0c;用这种思维方式和习惯来指导我们写代码。 项目中有两处没有复用思想代码&#…...

如何将项目部署到服务器:从选择服务器到维护应用程序的全流程指南

将项目部署到服务器是一个重要的技能&#xff0c;对于开发人员来说&#xff0c;它是必不可少的。在本文中&#xff0c;我将介绍一些关于如何将项目部署到服务器的最佳实践。一、选择服务器在部署项目之前&#xff0c;你需要先选择一个适合你的服务器。如果你已经有一个可用的服…...

怎么做才能不丢消息?

现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制&#xff0c;可以做到在消息传递的过程中&#xff0c;即使发生网络中断或者硬件故障&#xff0c;也能确保消息的可靠传递、不丢消息。 绝大部分丢消息的原因都是由于开发者不熟悉消息队列&#xff0c;没有正确使用…...

前端基础(十六)_数组对象

数组对象 1、创建数组 // 字面量创建const arr [1, 2, 3, 4, 5, 6]// 构造函数创建const arr2 new Array(1, 2, 3, 4, 5, 6)const arr3 Array(1, 2, 3, 4, 5, 6)2.push (从数组末尾添加元素) a.数组.push(要添加进数组的数组项) b.作用&#xff1a;将要添加的数组项 添加到…...

数据结构-带头双向循环链表

前言&#xff1a; 链表有很多种&#xff0c;上一章结&#xff0c;我复盘了单链表&#xff0c;这一章节&#xff0c;主要针对双链表的知识点进行&#xff0c;整理复盘&#xff0c;如果将链表分类的话&#xff0c;有很多种&#xff0c;我就学习的方向考察的重点&#xff0c;主要…...

3 问 6 步,极狐GitLab 帮助企业构建高效、安全、合规的 DevSecOps 文化

本文来源&#xff1a;about.gitlab.com 作者&#xff1a;Vanessa Wegner 译者&#xff1a;极狐(GitLab) 市场部内容团队 &#x1f512; 安全为何重要&#xff1f;此前&#xff0c;我们分享了&#xff1a; 1. 2023年DevOps发展趋势&#x1f449;重磅&#xff01;GitLab 提出五大…...

SPA(单页应用)知多少

单页面应用程序将所有的活动局限于一个Web页面中&#xff0c;在该Web页面初始化时加载相应的HTML、JavaScript 和 CSS。一旦页面加载完成&#xff0c;单页面应用不会因为用户的操作而进行页面的重新加载或跳转。取而代之的是利用 JavaScript 动态的变换HTML的内容&#xff0c;从…...

Selenium实战【远程控制】【JAVA爬虫】

简介 Selenium RemoteWebDriver是Selenium WebDriver的一个扩展,它可以将测试运行在远程机器上的浏览器中。 使用RemoteWebDriver,可以在本地机器上编写测试脚本,然后将测试请求发送到远程机器上的浏览器中执行。这使得测试可以在多个不同的机器上并行运行,从而加快测试的…...

图片动画化应用中的动作分解方法

作者 | FesianXu 前言 最近基于AI的换脸应用非常的火爆&#xff0c;同时也引起了新一轮的网络伦理大讨论。如果光从技术的角度看&#xff0c;对于视频中的人体动作信息&#xff0c;通常可以通过泰勒展开分解成零阶运动信息与一阶运动信息&#xff0c;如文献[1,2]中提到的&…...

我又和redis超时杠上了

背景 经过上次redis超时排查&#xff0c;并联系云服务商解决之后&#xff0c;redis超时的现象好了一阵子&#xff0c;但是最近又有超时现象报出&#xff0c;但与上次不同的是&#xff0c;这次超时的现象发生在业务高峰期&#xff0c;在简单看过服务器的各项指标以后&#xff0…...

一文带你吃透MySQL数据库!

文章目录1. 索引2. 事务3. 存储引擎4. 锁机制5. MySQL其他知识点文章字数大约1.27万字&#xff0c;阅读大概需要42分钟&#xff0c;建议收藏后慢慢阅读&#xff01;&#xff01;&#xff01;1. 索引 为什么使用索引 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据…...

[学习笔记] 2. 数据结构

数据结构视频地址&#xff1a;https://www.bilibili.com/video/BV1uA411N7c5 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。简单来说&#xff0c;数据结构就是设计数据以何种方式组织并存储在计算机中。 比如:列表、集合与字…...

[学习笔记] 3. 算法进阶

算法进阶视频地址&#xff1a;https://www.bilibili.com/video/BV1uA411N7c5 1. 贪心算法 贪心算法&#xff08;又称贪婪算法&#xff09;&#xff0c;是指在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑 —— 所做…...

做自媒体真的能赚到钱吗?真的能赚到几十万吗?

自媒体在当今社会已经成为一个热门话题&#xff0c;越来越多的人开始尝试做自媒体&#xff0c;希望能够通过自媒体赚到钱。但是&#xff0c;做自媒体真的能赚到钱吗&#xff1f;能赚到几十万吗&#xff1f;下面我们来一一解答。 首先&#xff0c;做自媒体确实可以赚到钱。随着互…...

QT使用QListWidget显示多张图片

Qt系列文章目录 文章目录Qt系列文章目录前言一、QListWidget 和 QListView 的差异二、显示效果1.操作工作区界面1.主界面头文件2. 主界面实现界面2.左边图片目录展示界面1.图片目录头文件2.图片目录实现文件2.属性窗口区1.属性窗口头文件2.属性窗口实现文件3 源码下载前言 QLi…...

python 打印进度条

import time recv_size0 total_size1024while recv_size < total_size:time.sleep(0.1)recv_size1024#打印进度条percentrecv_size / total_sizeres int(50 * percent) * #print(\r[%-50s] %d%% % (res,int(100 * percent)),end) # end 打印以‘’结尾&#xff0c;打印% 需…...

【微小说】大学日记

感谢B站up主“看见晴晴了吗”的视频提供的灵感&#xff0c;链接&#xff1a;https://www.bilibili.com/video/BV1tA411m7Kc 整篇故事完全虚构&#xff0c;如有雷同纯属巧合。 2019年8月25日 星期天 晴 今天是我进入大学的第一天。早晨&#xff0c;我画了美美的妆&#xff0c;穿…...

ArrayList扩容机制解析

1.ArrayList的成员变量 首先我们先了解一下ArrayList的成员变量。 // 默认初始化大小 private static final int DEFAULT_CAPACITY 10;// 空数组&#xff08;用于空实例&#xff09; // 比如List<String> ls new ArrayList<>(0); private static final Object[…...

终极指南:Sunshine开源游戏串流服务器完整配置与实战应用

终极指南&#xff1a;Sunshine开源游戏串流服务器完整配置与实战应用 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款功能强大的自托管游戏串流服务器&#xff0c;专…...

Claude智能优化器:提升大模型工具调用准确性的工程实践

1. 项目概述与核心价值最近在折腾大语言模型应用开发时&#xff0c;我一直在思考一个问题&#xff1a;如何让像Claude这样的顶级AI助手&#xff0c;在回答复杂问题时&#xff0c;能更稳定、更聪明地调用外部工具和函数&#xff1f;直接调用API&#xff0c;模型有时会“犯懒”或…...

告别“检测即损伤”:激光加工重塑电路检测与修复新路径

随着芯片互联兴起&#xff0c;电路结构日趋复杂&#xff0c;隐性缺陷对良率的威胁显著增加。如何在不破坏电路的前提下发现短路、断路等问题并对其进行精准处置&#xff0c;是半导体集成电路领域提升器件性能与良率的首要任务。在这一需求驱动下&#xff0c;激光技术凭借其特性…...

XSP25全协议 100W PD快充诱骗芯片_串口读电压电流信息

在Type-C快充技术普及的今天&#xff0c;快充诱骗协议芯片成为小家电、智能硬件、锂电设备等产品实现高效取电的核心器件。XSP25作为汇铭达推出的Type‑C受电端&#xff08;Sink&#xff09;多功能快充取电芯片&#xff0c;以全协议兼容、100W大功率输出、串口智能通信、极简外…...

DLP Pico技术与近眼显示系统设计解析

1. DLP Pico技术解析&#xff1a;微镜阵列如何重塑显示未来 在2014年&#xff0c;德州仪器(TI)推出了一项颠覆性的显示技术——基于DLP TRP架构的Pico芯片组。这项技术的核心是一块布满微小铝镜的芯片&#xff0c;每个微镜尺寸仅5.4微米&#xff0c;比人类头发直径的十分之一还…...

从零构建高效项目脚手架:自动化项目初始化与最佳实践

1. 项目概述&#xff1a;一个为开发者准备的“瑞士军刀”式工具集最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫jpKuji/clawstrate。乍一看这个名字&#xff0c;有点摸不着头脑&#xff0c;既不像常见的框架名&#xff0c;也不像某个具体的应用。点进…...

汽车软件化演进:从原生应用到手机集成的技术路径与实战解析

1. 从机械到智能&#xff1a;汽车软件化的十字路口十年前&#xff0c;当福特和通用汽车开始在硅谷和南加州大肆招聘软件工程师时&#xff0c;很多人可能还没意识到&#xff0c;这不仅仅是一次普通的“招兵买马”&#xff0c;而是一场深刻改变汽车工业基因的序曲。2014年那会儿&…...

运营商网络工程师视角:VoWiFi部署中的ePDG与AAA服务器配置要点及避坑指南

运营商网络工程师实战&#xff1a;VoWiFi部署中ePDG与AAA服务器配置的20个关键细节 当运营商开始规划VoWiFi网络时&#xff0c;会议室的白板上总是画满了各种接口和协议栈。但真正决定项目成败的&#xff0c;往往是那些容易被忽略的配置细节——比如IKEv2协商时DH组的选择会怎样…...

5个场景告诉你:为什么你需要这款免费的窗口分辨率神器

5个场景告诉你&#xff1a;为什么你需要这款免费的窗口分辨率神器 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾遇到过这些困扰&#xff1f;游戏内分辨率选项有限&#xff0c;无法满足你对极致画质的…...

如何免费实现iOS设备虚拟定位?iFakeLocation跨平台实用指南

如何免费实现iOS设备虚拟定位&#xff1f;iFakeLocation跨平台实用指南 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation 你是否曾经想过&#xff0c;在舒适…...