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

算法练习——力扣随笔【LeetCode】【C++】

文章目录

  • LeetCode 练习随笔
    • 力扣上的题目和 OJ题目相比不同之处?
    • 定义问题
    • 排序问题
    • 统计问题
    • 其他

在这里插入图片描述

LeetCode 练习随笔

做题环境 C++

中等题很值,收获挺多的

不会的题看题解,一道题卡1 h +,多来几道,时间上耗不起。

力扣上的题目和 OJ题目相比不同之处?

一开始上手力扣不习惯,OJ 的题目提交的是完整代码,力扣上的C++只提交目标函数代码,比如某个题目你只需要完成topKFrequent(nums,k)这个函数。

class Solution {vector<int> topKFrequent(vector<int>& nums, int k) {}
};

这也就意味着程序设计的输入不需要自己额外设计了,同时限制了你数据的输入和返回内容的格式。
多亏了oj许多来自力扣的题并补全了完整代码(目标函数部分空缺),渐渐习惯了编写目标函数的答题习惯。

定义问题

  • 在哪定义结构体

    有两个位置可写:

    1)类里面,讲究的话写在private中,这里就不讲究了。

    class Solution {
    public:struct node{int data;  };vector<int> topKFrequent(vector<int>& nums, int k) {}
    };
    

    2)顶部区域

     struct node{int data;  };class Solution {
    public:struct node{int data;  };vector<int> topKFrequent(vector<int>& nums, int k) {}
    };
    
  • 在哪定义全局变量

    1)顶部区域

    #include<algorithm>
    int a =3;
    class Solution {
    public:vector<int> topKFrequent(vector<int>& nums, int k) {vector<int>v;v.push_back(a);
    return v;}
    };
    

    2)换个方式,传参方式改为引用

    很多全局变量是可以被替代的,比如希望值被修改并返回到原来作用域,但返回值位置紧张。

    暴力时,全局变量开大数组还是有点用处的。

  • 在哪定义头文件

    一般是全面的,多虑了。

    下面这种做题区域顶部写头文件试过,编译通过。

    #include<algorithm>class Solution {
    public:vector<int> topKFrequent(vector<int>& nums, int k) {}
    };
    

