2024年刷题记录

马上要开始找实习了,又开始重启刷题计划了!加油冲冲冲!刷题的顺序follow代码随想录的60天刷题计划!感谢FuCosmo的总结!之前都是按照C++的语法进行刷题的,这次也同样使用C++。

Day 1 数组

这些题过年前都刷过了,所以过的快一些。通过写一些题解的方式来,帮助自己回顾这些方法,记住一些核心点。

704. 二分查找

  • 训练是否取等号,这里选择的是双边都闭合的空间
  • 对于mid的计算方式,有两种mid = (left + right) / 2或者是mid = left + (left - right) / 2
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1;int mid;while (left <= right) {mid = (left + right) / 2;if (nums[mid] == target){return mid;} else if (nums[mid] < target){left = mid + 1;} else {right = mid - 1;}}return -1;}
};

27. 移除元素

  • 双指针的思想
  • 一个指针用来遍历数组中的所以元素(指向当前将要处理的元素)
  • 一个指针用来记录下一个将要赋值的位置
class Solution {
public:int removeElement(vector<int>& nums, int val) {int i = 0;int j = 0;while (i < nums.size()) {if (nums[i] != val) {nums[j] = nums[i];j++;}i++;}return j;}
};

977. 有序数组的平方

  • 暴力的解放,利用sort函数
    • 基本的语法
      • vector的创建
        • vector<int> ans;
        • vector<int> ans(n);
      • vector中添加元素
        • ans.push_back(num);
      • vector的排序
        • sort(ans.begin(), ans.end());
    • 时间复杂度是 O(nlogn),其中 n 是数组 nums的长度。
    • 空间复杂度是 O(logn),除了存储答案的数组以外,我们需要 O(logn) 的栈空间进行排序
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int i = 0;vector<int> ans;while (i < nums.size()){ans.push_back(nums[i] * nums[i]);i++;}sort(ans.begin(), ans.end());return ans;}
};
  • 双指针的解法
    • 非递减数组,元素当中存在负数
    • 第一个指针指向找到第一个大于等于0的元素
    • 如果第一个指针为0,则不需要第二个指针
    • 反之,第二个指针指向第一个元素左侧的元素
      • 比较左右指针两个元素的大小,逐个加入
      • 这里需要用到三个循环
      • 同时移动两个指针
      • 当一个指针已经移动完,则只移动单侧的指针
    • 时间复杂度是O(n)。其中 n 是数组 nums 的长度。
    • 空间复杂度是O(1)。除了存储答案的数组以外,我们只需要维护常量空间。
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int i = 0;vector<int> ans;for (int num : nums) {if (num < 0) {i++;} else {break;}}if (i == 0) {for (int num : nums) {ans.push_back(num * num);}return ans;} else {int j = i - 1;while (i < nums.size() && j >= 0) {if (nums[i] * nums[i] < nums[j] * nums[j]) {ans.push_back(nums[i] * nums[i]);i++;} else {ans.push_back(nums[j] * nums[j]);j--;}}while (i < nums.size()) {ans.push_back(nums[i] * nums[i]);i++;}while (j >= 0){ans.push_back(nums[j] * nums[j]);j--;}}return ans;}
  • 双指针的解法二
    • 一个指针指向第一个元素
    • 另一个指针指向最后一个元素
    • 从后往前加元素
    • 时间复杂度是O(n)。其中 n 是数组 nums 的长度。
    • 空间复杂度是O(1)。除了存储答案的数组以外,我们只需要维护常量空间。
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int n = nums.size();vector<int> ans(n);for (int i = 0, j = n - 1, pos = n - 1; i <= j; pos--) {if (nums[i] * nums[i] > nums[j] * nums[j]) {ans[pos] = nums[i] * nums[i];i++;} else {ans[pos] = nums[j] * nums[j];j--;}}return ans;}
};

Day 2

🚩209.长度最小的子数组

  • 双指针的思想
    • 左右两个指针,当当前区间内的值小于target,则移动右指针;反之移动左指针
    • 区间是左闭右开的
    • 利用cnt来记录最短的长度;(right - left + 1)
    • 这道题感觉是滑动窗口的思想
  • 基本语法知识
    • 三目运算符:条件表达式?True : False
    • INT的最大值:int ans = INT_MAX
