- 博客(47)
- 收藏
- 关注
原创 【代码随想录算法训练营——Day11】栈与队列——150.逆波兰表达式求值、239.滑动窗口最大值、347.前K个高频元素
又改了两个地方,一个是改成deque的实现,一个是新加入的值要与back()比较,如果比较的值更小要pop_back(),从尾部弹出,可以防止[3,1,2]以及其下一步的[1,2,0]这样的队列维护值发生。看题解(视频),维护一个单调队列,由我们自己来实现,每次新加入一个元素到队列里时,把前面所有小于其值的值都pop出队列,维持队列出口为当前窗口的最大值。找到原因了,代码写的不是很对,要弹出窗口前面的那个值。接着看题解,语法也挺难,思路,要用到小顶堆,堆的数据结构和代码没怎么写过,下回再补。
2025-09-14 19:15:06
151
原创 【代码随想录算法训练营——Day10】栈与队列——232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项
用栈的思想真是太巧妙了,完全不知道怎么写。有提示用栈了,不然可能不知道怎么写吧。1047.删除字符串中的所有相邻重复项。232.用栈实现队列。225.用队列实现栈。
2025-09-12 19:27:11
182
原创 【代码随想录算法训练营——Day9】字符串——151.翻转字符串里的单词、卡码网:55.右旋转字符串、28.实现 strStr()、459.重复的子字符串
首先记得思路是先删除空格,再结合erase和substr这两个API就能写得出了。熟练掌握string的API就可以。151.翻转字符串里的单词。卡码网:55.右旋转字符串。留了个大坑以后补——一。留了个大坑以后补——二。
2025-09-11 19:30:36
287
原创 【代码随想录算法训练营——Day8】字符串——344.反转字符串、541.反转字符串II、卡码网:54.替换数字
本来觉得自己能写出来,但是突然不会了。想了一个繁琐的思路出来,还被AI提示了一句reverse库函数,其中的right的i - k - 1值,是debug调出来的。主要是判断结尾剩余字符串的大小赋值,以及要想到双指针确定边界的思路。这题有两个思路,一是我第一次写的,调用插入库函数在原字符串进行插入“number”和删除数字,第二个是我本次写的,用字符串连接组成一个新字符串。受到了之前写的代码的启发(只因为意外的瞄了一眼),升华一下,用了双指针的方法写出来。541.反转字符串II。卡码网:54.替换数字。
2025-09-10 19:27:14
240
原创 【代码随想录算法训练营——Day7】哈希表——454.四数相加II、383.赎金信、15.三数之和、18.四数之和
题解说到另一个方法,双指针法,比哈希法的代码好懂些,但看懂思路后自己去实现发现没有去重,再看题解,发现去重的代码是一行if就完事。但是加到自己的代码里并不对,经过与chatGPT的沟通,发现原因是:使用双指针时,一旦找到一个满足条件的三元组,就先记录结果,然后分别移动 left 和 right 指针,跳过重复元素。最后还是按照卡哥的代码逻辑写了,把left<right的while判断放在外面,并且要注意,对right和left去重时,要把right和左边的比,left和右边的比。以上是用哈希法实现的题目。
2025-09-09 20:14:23
283
原创 【代码随想录算法训练营——Day6(Day5周日休息)】哈希表——242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和
这道题要想到用哈希表来做。同时注意最后的返回值经AI呈现可以直接返回为hash1==hash2,不失为一个新举措。LeetCode题目链接。242.有效的字母异位词。349.两个数组的交集。
2025-09-08 18:59:46
215
原创 【代码随想录算法训练营——Day4】链表——24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题02.07.链表相交、142.环形链表II
本题根据题解,有两个地方需要注意,一是快慢指针遍历时的循环条件,我在代码里注释掉的是我自己写的,此时当结点只有一个时就会报错,因为快指针不存在下一个结点的next,下一个结点已然是NULL,因此在循环遍历时是判断快指针的存在与否与快指针的下一个结点存在与否;代码很简洁,重要的是思想。拿到题目第一反应,开一个10的4次方的数组,作为判定链表中结点值是否出现过的判定(假定题目给的链表结点没有重复的,有重复的就不行了),如果当前结点的next结点的值显示为判定过,则链表存在环。19.删除链表的倒数第N个节点。
2025-09-06 20:01:22
340
原创 【代码随想录算法训练营——Day3】链表——203.移除链表元素、707.设计链表、206.反转链表
注意移除代码中pre结点创建后,在循环中会跟着head往下走,因此要再创建一个cur结点,并令其初值等于pre,而不是直接令其next等于head,因为在遍历过程中移动了next指针,头结点被删除后可能在cur的next里没被改变,因此要直接令其值等于pre,来改变其next。在最后return环节那里,是AI给我提示的(没办法,AI太快了),脑中模拟一下就知道是pre返回,这回完全没看题解,都是凭之前的印象做出的,第一遍刷题真的有用!其他的创建链表代码有借鉴AI的(实在是AI有提示,没办法)。
2025-09-05 19:34:45
149
原创 【代码随想录算法训练营——Day2】数组——209.长度最小的子数组、59.螺旋矩阵II、区间和、开发商购买土地
如何控制圈的层数,这里设了3个变量来实现,startx用来确定行初始位置,starty为列,offset为末尾位置,整个正方形不包含中心坐标的循环次数是n/2次,且每次末尾位置为n-offset。看了题解后,采用双指针,本题又可以称为滑动窗口的方法来做,具体做法主要如下:设定j为结尾指针,i为开始指针,以j为结尾向后遍历数组并计算临时和sum,当sum的值>=target时(=target时还要while循环是因为题目要求的是大于等于,如果去掉=号那么将求的是大于,即总和。209.长度最小的子数组。
2025-09-04 20:00:21
167
原创 【代码随想录算法训练营——Day1】数组——704.二分查找、27.移除元素、977.有序数组的平方、34. 在排序数组中查找元素的第一个和最后一个位置、35.搜索插入位置
题解描述,申请一个与nums.size()大小相同的数组result,令下标从result末尾往前遍历,此时,令两个双指针分别从nums数组的初始和末尾往中间遍历,原因是为了取从最大值到最小值的情况,同时终止条件为i<=j,包含了当nums[i]等于nums[j]的情况,从两边向中间取值的这个双指针法要注意。使用while循环,因为要控制下标的走向,for循环会每一步都控制,不一定是要执行的条件;注意i++和j–的处理位置,以及是否同时计算,可以画图判断下标走向。1.平方后,sort结果数组;
2025-09-03 16:54:49
121
原创 【LeetCode】动态规划——72.编辑距离、10.正则表达式匹配
dp[i][j]的状态由dp[i-1][j]、dp[i][j-1]、dp[i-1][j-1]共同决定,从dp[i-1][j]到dp[i][j]表示word1加上下标为i-1的字符后,与word2的距离差距,可以得知dp[i][j]=dp[i-1][j]+1;同理,此处需判断两个字符串的当前下标为i-1的字符和下标为j-1的字符是否相等,如果相等,就不需要增加操作个数,直接等于dp[i-1][j-1]即可,如果不相等,需要替换一次(不是删除两次,要求最小操作个数),则就等于dp[i-1][j-1]+1。
2025-08-29 20:11:08
357
原创 【LeetCode】动态规划——91.解码方法、300.最长递增子序列、1143.最长公共子序列
定义dp[i]为以第i-1个元素为结尾的最长递增的数的个数,从i=1开始每次往前寻找小于当前第i-1个元素的dp的值,取最大值,同时每次在处理好当前的dp[i]之后,令结果result(注意要初始化为1,为了应对nums=[0]的情况)等于当前与dp[i]相比较的最大值,这样做的原因是dp[i]中的最大值不一定在nums数组的末尾,需要记录中间结果,同时dp数组要初始化为全1,保证每个数的初始最大递增个数都是这个数本身,即为1。LeetCode题目链接。1143.最长公共子序列。300.最长递增子序列。
2025-08-28 13:35:21
391
原创 【LeetCode】动态规划之背包——279.完全平方数(求最小数)、322.零钱兑换(求最小数)、139.单词拆分(求排列数)
本题思路清晰很重要,首先要明确dp数组的定义,dp[i]是指以i为结尾的字符串都由wordDict中的子串成功组成,dp数组设置为bool数组。如果要先遍历物品再遍历背包的话,由于wordDict里子串只出现一次,举例如“applepenapple”字符串就在遍历最后一个apple的时候,没有前面pen结尾的值做支撑,而做不到13位的值为true,因此先遍历物品,即在所有背包中判断是否有该物品出现,由于前后关系的限制,做不到最后的值是正确的,可以看最后的先遍历物品再遍历背包代码,调试理解。
2025-08-27 12:42:04
412
原创 【LeetCode】动态规划——542.01 矩阵
从左上到右下扫描一遍、从右下到左上扫描一遍,初始化全矩阵中为0的值对应的dp数组距离为0(注意错误思路”从四周初始化“)。扫描时,不用再注意对应mat[i][j]值是否为1还是0,而是对全数组都进行min的判断,并且判断里要分两种情况,一种是左侧,一种是上侧(以及一种是右侧,一种是下侧),因此,就要对下标进行边界判断,只要不在初始边界出界的情况下都判断两侧,判断时,由于0已经初始化为了0,为1时自动判断是否+1为最小,而0永远不变,因此可以得出不判断0和1的情况所得的dp数组是正确的。
2025-08-26 16:10:01
260
原创 【LeetCode】动态规划——198.打家劫舍、213.打家劫舍||、337.打家劫舍|||
同时注意特殊情况,在线性情况计算过程中,dp数组初始化时的nums的下标取值为start+1,这要求传入数组下标的距离范围必须大于2,也就是end和start的距离大于1,因此数组需要在长度为2和长度为1时特判(长度为2时start和end相等)。环形的拆解方法:首元素和尾元素不能同时取到,因此分为除去尾元素取前n-1个数、除去首元素取后n-1个数这两种情况,由此将环形问题化为线性问题,重复两次计算最大金额数,取两个值的最大值即可。初始化:第一个房屋可抢的。337.打家劫舍|||213.打家劫舍||
2025-08-26 13:33:20
354
原创 【Gaussian Haircut论文】在Deepseek和Chatgpt的帮助下慢速了解核心方法
1.核心目标2.数据预处理在正式重建前,需要从输入图像中提取以下初始信息:相机参数估计计算每张图像的相机位置、角度、焦距等参数(再如位置、方向,即SfM或COLMAP类似的工作)分割掩码从图像中分理处头发区域(如通过语义分割),排除背景干扰(告诉我们图像上哪些像素是头发)。方向图估计图像中头发的局部方向,帮助后续发丝对齐,这些图能表示出头发纹理的流向或弯曲方向。3.两阶段重建流程。
2025-07-14 15:27:00
811
原创 【BUG】解决已安装anaconda的pycharm中jupyter服务器中出现的import jieba失败问题
目录确认已安装anacondaAnaconda权限问题修改权限结束你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。确认已安装anaconda如图,已选择anaconda解释器,但jupyter服务器中却出现import jieba导包失败的问题,是怎么造成的呢?我们来一起看一下。Anaconda权限问题不知道大家安装的时候是否选的是管理员权限也就是All users,
2024-10-21 10:43:57
677
原创 【Leetcode Python】
并且注意错误点:dp[1]有两间房时,初始值为max(nums[0], nums[1])而不是纯粹等于nums[1]偷某间房屋时,累积金额等于间隔前两间房的金额加上当前房的金额数;不偷时,累计金额就等于前一间房的金额数。状态转移方程:dp[i] = max(dp[i-2]+nums[i], dp[i-1])
2024-06-06 16:16:14
268
原创 【深度学习】2023李宏毅homework1作业一代码详解
same_seed(config [ 'seed' ]) train_data , test_data = pd . read_csv('./covid_train.csv') . values , pd . read_csv('./covid_test.csv') . values # update: .values选中除第一行列名下面的所有行;.values输出的shape一样 (?
2023-03-28 22:08:47
1248
原创 command python: select interpreter resulted in error解决方法
查找到其解决方法是在vscode中按ctrl+shift+p,输入python,选择python: select interpreter。尝试以上操作发现重新打开vscode依然报错。这时再尝试卸载重装vscode,还是不行。在此基础上进行一次关机重启,就恢复了。根据stackflow提示如下。但这时出现了第二条报错。
2023-03-15 19:45:38
3095
原创 【论文阅读】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned from Images
过去的许多工作缺乏3D几何细节、受限于可以生成的网络拓扑、不支持纹理、在合成过程中使用神经渲染器,因此在3D软件中的使用变得不平凡。综上两条,就可以轻松扩展模型以训练高达1024×1024的图像分辨率,从而学习高质量的几何和纹理细节。可微的,通过从2D鉴别器传播到两个生成器分支,来允许从图像进行对抗性训练(图像使用感兴趣对象的掩码)。将可微显式表面提取建模方法、可微渲染技术,2D生成对抗网络结合起来,从2D图像集合来训练模型。训练合成纹理网格的3D生成模型,可以被3D渲染引擎消耗,用于下游应用。
2022-10-04 16:08:55
1436
原创 【论文阅读】AvatarCLIP: Zero-Shot Text-Driven Generation and Animation of 3D Avatars
本文通过输入形状shape、外观appearence、动作motion的自然语言来生成一个3D Avatar,该3D Avatar可以做动作,优势在于便于外行用户操作。
2022-09-25 16:11:21
1273
2
原创 NumPy使用numpy.random.shuffle()函数对两个数组同时洗牌
Python代码:import numpy as npa = np.array([[0,0],[1,1],[2,2]])b = np.array([0,1,2])randomize = np.arange(len(a)) #创建一个整数序列np.random.shuffle(randomize) #打乱整数序列a = a[randomize] #用做两个数组的索引b = b[randomize]输出:[[2 2] [0 0] [1 1]][2 0 1]...
2022-04-12 13:12:58
1343
原创 Windows11镜像网盘链接
Windows11镜像,大小有10.2G,自己用于M1芯片的mac装虚拟机,下载放到网盘里了,链接放上来有需要的人自取!链接: https://pan.baidu.com/s/1RAmQW4KaSCs_eLHJbK9usg 提取码: g6db
2022-01-28 12:02:36
2546
2
原创 (PAT乙级)B1027打印沙漏(格式错误)(已解决)
代码如下#include <stdio.h>//以等差数列看待沙漏,从中间往上每一行符号数为(2 × 行数 - 1)int main() { int N; char sign; scanf("%d %c", &N, &sign); int n = 0; int rowNum,sum; //沙漏一半的行数、到该行为止有多少符号(等差数列求和)...
2019-07-31 10:55:19
567
原创 UE4打包成APK的详细教程(普通安卓应用,VR全景应用尚在探索中,之后若解决会更新)
因为打包apk的学习过程中没有看到有哪篇文档是把全部流程完整描述出来的(就是给完完全全纯小白的博客,对官方文档的理解也不深的情况下)(也可能是我没搜到过吧)在没理解透的情况下走了很多弯路,这个过程确实有点痛苦哈哈,所以打算自己写一篇,希望给其它纯小白遇到相同的问题时能有一点帮助哈~注:我用的UE4版本是4.22.3,以下操作都是在4.22.3版本下操作。首先明确所有要做的步骤大致有哪些:...
2019-07-22 16:09:27
7400
1
原创 一个小的阶段性学习总结(自省与反思)
2019将近半年过去了2019年已经过去了5个月,觉得一直以来的思考(无论是在生活还是学习上还是心理上)都适合写一篇博客作为总结了。在这里我就只写一下学习方面的吧。首先是纠正对写代码的态度。转专业以来不知道为什么,自己一直对写代码都有种恐惧,极度的不自信。当出现bug的时候,内心真的真的是蕨枉的。因为总感觉问题靠自己根本解决不了,思维混乱模糊不清晰,自己都觉得自己没救了。那是一种深深的,深深...
2019-05-27 20:54:21
286
原创 Unity中的动画系统(一)——创建一个动画,Animation窗口各项功能
1.创建一个动画选中一个GameObject在菜单栏中Window处选择Animation,弹出窗口,点击create,并进行命名。创建完毕后,选择创建出的动画控制器,菜单栏Window中选择Animator,弹出动画控制器窗口2.Animation窗口点击“Add Property”,可为动画添加属性窗口中“Samples”的数值为1秒的动画帧数,此处图中显示1秒有60帧...
2019-04-05 16:07:06
7492
原创 Unity API常用方法和类(一)——创建出的脚本中的基本内容,各个事件函数的执行时机和先后顺序
1.打开创建的脚本后其中的基本内容我们自己创建的脚本其对应的类 → 继承自MonoBehaviour类MonoBehaviour类 → 继承自Behaviour类Behaviour类 → 继承自Component类Component类 → 继承自Object类当我们创建脚本之后,Unity会默认给我们Start方法和Update方法。Start方法只执行一次,Update方法每帧执行多...
2019-03-20 20:53:28
395
原创 C#编程基础(中级)(五)——列表List的创建和使用,操作列表的属性和方法,泛型类,泛型方法
1.列表List的创建和使用列表的创建:使用常规方式创建:List<int> Name = new List<type>();使用匿名类型创建:var Name= new List<type>();在创建列表时对其进行初始化 :List<type> Name = new List<type>() { 100, 98, 99 ...
2019-02-25 20:21:51
1134
原创 C#编程基础(中级)(四)——抽象类,密封类和密封方法,派生类的构造方法,访问修饰符,定义和实现接口
1.抽象类抽象类与抽象函数需要声明为abstract。抽象类不能实例化(类是一个模板,抽象类就是一个不完整的模板,我们不能使用不完整的模板去构造对象,但可以声明对象),可以包含普通函数和抽象函数。抽象函数只有函数定义没有函数体。注意:一个类中如果有了抽象函数,这个类就要加上abstract变为抽象类。继承了抽象类的类必须去实现抽象方法,要用override关键字。2.密封类和密封方法...
2019-02-25 11:31:47
338
原创 C#编程基础(中级)(三)——堆和栈,值类型和引用类型,继承,虚函数,隐藏方法,this和base关键字的作用
1.堆和栈内存空间分为堆空间和栈空间。栈空间比较小,但是读取速度快;堆空间比较大,但是读取速度慢。栈:数据只能从栈的顶端插入和删除;堆:堆是一块内存区域,堆里的内存能够以任意顺序存入和移除,程序对堆里存储内容进行的是引用。GC Garbage Collector 垃圾回收器CLR的GC就是内存管理机制,会删除堆中已经没有引用的内容,使得空间可以重复使用。2.值类型和引用类型值类...
2019-02-24 19:42:29
317
原创 C#编程基础(中级)(二)——属性,匿名类型
1.属性定义public/private/protected int name{get{//get code}set{//set code}}定义属性需要名字和类型,属性包含两个块,get块和set块,访问属性和访问字段一样,当取得属性的值的时候,就会调用属性中的get块,所以get块需要一个返回值,且必须是属性的类型;当给属性设置值的时候,就会调用属性中的set块,...
2019-02-24 11:40:42
355
原创 C#编程基础(中级)(一)——异常,异常处理,类,构造函数
1.异常处理查看:按F5出现异常中断,查看异常详细信息处理:try{…}catch( exceptionType e ){…}finally{…}try块包含可能出现的异常代码(一条或多条语句)catch块用来捕捉异常,当代码发生异常,则当异常的类型和catch块中的类型一样的时候,就会执行该catch块,如果catch块的参数不屑,表示发生任何异常都执行这个c...
2019-02-24 09:53:45
337
原创 C#编程基础(初级)(五)——函数,结构函数,委托
1.函数定义:static returnType FunctionName(paramTyme paramName){…return returnValue;}其中static是关键字,注意函数名首字母大写。函数与数组数组参数:函数调用时,需要自己手动构造数组可直接在传参时定义数组。如:int sum = Sum(new int[] { 20, 20, 20, ...
2019-02-21 17:14:16
286
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人