排序问题

  • vector 存入结构体怎么自定义比较规则?

    1)自定义规则为结构体形式(优先队列也可用)

    class Solution
    {public:typedef struct node{int data;int sum;} ll;
    //    static bool cmp(ll a, ll b)
    //    {
    //        return a.sum > b.sum;
    //    }struct CompareBySumDesc{bool operator()( ll a,  ll b) {return a.sum > b.sum;}};vector<int> topKFrequent(vector <int> &nums,int k){vector<ll>v;//...//vector排序sort(v.begin(),v.end(),CompareBySumDesc());
    //        sort(v.begin(),v.end(),cmp);//...return res;}};
    

    2)自定义规则为静态函数(简单)

    class Solution
    {public:typedef struct node{int data;int sum;} ll;static bool cmp(ll a, ll b){return a.sum > b.sum;}//    struct CompareBySumDesc
    //    {
    //        bool operator()(const ll a, const ll b) const
    //        {
    //           return a.sum > b.sum;
    //        }
    //    };vector<int> topKFrequent(vector <int> &nums,int k){vector<ll>v;//...//vector排序
    //        sort(v.begin(),v.end(),CompareBySumDesc());sort(v.begin(),v.end(),cmp);//...return res;}};
    
  • vector 存入结构体怎么逆置?

    用 stack。

  • 存入结构体的 priority_queue 怎么自定义比较规则?

    给 ll 按照 sum 排序

    class Solution
    {
    public:typedef struct node{int data;int sum;} ll;//试过了,static 函数行不通,只能 struct cmp{bool operator()( ll a,  ll b){return a.sum > b.sum;}};void f(){priority_queue<ll, vector<ll>, cmp> pq;};
    int main()
    {Solution().f();return 0;
    }
    //默认降序//没有结构体,升序
    priority_queue <int,vector<int>,greater<int> > q;
    
  • 使用 priority_queue 实现堆排序?

    优先队列本身是堆实现的。只需维护好优先队列的容量 k,超过pop掉。

统计问题

map 统计的神。遍历别忘了迭代器初始化。

其他

  • 删除 vector 任意位置元素?

    vector<int>v;
    //删除 v[i]
    swap( v[i],v[v.size()-1]);
    v.pop_back();
    

    其实只是 v.size()减少,内存不释放。

     vector<int >v;v.push_back(11);v.push_back(22);v.push_back(33);v.pop_back();v.pop_back();v.pop_back();cout<<v.size()<<endl;v.push_back(44);cout<<v[0]<<endl;cout<<v[1]<<endl;cout<<v[2]<<endl;
    

    这里存入三个元素,之后全部删除,v.size() 结果是 0,是预期的结果,

    但此时通过下标访问v[0]~v[2],原来的值仍然可以访问到,删除时内存没有释放掉。

    之后再加入新的元素44,v[0] 内容被覆盖了。

  • vector<vector<int > >v;尖括号嵌套尽可能规范地隔开,

    priority_queue <int,vector<int>,greater<int>> pq;这种尖括号紧贴一起依稀记得编译没通过。

  • 连续子序列和问题,优先考虑滑动窗口。

相关文章:

算法练习——力扣随笔【LeetCode】【C++】

文章目录 LeetCode 练习随笔力扣上的题目和 OJ题目相比不同之处&#xff1f;定义问题排序问题统计问题其他 LeetCode 练习随笔 做题环境 C 中等题很值&#xff0c;收获挺多的 不会的题看题解&#xff0c;一道题卡1 h &#xff0c;多来几道&#xff0c;时间上耗不起。 力扣上的题…...

web服务器(Tomcat)

目录 一、web服务器 1. 常见web服务器 2. web服务器简介 二、 Apache Tomcat服务器 1. Tomcat服务器简介 2. Tomcat服务器基本使用 3. 启动tomcat常见问题 &#xff08;1&#xff09;启动tomcat控制台乱码 &#xff08;2&#xff09;启动tomcat闪退问题 &#xff08;…...

测试方案、功能测试报告、性能测试报告

测试方案内容概要&#xff1a; 项目内容介绍&#xff0c;测试计划安排&#xff08;人员时间&#xff09;&#xff0c;测试环境&#xff08;系统配置&#xff09;需求功能点&#xff08;内容介绍&#xff0c;测试安排&#xff09;&#xff0c;重点难点场景&#xff0c;系统集成…...

【代码随想录day21】二叉搜索树的最近公共祖先

题目 思路 解题的关键是知道自顶向低递归遍历&#xff0c;第一次遇到root在p和q的区间中时&#xff0c;则root就是p和q的最近公共祖先节点。 递归法 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val x # …...

ssm文章发布管理系统java小说作品发表jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 ssm文章发布管理系统 系统有2权限&#xff1a;前台账…...

AXI协议之AXILite开发设计(二)

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 二、AXI-Lite关键代码分析 1、时钟与…...

Qgis二次开发-QgsMapTool地图交互工具详解

1.简介 QgsMapTool地图工具是用于操作地图画布的用户交互式工具。例如&#xff0c;地图平移和缩放功能被实现为地图工具。 QgsMapTool是抽象基类&#xff0c;以下是类的继承关系&#xff1a; 2.常用接口 virtual void canvasDoubleClickEvent (QgsMapMouseEvent *e)重写鼠标…...

MySQL基础(四)数据库备份

目录 前言 一、概述 1.数据备份的重要性 2.造成数据丢失的原因 二、备份类型 &#xff08;一&#xff09;、物理与逻辑角度 1.物理备份 2.逻辑备份 &#xff08;二&#xff09;、数据库备份策略角度 1.完整备份 2.增量备份 三、常见的备份方法 四、备份&#xff08…...

子类化QThread来实现多线程,moveToThread函数的作用

子类化QThread来实现多线程&#xff0c; QThread只有run函数是在新线程里的&#xff0c;其他所有函数都在QThread生成的线程里。正确启动线程的方法是调用QThread::start()来启动。 一、步骤 子类化 QThread&#xff1b;重写run&#xff0c;将耗时的事件放到此函数执行&#…...

经典面试题(力扣,接雨水)

接雨水 方法一思路测试代码复杂度测试结果 方法二思路测试代码复杂度测试结果 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]…...

2023年深圳杯数学建模C题无人机协同避障航迹规划

2023年深圳杯数学建模 C题 无人机协同避障航迹规划 原题再现&#xff1a; 平面上A、B两个无人机站分别位于半径为500 m的障碍圆两边直径的延长线上&#xff0c;A站距离圆心1 km&#xff0c;B站距离圆心3.5 km。两架无人机分别从A、B两站同时出发&#xff0c;以恒定速率10 m/s…...

PostgreSQL--实现数据库备份恢复详细教学

前言 这是我在这个网站整理的笔记&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;RodmaChen PostgreSQL--实现数据库备份恢复详细教学 一. 数据库备份二. 数据库恢复三. 存留问题 数据库备份恢复功能是每个产品所需的&#xff0c;以下是简单的脚本案例&a…...

JDK工具之jstack说明

JDK工具之jstack说明 前言什么是jstack&#xff1f;如何使用jstack&#xff1f;获取Java进程的PID分析jstack输出 常用的jstack命令选项jstack的应用场景结论 前言 作为Java开发人员&#xff0c;在开发和维护复杂的Java应用程序时&#xff0c;我们经常会遇到各种各样的问题&am…...

34 | 牛顿迭代法

文章目录 牛顿迭代法一、原理二、Python实现三、练习题四、总结牛顿迭代法 一、原理 牛顿迭代法(Newton’s Method)是一种用于寻找方程的实根的数值方法。其基本思想是通过一系列逼近来求解方程的根。对于方程 f ( x ) = 0 f(x) = 0 f(x...

ChatGPT如何帮助学生学习

​ 一些教育工作者担心学生可能使用ChatGPT作弊。因为这个AI工具能写报告和计算机代码&#xff0c;画出复杂图表……甚至已经有许多学校把ChatGPT屏蔽。 研究发现&#xff0c;学生作弊的主要原因是想考得好。是否作弊与作业和考试的打分方式有关&#xff0c;所以这与技术的便…...

easyexcel导出excel-50行代码搞定大量数据导出

文章目录 一、写在前面二、使用步骤定义导出的数据实体导出 一、写在前面 场景&#xff1a; 当数据量导出过大时如果一次从数据库取出所有数据会导致内存飙升导致系统奔溃&#xff0c;所以我们采取循环读取和循环写入。 准备: mave导入&#xff1a;easyexcel:3.0.5 二、使用…...

OpenAI宣布安卓版ChatGPT正式上线;一站式 LLM底层技术原理入门指南

&#x1f989; AI新闻 &#x1f680; OpenAI宣布安卓版ChatGPT正式上线 摘要&#xff1a;OpenAI今日宣布&#xff0c;安卓版ChatGPT已正式上线&#xff0c;目前美国、印度、孟加拉国和巴西四国的安卓用户已可在谷歌Play商店下载&#xff0c;并计划在下周拓展到更多地区。Chat…...

Rust vs Go:常用语法对比(二)

21. Swap values 交换变量a和b的值 a, b b, a package mainimport "fmt"func main() { a : 3 b : 10 a, b b, a fmt.Println(a) fmt.Println(b)} 103 fn main() { let a 3; let b 10; let (a, b) (b, a); println!("a: {a}, b: {b}", aa,…...

对于Vue3的一些思考

看完 Vue Hooks: 让Vue开发更简单与高效 - 掘金 一些小心得 vue3&#xff1a; 组合式API&#xff08;是利用架构&#xff0c;强制达到拆分目的&#xff09; 达到解耦的目的。对于vue3来说 每个模块的每个逻辑都是 一个一个独立的方法。通过 方法方法整体业务 代码风格&#…...

Bean的生命周期 - spring

前言 本篇介绍了Bean的生命周期&#xff0c;认识PostConstruct注释&#xff0c;PreDestroy注释&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. spring生命周期2. Bean的生命周期3. 为什么先设置…...

基于深度学习的FasterRCNN水下图像复原

项目概述&#xff1a;Waternet_FasterRCNN 本项目旨在结合深度学习技术进行水下图像的还原与分析&#xff0c;综合应用 WaterNet 和 Faster R-CNN 来完成以下功能&#xff1a; 水下图像还原&#xff1a;利用 WaterNet 修复和增强水下图像质量。色板检测与提取&#xff1a;通过 …...

抖音批量下载助手:三步实现全自动视频采集

抖音批量下载助手&#xff1a;三步实现全自动视频采集 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 还在为手动保存抖音视频而烦恼吗&#xff1f;抖音批量下载助手为你提供了一套完整的自动化解决方案&am…...

Windows DLL注入工具Xenos全攻略:从原理到实践的系统指南

Windows DLL注入工具Xenos全攻略&#xff1a;从原理到实践的系统指南 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 一、技术原理&#xff1a;Xenos注入引擎的底层架构 1.1 三级注入引擎的工作机制 Xenos作为专业的…...

别再纠结FP32了!手把手教你用PyTorch的BF16和FP16加速大模型训练(附完整代码)

突破显存瓶颈&#xff1a;PyTorch混合精度训练实战指南 当你在深夜盯着屏幕上那个"CUDA out of memory"的错误提示时&#xff0c;是否感到一阵无力&#xff1f;大模型训练就像是在走钢丝——一边是宝贵的显存资源&#xff0c;另一边是模型性能的悬崖。作为一名经历过…...

实战指南:基于快马平台与yolov11快速开发货架商品检测系统

今天想和大家分享一个最近用yolov11实现的零售商品检测项目&#xff0c;整个过程在InsCode(快马)平台上完成得特别顺利。这个系统可以自动识别超市货架上的商品&#xff0c;特别适合库存管理或者智能结算场景。 项目背景与需求分析 超市货架商品识别看似简单&#xff0c;实际会…...

3步释放20GB空间:Windows驱动清理神器完全指南

3步释放20GB空间&#xff1a;Windows驱动清理神器完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 驱动管理痛点分析 系统臃肿的隐形杀手 随着电脑使用时间增长&#xff0c;Wi…...

如何快速打造现代化Windows提示界面:ModernFlyouts终极指南

如何快速打造现代化Windows提示界面&#xff1a;ModernFlyouts终极指南 【免费下载链接】ModernFlyouts A modern Fluent Design replacement for the old Metro themed flyouts present in Windows. 项目地址: https://gitcode.com/gh_mirrors/mo/ModernFlyouts 你是否…...

Joy-Con Toolkit开源工具:Switch手柄深度定制与性能优化方案

Joy-Con Toolkit开源工具&#xff1a;Switch手柄深度定制与性能优化方案 【免费下载链接】jc_toolkit Joy-Con Toolkit 项目地址: https://gitcode.com/gh_mirrors/jc/jc_toolkit Joy-Con Toolkit是一款面向任天堂Switch玩家的开源手柄管理工具&#xff0c;提供专业级传…...

2026指纹浏览器技术升级:从环境隔离到风控对抗

2026 年&#xff0c;互联网平台的风控技术迎来质的飞跃&#xff0c;传统的 “IP 切换”“参数修改” 已无法应对多维度的检测体系。指纹浏览器作为多账号运营的核心支撑&#xff0c;其技术迭代速度远超以往 —— 从简单的参数修改&#xff0c;到内核级虚拟化&#xff1b;从单一…...

KW45芯片的安全启动

KW45芯片的安全启动是一个硬件强制执行的完整性验证机制&#xff0c;确保芯片始终只运行由设备所有者&#xff08;OEM&#xff09;授权和签名的固件。它的核心目标是防止未授权或恶意代码在设备上执行&#xff0c;是构建设备安全体系的基石。&#x1f6e1;️ 安全启动的核心机制…...