// 有点冗余的写法
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left = 0;int right = left + 1;int cnt = nums[0];int n = nums.size();int minlength = n + 1;while(right < n) {if (cnt < target) {cnt += nums[right];right++;} else if (cnt >= target) {if ((right - left) < minlength) {minlength = right - left;}cnt -= nums[left];left++;}}// 当right已经走到最右端了,但cnt依旧大于0while(left < n) {if (cnt >= target) {if ((right - left) < minlength) {minlength = right - left;}cnt -= nums[left];left++;} else {break;}}return (minlength > n) ? 0 : minlength;}
};
// 看完题解后的优化代码
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left = 0;int right = 0;int cnt = 0;int n = nums.size();int minlength = n + 1;while(right < n) {cnt += nums[right];while (cnt >= target) {minlength = min(minlength, right - left + 1);cnt -= nums[left];left++;}right++;}return (minlength > n) ? 0 : minlength;}
};
  • 时间复杂度为:O(n)
  • 空间复杂度为:O(1)

Day 3 栈与队列

239. 滑动窗口最大值

  • 用一个队列来存储当前窗口内的元素,对队列中的元素进行排序,取出最大值

347.前K个高频元素

  • 使用字典,key为对应的元素,value为对应的出现次数;遍历整个数组,然后按照value进行排序,然后输出前K个结果;
  • 思想是上述的思想;但是如何根据value排序是一个难点
  • 这里用到了堆的思想,也就是优先队列的思想
  • 基本语法:
    • priority_queue的基本函数:push(), pop(), top(), empty(), size();
    • 默认为大根堆
    • 如果想要小元素放在队首,则可以使用以下的方式
      priority_queue<int,vector<int>,greater<int>>q
    • C++11中的STL 可以使用emplace()emplace_back()来代替insert()push_back()
class Solution {public:vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int,int> ans;for (int num : nums) {ans[num]++;}// 排序priority_queue<pair<int, int>> q;for (auto item : ans) {q.emplace(item.second, item.first);}//求解vector<int> res;while(k) {res.emplace_back(q.top().second);q.pop();--k;}return res;}
};

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

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

相关文章

动态规划-背包问题进阶-完全背包和多重背包

我们之前讲过01背包&#xff0c;现在我们讲讲背包问题的进阶&#xff0c;先说完全背包。 完全背包相对于01背包的区别在于商店每个物品的无限性&#xff0c;就是可以被拿无数次&#xff0c;而01背包每个物品只能拿一次。 完全背包问题中&#xff0c;每个物品可以选择无限次&a…

【二叉树】遍历及构造

1. 定义 二叉树是一种树形数据结构&#xff0c;由节点组成&#xff0c;每个节点最多有两个子节点&#xff0c;分别为左子节点和右子节点。二叉树具有以下性质&#xff1a; 每个节点最多有两个子节点&#xff0c;称为左子节点和右子节点。 左子节点和右子节点可以为空&#xff0…

命令执行讲解和函数

命令执行漏洞简介 命令执行漏洞产生原因 应用未对用户输入做严格得检查过滤&#xff0c;导致用户输入得参数被当成命令来执行 命令执行漏洞的危害 1.继承Web服务程序的权限去执行系统命会或读写文件 2.反弹shell&#xff0c;获得目标服务器的权限 3.进一步内网渗透 远程代…

泛微e-office系统存在敏感信息泄露 附POC软件

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 泛微e-office系统简介 微信公众号搜索:南风漏洞复…

mysql 锁详解

目录 前言 一、全局锁 二、表级锁 三、行锁 前言 为什么要设计锁&#xff0c;锁设计初衷是为了解决多线程下并发问题。出现并发的时候用锁进行数据同步&#xff0c;避免因并发造成了数据错误(数据覆盖)。可见锁的重要性&#xff0c;并不是所有的数据库都有锁。比如Redis&a…

什么是CODESYS开发系统

CODESYS是一种用于工业自动化领域的开发系统软件&#xff0c;提供了一个完整集成的开发环境。该软件由德国CODESYS GmbH&#xff08;原 3S-Smart Software Solutions GmbH&#xff09;公司开发&#xff0c;其最新版本为CODESYS V3。 CODESYS开发系统具有多种特性和优点。首先&a…

⭐北邮复试刷题105. 从前序与中序遍历序列构造二叉树__递归分治 (力扣每日一题)

105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,…

Rocky 8.9 Kubespray v2.24.0 在线部署 kubernetes v1.28.6 集群

