自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(171)
  • 收藏
  • 关注

原创 Apple M1芯片 darknet、yolo3、opencv配置

1、正常进入darknet网址进行配置https://pjreddie.com/darknet/install/2、安装homebrew3、使用指令brew install opencv@3 安装opencv4、配置opencv工具:使用homebrew 安装【pkg-config】和【 cmake】在终端输入命令,查看是否有以上两个文件:brew search cmakebrew search pkg-config2.若都存在,继续安装:brew install cmakebrew

2022-05-17 12:45:49 922 1

原创 LRU缓存及其代码实现

一、什么是LRU缓存算法LRU,Least Recently Used算法,即一种缓存淘汰策略。计算机的缓存容量有限,若缓存满了则需要删除一些内容,给新的缓存腾出空间,但问题是要删除哪些内容呢?当然是把用的少的缓存删掉,把最有用的数据继续保留以便于继续使用。那么如何判定哪些数据是有用的呢?缓存淘汰的策略有很多,而LRU则是一种较为简单常用的算法,LRU判定最近使用过的数据为有用的,很久都没用过的数据是无用的,在内存满了就优先删除很久未使用,也就是无用的数据。二、如何实现LRU缓存算法LRU 缓存机

2022-04-15 12:55:59 684

原创 1937. 扣分后的最大得分——动态规划