文章目录 1. 简介2. 预备条件3. 基础配置3.1 配置hostname3.2 配置互信 4. 配置部署环境4.1 在线安装docker4.2 启动容器 kubespray4.3 编写 inventory.ini4.4 关闭防火墙、swap、selinux4.5 配置内核模块 5. 部署6. 集群检查 1. 简介 kubespray​ 是一个用于部署和管理 Kuber…

抽象方法与设计模式

抽象方法与设计模式 设计模式的六大原则工厂模式单例模式建造者模式过滤器模式装饰器模式享元模式责任链模式模板模式 真正的屎山不是初级程序员写的巨量胶水代码&#xff0c;而是没学明白抽象的程序员写的大量设计模式耦合形成的。你甚至不理解为什么当初的创作者需要使用到这…

基于postMessage和BroadcastChannel实现浏览器跨Tab窗口通信的方法介绍

文章目录 一、Broadcast Channel1、创建实例2、监听消息3、发送消息4、关闭5、示例演示5.1、主控页面5.2、受控页面 二、postMessage1、语法1.1、targetWindow1.2、message1.3、targetOrigin1.4、transfer&#xff08;可选的&#xff09; 2、示例演示2.1、parent页面2.2、child…

Elsevier投稿录用后的一些疑问

在elsevier投稿被录用之后&#xff0c;会收到好几个邮件&#xff1a; 第一封邮件是给你一个在线修改稿子的网站&#xff0c;让你核实作者&#xff0c;文献等等的信息&#xff0c;以及编辑做的修改&#xff0c;要注意的是有几个query问题是必须回答的。然后你在线修改完提交就可…

CF1468J Road Reform 题解

CF1468J Road Reform 题解 link CF1468J Road Reform 题面翻译 给定一个有 n n n 个节点&#xff0c; m m m 条无向带权边的图&#xff0c;和一个参数 k k k&#xff0c;第 i i i 条边权值为 s i s_i si​。 现在你要保留这个图中的 n − 1 n-1 n−1 条边使得这个图变…

java导出动态下拉框excel模板

1.原始模板 2.导出模板,下拉框为数据库中得到动态数据 public void downloadTemplate(HttpServletResponse response) throws IOException {// 所有部门List<String, String> departments expertManageMapper.selectAllDepartment();//所有职位List<String, String&g…

前端关于Vue跳转外部链接(百度为例)

一定要加这句 window.location.href http://www.baidu.com/s?wd this.wd;关于Vue跳转外部链接&#xff08;百度为例&#xff09;_vue3.2 点击按钮 router.resolve 跳转 百度-CSDN博客 <img src"./hd1.jpg" width"200px" height"100px" c…

模块 time:时间和日期处理

MicroPython内置模块 time&#xff1a;时间和日期处理 MicroPython的内置模块time是一个用于处理时间相关功能的模块&#xff0c;它实现了CPython模块的一个子集&#xff0c;但也有一些特殊的特点和限制。本文将从以下几个方面介绍time模块的主要特点、应用场景&#xff0c;以…

基于Java (spring-boot)的社区物业管理系统

一、项目介绍 本系统共分为两个角色&#xff1a;管理员和业主。 主要功能有&#xff0c;核心业务处理&#xff0c;基础信息管理&#xff0c;数据统计分析 核心业务处理&#xff1a;车位收费管理&#xff0c;物业收费管理&#xff0c;投诉信息管理&#xff0c;保修信息管理。 …

Top-N 泛型工具类

一、代码实现 public class TopNUtil<E extends Comparable<E>> {private final PriorityQueue<E> priorityQueue;private final int n;/*** 构造 Top-N*/public TopNUtil(int size) {if (size < 0) {throw new IllegalArgumentException("Top-N si…

嵌入式学习day22 Linux

文件IO: 1. lseek off_t lseek(int fd, off_t offset, int whence); 功能: 重新设定文件描述符的偏移量 参数: fd:文件描述符 offset:偏移量 whence: SEEK_SET 文件开头 …

代码随想录三刷day04

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣209. 长度最小的子数组二、力扣904. 水果成篮三、力扣76. 最小覆盖子串 前言 接下来就开始介绍数组操作中另一个重要的方法&#xff1a;滑动窗口。 所谓…

C++从入门到精通 第十四章(STL容器)【下】

七、list容器 1、list的基本概念 &#xff08;1&#xff09;list的功能是将数据进行链式存储&#xff0c;对应数据结构中的链表&#xff0c;链表是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的。 &#xff08;2&#xff…