和接雨水很像,虽然两道题都尝试暴力之后超时了class Solution {public: long long maxPoints(vector<vector<int>>& points) { int m = points.size(); int n = points[0].size(); vector<long long> pre(n); //pre(n)是指上一层的状态 for (

2022-04-07 17:09:25 389

原创 string::find()函数和string::npos静态成员常量的使用

string::find()函数string::find()函数:是一个字符或字符串查找函数,该函数有唯一的返回类型,即string::size_type,即一个无符号整形类型,可能是整数也可能是长整数。如果查找成功,返回按照查找规则找到的第一个字符或者子串的位置;如果查找失败,返回string::npos,即-1(当然打印出的结果不是-1,而是一个很大的数值,那是因为它是无符号的)。这里值得注意的是string::find()函数的返回值不是bool类型,所以无法通过find()函数的返回值直接判

2022-04-07 15:08:52 508

原创 667. 优美的排列 II——模拟

给你两个整数 n 和 k ,请你构造一个答案列表 answer ,该列表应当包含从 1 到 n 的 n 个不同正整数,并同时满足下述条件:假设该列表是 answer = [a1, a2, a3, … , an] ,那么列表 [|a1 - a2|, |a2 - a3|, |a3 - a4|, … , |an-1 - an|] 中应该有且仅有 k 个不同整数。返回列表 answer 。如果存在多种答案,只需返回其中 任意一种 。class Solution {public: vector&l.

2022-04-01 00:13:07 370

原创 986. 区间列表的交集——双指针法归并区间

给定两个由一些 闭区间 组成的列表,firstList 和 secondList ,其中 firstList[i] = [starti, endi] 而 secondList[j] = [startj, endj] 。每个区间列表都是成对 不相交 的,并且 已经排序 。返回这 两个区间列表的交集。形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b 。两个闭区间的 交集 是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [.

2022-03-29 16:53:19 451

原创 牛客网模板速刷TOP101——个人笔记

反转链接创建表头,逐个反转链表内指定区间反转先移动到至于区域开头,逐个反转到区域结尾链表中的节点每k个一组翻转模拟法构建了reverse函数对于[begin,end]内的节点进行翻转,由于翻转过程后,前一个节点和后一个节点会对该段链表的链接丢失,所以要先记录前后节点,翻转后重新链接上。栈每k装入栈取出重新链接合并两个排序的链表迭代法一般创建单链表,都会设一个虚拟头结点,也叫哨兵,因为这样每一个结点都有一个前驱结点。两个链表头中小的插入哨兵后面,直到有一方全部插入结..

2022-03-22 15:25:51 1845

原创 OpenGL课程设计 光线追踪

链接: https://pan.baidu.com/s/1cBTTbbzRCVBCX_H4jf6qMA 提取码: kj8w一、实验内容与要求1.1 实验内容(1)实验描述基于C++(也可选择其它编程语言,但需要在实现中体现面向对象的思想)实现完整的含递归调用的光线跟踪算法。(2)实验环境在Clion平台下结合OpenGL开发操作系统:macOS Monterey 12.0 Beta版(21A5248p)处理器:Apple M1内存:16.00GB系统类型:64位操作系统1.2 实验要求

2022-03-18 10:51:29 9479 10

原创 OpenGL课程设计 三维图形交互程序 bunny兔+飞机模型

链接: https://pan.baidu.com/s/1cBTTbbzRCVBCX_H4jf6qMA 提取码: kj8w一、实验要求和内容1.1 实验内容(1)实验描述实现一个三维图形交互程序,能够读入三维obj文件、绘制并打上光照,并且实现基本的三维交互—包含平移、旋转和缩放。要求能够成功读取发给大家的obj文件模型(bunny.obj),也可以自行增加另外的三维模型文件。此作业要求每人单独完成。(2)实验环境在Clion平台下结合OpenGL开发操作系统:macOS Monterey 1

2022-03-18 10:36:25 4717 1

原创 OpenGL入门第六次实验 纹理映射

链接: https://pan.baidu.com/s/1cBTTbbzRCVBCX_H4jf6qMA 提取码: kj8w一、实验原理及要求参考textureDemo程序,实现太阳、地球和月亮程序中的纹理映射,其中太阳、地球和月亮贴上各自的纹理,同时实现纹理和原来光照效果的混合,即既有光照效果,又有纹理映射效果。GLFW是一个用于OpenGL应用程序开发的可移植库。它处理与OpenGL上下文创建、窗口管理、分辨率切换、键盘、鼠标、操纵杆和时间输入以及基本线程设施相关的系统特定任务。GLEW能自动识别

2022-03-18 10:19:28 1659 1

原创 OpenGL入门第五次实验 基于OpenGL的三维光照

链接: https://pan.baidu.com/s/1cBTTbbzRCVBCX_H4jf6qMA 提取码: kj8w一、实验原理及要求本次实验利用OpenGL的GLFW库以及glm进行几何变换操作,月球的自转和公转分别用了其他两个按键进行了控制,核心思想是利用旋转以及平移的操作顺序以及旋转操作的实现对象让月球实现了自转和公转,详情可见实验结果部分。同时实验也可以进行视角的变换,一共实现了以下两种变换。1、通过按键A、S、W、D四个按键控制方向进行视角转换。2、通过系统时间控制视角旋转。GL

2022-03-18 10:07:43 2313 1

原创 OpenGL入门第四次实验 几何变换(二)

链接: https://pan.baidu.com/s/1cBTTbbzRCVBCX_H4jf6qMA 提取码: kj8w一、实验概况及原理本次实验利用OpenGL的GLFW库以及glm进行几何变换操作,月球的自转和公转分别用了其他两个按键进行了控制,核心思想是利用旋转以及平移的操作顺序以及旋转操作的实现对象让月球实现了自转和公转,详情可见实验结果部分。同时实验也可以进行视角的变换,一共实现了以下两种变换。1、通过按键A、S、W、D四个按键控制方向进行视角转换。2、通过系统时间控制视角旋转。GL

2022-03-18 09:57:44 788

原创 OpenGL入门第四次实验 几何变换(一)

链接: https://pan.baidu.com/s/1cBTTbbzRCVBCX_H4jf6qMA 提取码: kj8w一、实验原理本次实验利用OpenGL的GLFW库以及glm进行几何变换操作,实现了作业的两个要求。GLFW是一个用于OpenGL应用程序开发的可移植库。它处理与OpenGL上下文创建、窗口管理、分辨率切换、键盘、鼠标、操纵杆和时间输入以及基本线程设施相关的系统特定任务。GLEW能自动识别当前平台所支持的全部OpenGL高级扩展涵数。只要包含glew.h头文件,就能使用gl,glu

2022-03-18 09:51:57 1388

原创 重写、重载和隐藏的区别

重载:是指同一可访问区内被声明几个具有不同参数列(参数的类型、个数、顺序)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。class A{public:void fun(int tmp);void fun(float tmp); // 重载 参数类型不同(相对于上一个函数)void fun(int tmp, float tmp1); // 重载 参数个数不同(相对于上一个函数)void fun(float tmp, int tmp1); // 重载 参数顺序不同(相对于上..

2022-03-13 21:25:07 2598

原创 快慢指针在链表中的应用

判断链表中是否存在环让快慢指针从链表头开始遍历,快指针向前移动两个位置,慢指针向前移动一个位置;如果快指针到达NULL,说明链表以NULL为结尾,不是循环链表。如果 快指针追上慢指针,则表示出现了循环。bool hasCycle(ListNode *head) { if(head == nullptr || head -> next == nullptr) return false; ListNode *slow = head, *fas

2022-03-10 09:08:03 699

原创 OpenGL入门第三次实验 三角形光栅化

代码都放在一起了,如果接下来的实验有需要私信一下就好哦链接: https://pan.baidu.com/s/1cBTTbbzRCVBCX_H4jf6qMA 提取码: kj8w实验三 三角形光栅化算法一、实验原理本次实验利用OpenGL的GLFW库进行操作,实现了用户通过键盘输入点的坐标和颜色绘制出三角形。三角形光栅化算法可以封装为一个函数,把光栅化三角形算法生成的像素点覆盖vertices[]数组中的点,并通过glDrawArrays(GL_POINTS, 0, counts)画出来,count

2022-03-08 00:00:24 1443 3

原创 inline关键字

为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline关键字。类内定义成员函数默认是内联函数类外定义成员函数,若想定义为内联函数,需用关键字声明。当在类内声明函数,在类外定义函数时,如果想将该函数定义为内联函数,则可以在类内声明时不加 inline 关键字,而在类外定义函数时加上 inline 关键字。inline 函数工作原理内联函数不是在调用时发生控制转移关系,而是在编译阶段将函数体嵌入到每一个调用该函数的语句块中,编译器会将程序中出现内联函数的调用表达式用

2022-03-06 19:46:33 350

原创 static 关键词

作用: static 定义静态变量,静态函数。保持变量内容持久:static 作用于局部变量,改变了局部变量的生存周期,使得该变量存在于定义后直到程序运行结束的这段时间。(从作用域上来说,局部变量加上static相当于全局变量)隐藏:static作用于全局变量和函数,改变了全局变量和函数的作用域,使得全局变量和函数只能在定义它的文件中使用,在源文件中不具有全局可见性。(注:普通全局变量和函数具有全局可见性,即其他的源文件也可以使用。)C++中static 作用于类的成员变量和类的成员函数,使得类变

2022-03-06 18:44:13 524

原创 explict 关键字的作用

explicit关键字的作用就是防止单参类构造函数的隐式自动转换.作用:用来声明类构造函数是显示调用的,而非隐式调用,可以阻止调用构造函数时进行隐式转换。只可用于修饰单参构造函数,因为无参构造函数和多参构造函数本身就是显示调用的,再加上 explicit 关键字也没有什么意义。隐式转换:float a = 10;//这里的10就会被隐式转换成浮点数class::A a = 10;//这里的10就会被隐式转换成类型A为什么要创造一个关键字专门负责阻止单参类构造函数的隐式自动转换呢?因为A a =

2022-03-06 18:18:04 471

原创 范围for 语句

for (declaration : expression){ statement}参数的含义:expression:必须是一个序列,例如用花括号括起来的初始值列表、数组、vector ,string等,这些类型的共同特点是拥有能返回迭代器的 beign、end 成员。declaration:此处定义一个变量,序列中的每一个元素都能转化成该变量的类型,常用 auto 类型说明符。 string str = "这是一个字符串"; for(auto ch : vec) cout &lt

2022-03-06 13:28:19 153

原创 lambda 表达式

lambda匿名函数的定义:C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}可以看到,Lambda 主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable 或 exception 声明、-> 返回值类型、{函数体}.[capture list] (parameter list) -&g

2022-03-06 13:23:56 498

原创 auto关键字

auto 关键字:自动类型推导,编译器会在 编译期间 通过初始值推导出变量的类型,通过 auto 定义的变量必须有初始值。auto 关键字基本的使用语法如下:auto 变量必须在定义时初始化,这类似于const关键字。定义在一个auto序列的变量必须始终推导成同一类型。例如:auto a4 = 10, a5 = 20, a6 = 30;//正确auto b4 = 10, b5 = 20.0, b6 = 'a';//错误,没有推导为同一类型使用auto关键字做类型自动推导时,依次施加一下规则:

2022-03-06 11:27:28 258

原创 C++编译过程以及静态、动态链接的理解

编译过程分为四个过程:编译(编译预处理、编译、优化),汇编,链接。编译预处理:处理以 # 开头的指令;编译、优化:将源码 .cpp 文件翻译成 .s 汇编代码;汇编:将汇编代码 .s 翻译成机器指令 .o 文件;链接:汇编程序生成的目标文件,即 .o 文件,并不会立即执行,因为可能会出现:.cpp 文件中的函数引用了另一个 .cpp文件中定义的符号或者调用了某个库文件中的函数。那链接的目的就是将这些文件对应的目标文件连接成一个整体,从而生成可执行的程序 .exe文件。链接分为

2022-03-05 19:34:38 345

原创 OpenGL入门第二次实验 直线光栅化算法

第二次实验作业 直线光栅化算法 实验报告老师的评语是:实验正确实现了任意斜率情况下的画直线算法,且可以通过鼠标交互画出多条直线形成图案。实验报告较简单,可以对代码设计进行更详细清晰的说明。此外drawline函数可以写得更精简些,不用每种斜率情况都调用各自的循环来生成点,可以在变换后统一调用斜率在0-1直接的画直线代码即可。一、实验原理1.本次实验利用OpenGL的GLFW库进行操作,实现了用户通过键盘、鼠标进行直线的绘制,以及用户可以基于交互的直线绘制,即通过鼠标点击,或者键盘输入点,随意在屏幕上画

2022-03-03 19:19:18 2067

原创 GAMES101现代计算机图形学入门-第一节-图形学导论

最近在为之后找工作面试做准备,所以把大二学习的计算机图形学又拿出来重新学起来了,也推荐大家一起看闫大神的课!!!然后笔记是在lengyueling大佬的版本上进行的修改,总体还是大佬的模板。希望大家一起在图形学的路上越走越远!GAMES101-现代计算机图形学入门-闫令琪图形学应用场景电子游戏:PBR:之狼卡通渲染:无主之地电影:黑客帝国动画:疯狂动物城、冰雪奇缘设计:概念图可视化:虚拟现实数码插画:模拟仿真GUI图形用户接口字体设计:矢量

2022-03-03 00:39:27 3981

原创 134. 加油站——贪心

class Solution {public: int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { int n = gas.size(), sum = 0, Min = INT_MAX, index; for(int i = 0; i < n; ++i){ //sum是汽油-消耗, sum += (ga

2022-02-24 11:00:26 455

原创 315. 计算右侧小于当前元素的个数——归并排序

给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是nums[i] 右侧小于 nums[i] 的元素的数量。class Solution { vector<int> index; //记录序号 vector<int> temp; //临时的数组 vector<int> tempIndex; //临时数组对应的序号 vector<int> an.

2022-02-24 10:25:41 779

原创 278. 第一个错误的版本——二分查找

class Solution {public: int firstBadVersion(int n) { int left = 1, right = n, ans = n; while(left <= right){ //以后尽量还是写下面这个格式的,防止INT型溢出 int mid = left + (right - left) / 2; //如果false向左找,true向右找

2022-02-24 08:15:52 319

原创 240. 搜索二维矩阵 II——剑指Offer

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。 每列的元素从上到下升序排列。class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int rows = matrix.size(), cols = matrix[0].size(); .

2022-02-23 23:45:49 102

原创 357. 计算各个位数不同的数字个数——动态规划

给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n 。class Solution {public: int countNumbersWithUniqueDigits(int n) { vector<int> dp(n + 1); //特殊情况 n = 0时 if(n == 0) return 1; //特殊情况 n = 1时 if(.

2022-02-23 22:58:58 146

原创 343. 整数拆分——动态规划

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。 返回你可以获得的最大乘积 。class Solution {public: int integerBreak(int n) { if(n == 2) return 1; vector<int> dp(n + 1); for(int i = 2; i <= n; ++i){ .

2022-02-23 15:06:59 333

原创 338. 比特位计数——动态规划

给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组ans 作为答案。class Solution {public: vector<int> countBits(int n) { //题目要求长度为 n + 1 的数组 ans vector<int> ans(n + 1); //设置初始值,已知0的二进制1的个数为0 .

2022-02-23 14:21:15 72

原创 322. 零钱兑换——动态规划

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。class Solution {public: vector<int> count; //记录各个金额所需耗费的最少硬币个数 int coinChange(vector<int>& coins, int amount).

2022-02-23 14:08:24 693

原创 70. 爬楼梯——动态规划

class Solution {public: int climbStairs(int n) { vector<int> dp(n + 1); if(n == 1) return 1; if(n == 2) return 2; dp[0] = 1; dp[1] = 2; for(auto i = 2; i < n; ++i)

2022-02-22 22:24:32 82

原创 53. 最大子数组和——动态规划

方法一class Solution {public: int maxSubArray(vector<int>& nums) { int n = nums.size(); vector<int> dp(n); dp[0] = nums[0]; int ans = nums[0]; for(int i = 1; i < n; ++i){ dp[i] = max

2022-02-22 22:13:41 117

原创 308. 区域和检索 - 数组可修改——从具体案例中讲解线段树的构造、更新

给你一个数组 nums ,请你完成两类查询。其中一类查询要求 更新 数组 nums 下标对应的值另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nums元素的 和 ,其中 left <= right实现 NumArray 类:NumArray(int[] nums) 用整数数组 nums 初始化对象void update(int index, int val) 将 nums[index] 的值 更新 为 valint sumRange(int

2022-02-22 18:52:59 186

原创 304. 二维区域和检索 - 矩阵不可变——动态规划

一维前缀和class NumMatrix {public: vector<vector<int>> dp; NumMatrix(vector<vector<int>>& matrix) { //一开始思考,不是每次直接加起来就好了吗 //后来发现,这样消耗的时间也太多了吧,怪不得我AC不了 //看了题解才知道,看起来越简单的题,越要用精妙的方法去做 int rows =

2022-02-22 14:15:35 106

原创 309. 动态规划

给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。class Solution {public: int maxProfit(vector<int>& prices) { int n =.

2022-02-21 23:09:11 97

原创 300. 最长递增子序列——贪心 + 二分查找

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组[0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18] 输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3] 输出:4示例 3:输入:nums = [7,7,7,7,7,7,7.

2022-02-21 21:14:22 539

原创 299.猜数字游戏

class Solution {public: string getHint(string secret, string guess) { vector<int> bulls(10), cows(10); int bull = 0, cow = 0; int n = secret.size(); for(int i = 0; i < n; ++i){ //一一比较 if

2022-02-21 10:44:33 1855

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除