- 博客(93)
- 收藏
- 关注
原创 FSR超分笔记
超分辨率是通过硬件或软件方法提高原有图像分辨率的方法,通过一幅或者多幅低分辨率的图像来得到一幅高分辨率的图像。FSR是AMD提出的一种超分辨率方法,这种方法不借助深度学习,采用数学推导的方式实现,目前已经更新到3.0版本,本篇博客记录FSR1.0的学习记录。FSR分为两个阶段,第一阶段为EASU上采样,第二阶段为RCAS锐化。ω\omegaω我们为像素T定义Feature的计算公式,只计算像素点T上下左右方向的像素点,该Feature可以与变量ω\omegaω一一对应。
2024-08-19 22:32:43
981
原创 代码随想录算法训练营——总结篇
刚开始刷题的时候还是挺兴奋的,和一大群人在一起每天刷题,写总结,而且前期的题目很多我之前刷过,基本上都能自己写出来。在刷题的过程中,我印象最深刻的是掌握了按照步骤来分析各类题目的方法,比如回溯题目有“三部曲”,动态规划有“五部曲”。另一方面,我站在了人生的岔路口,究竟是继续深造,还是早点进入社会工作赚钱,每天都在精神内耗。恍惚间,我突然发现,距离春招也不过两个月时间了。
2024-02-19 22:21:43
479
原创 代码随想录算法训练营第六十天 | 84. 柱状图中最大的矩形 [End]
文章讲解/视频讲解:https://programmercarl.com/0084.%E6%9F%B1%E7%8A%B6%E5%9B%BE%E4%B8%AD%E6%9C%80%E5%A4%A7%E7%9A%84%E7%9F%A9%E5%BD%A2.html。对柱状图数组进行遍历,分别计算以当前遍历到的柱状图为高,能够构成的矩形的最大宽度,从而计算出当前构成的矩形的面积。这两个下标的范围构成了矩形的最大宽度。个非负整数,用来表示柱状图中各个柱子的高度。求在该柱状图中,能够勾勒出来的矩形的最大面积。
2024-02-10 12:11:53
528
原创 代码随想录算法训练营第五十九天 | 503. 下一个更大元素 II、42. 接雨水
文章讲解/视频讲解:https://programmercarl.com/0503.%E4%B8%8B%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%A4%A7%E5%85%83%E7%B4%A0II.html。首先从左向右遍历,记录下每个柱子左边的最长的柱子的长度。是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。我的想法是,用单调栈遍历两遍数组nums,第一遍遍历的结果保留,第二遍遍历在原来的基础上继续。看了一下,我这种其实是双指针写法。
2024-02-09 13:08:39
494
原创 代码随想录算法训练营第五十八天 | 739. 每日温度、496. 下一个更大元素 I
从后往前遍历,用一个单调栈存储元素和它对应的下标,这个栈是从大到小存储的,即栈底比栈顶大。如果单调栈为空或者栈顶元素大于当前遍历的值,则将当前遍历的值存入单调栈中。如果栈顶元素小于等于当前遍历的值,则弹出栈顶,直到单调栈为空或者栈顶元素大于当前遍历值为止。接着遍历nums1数组,通过hashmap找到在nums2中对应的位置,再根据上一步得出下一个更大元素。在当前元素加入单调栈时,如果单调栈为空,那么说明没有下一个更高温度,结果用0表示;如果单调栈非空,结果为栈顶的下标减去当前元素的下标。
2024-02-08 11:52:55
463
原创 代码随想录算法训练营第五十七天 | 647. 回文子串、516. 最长回文子序列
文章讲解/视频讲解:https://programmercarl.com/0516.%E6%9C%80%E9%95%BF%E5%9B%9E%E6%96%87%E5%AD%90%E5%BA%8F%E5%88%97.html。首先是初始化,当i == j时,只有一个字符,此时最长回文子序列长度为1,可以直接设置dp数组的所有位置为1。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。,如果不等,可以选择丢弃左边的字符或者丢弃右边的字符,选择结果最大的值,即。
2024-02-07 21:34:22
454
原创 代码随想录算法训练营第五十六天 | 583. 两个字符串的删除操作、72. 编辑距离
文章讲解/视频讲解:https://programmercarl.com/0583.%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%88%A0%E9%99%A4%E6%93%8D%E4%BD%9C.html。中最长公共子序列,然后根据最长公共子序列的长度,计算最小步数。用动态规划来处理,设置一个二维dp数组,其中。可以删除任意一个字符串中的一个字符。代表0 ~ i - 1中的。与0 ~ j - 1中的。与0 ~ j - 1的。
2024-02-06 13:56:32
486
原创 代码随想录算法训练营第五十五天 | 392.判断子序列、115.不同的子序列
文章讲解/视频讲解:https://programmercarl.com/0115.%E4%B8%8D%E5%90%8C%E7%9A%84%E5%AD%90%E5%BA%8F%E5%88%97.html。用两层循环来遍历,其中第一层循环遍历字符串s,第二层循环遍历t,不过第二层循环不是从头开始的,而是接续着上一轮遍历。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。代表字符串s下标0~i范围构成的子字符串,是否为字符串t的子序列。
2024-02-05 22:46:13
478
原创 代码随想录算法训练营第五十三天 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和
文章讲解/视频讲解:https://programmercarl.com/0053.%E6%9C%80%E5%A4%A7%E5%AD%90%E5%BA%8F%E5%92%8C%EF%BC%88%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%EF%BC%89.html。要想保证绘制的直线不与任何其他连线相交,那么nums1[i]在nums1中所有连线元素的顺序一定和nums2[j]在nums2中所有连线顺序一样。有关,记录了一个局部最优解,最终结果为这些局部最优解的最大值。
2024-02-03 13:56:59
896
原创 代码随想录算法训练营第五十二天 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
文章讲解/视频讲解:https://programmercarl.com/0674.%E6%9C%80%E9%95%BF%E8%BF%9E%E7%BB%AD%E9%80%92%E5%A2%9E%E5%BA%8F%E5%88%97.html。注意,不连续递增子序列跟前0 ~ i-1个状态有关,连续递增子序列只跟前一个状态有关。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。与上一题类似,不过更简单一些,设置一个一维dp数组,其中。其中,j是内层循环遍历的下标,范围为。
2024-02-02 12:48:02
472
原创 代码随想录算法训练营第五十一天 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
这道题和买卖股票II相似,只不过这里多了一项冷冻期的约束:即卖出股票后,无法在第二天买入股票,冷冻期为1天。代表已经卖出股票,当前未持有股票,可以获得的最大现金。**注意:**这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。表示此时未交易,如果交易的话,当前的现金为-fee,小于0,因此还是不交易获得的利润更大。这道题也与买卖股票II类似,但是多了一道手续费:每一次买入卖出的过程,收取一次手续费。表示持有股票,但未卖出时,可以获得的最多现金,代表了交易股票的手续费用。
2024-02-01 22:07:51
487
原创 代码随想录算法训练营第五十天 | 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV
文章讲解/视频讲解:https://programmercarl.com/0123.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAIII.html。这道题是上一道题的扩展,上一道题相当于这里k = 2的特殊情况。**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。表示未持有且卖出一次,
2024-01-31 17:15:21
549
原创 从零开始的OpenGL光栅化渲染器构建6-PBR光照模型
PBR,或者基于物理的渲染(Physically Based Rendering),它指的是一些在不同程度上都基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。正因为基于物理的渲染目的便是为了使用一种更符合物理学规律的方式来模拟光线,因此这种渲染方式与我们原来的Phong或者Blinn-Phong光照算法相比总体上看起来要更真实一些。
2024-01-31 17:04:50
1239
原创 代码随想录算法训练营第四十九天 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
文章讲解/视频讲解:https://programmercarl.com/0122.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAII%EF%BC%88%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%EF%BC%89.html。和上题类似,可以构建一个二维的dp数组,其中dp数组的第二维大小为2。代表在第i天时,不持有股票获得的最大现金。天数中,可以获得的最大利润。
2024-01-30 23:07:21
507
原创 代码随想录算法训练营第四十八天 | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。文章讲解/视频讲解:https://programmercarl.com/0198.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D.html。
2024-01-29 21:25:00
1069
原创 肌肉骨骼模拟
对于角色动画,目前的技术主要包括这两种方式:基于运动学模拟的动画,和基于动力学模拟、即基于物理模拟的动画。第一种方式的应用相当广泛,我们接触的游戏大部分都采用了基于运动学的方式去实现动画,这种方式性能优秀,便于实现,然而却缺少了许多真实性。基于物理模拟的方式来实现动画,对性能的要求比较高,且实现起来比较复杂,优点是交互效果更真实。对人体的肌肉骨骼进行模拟,属于物理模拟的动画实现。肌肉的模拟较为复杂,涉及到生物力学这门交叉学科的内容。目前较为通用的肌肉模拟的模型是希尔模型(Hill model)。
2024-01-29 21:08:21
1738
原创 代码随想录算法训练营第四十六天 | 139.单词拆分、多重背包
文章讲解:https://programmercarl.com/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80%E5%A4%9A%E9%87%8D%E8%83%8C%E5%8C%85.html。构成的子字符串能不能被拼接出来。由于这里需要考虑到每个字符串的拼接先后顺序,因此需要采用先遍历背包容量,再遍历物品的方法。这是一个完全背包问题,其中wordDict中的每个字符串为物品,字符串s为背包。
2024-01-27 23:58:59
565
原创 代码随想录算法训练营第四十五天 | 70. 爬楼梯 (进阶)、322. 零钱兑换 、279.完全平方数
这道题可以转化为一个完全背包问题,物品是每次可以爬的台阶数(从1到m,可取无限次),背包就是当前的台阶顶。题目问的是有多少种不同的方法可以爬到楼顶,这是计算有多少个排列的问题,因此先遍历背包容量,再遍历物品。是一个完全背包问题,由于题目要求的是最少的硬币个数,因此归为求解组合问题或求解排列问题均可。就当做组合问题来求解,即求解刚好装满背包时,物品组合的最小个数。完全背包问题,其中每个小于n的完全平方数为物品,整数n为背包容量。代表和为j的完全平方数的最小数量,初始化时,令。,表示不同面额的硬币;
2024-01-26 22:12:38
532
原创 代码随想录算法训练营第四十四天 | 完全背包问题、518. 零钱兑换 II 、377. 组合总和 Ⅳ
文章讲解/视频讲解:https://programmercarl.com/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80%E5%AE%8C%E5%85%A8%E8%83%8C%E5%8C%85.html。dp[j]代表着当前遍历到的硬币中,可以组合成总值为j的组合数。这道题也是完全背包的应用,和上一题很类似,只不过上一题求的是组合,这道题求的是排列。请你计算并返回可以凑成总金额的硬币组合数。
2024-01-25 15:20:13
599
原创 代码随想录算法训练营第四十三天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
1049. 最后一块石头的重量 II有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x
2024-01-24 15:21:45
1058
原创 代码随想录算法训练营第四十二天 | 01背包问题、416. 分割等和子集
文章讲解/视频讲解:https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html。看了卡哥的教程,这里的dp数组也可以定义为:dp[j]表示背包总容量是j,放进物品后,背的最大重量为dp[j]。接着可以考虑将二维dp数组压缩为一维滚动数组,类似01背包中的数组压缩,在第二层遍历j时,从后往前遍历即可。时,第一层的dp数值为true,其余全为false。
2024-01-23 16:00:25
481
原创 代码随想录算法训练营第四十一天 | 343.整数拆分、66.不同的二叉搜索树
递推公式:dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量],所以递推公式为:dp[i] += dp[j - 1] * dp[i - j],j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量。注意,因为这里dp下标的每一个值为k个正整数乘积的最大值,而k大于等于2,因此存在一种可能,j > dp[j],比如当j = 3时,dp[j] = 2。首先设置dp数组,dp数组中的每一位代表着当前下标所代表的整数,可以得到的乘积最大值。
2024-01-22 22:01:26
506
原创 从零开始的OpenGL光栅化渲染器构建5-阴影
阴影是光线被阻挡的结果;当一个光源的光线由于其他物体的阻挡不能够达到一个物体的表面的时候,那么这个物体就在阴影中了。阴影能够使场景看起来真实得多,并且可以让观察者获得物体之间的空间位置关系。
2024-01-21 18:22:26
1334
原创 从零开始的OpenGL光栅化渲染器构建4-延迟渲染及其类似应用
首先介绍一下什么是延迟渲染。延迟渲染是一种先计算场景中的顶点、颜色、法线等信息,将其存入缓冲,再进行光照计算的渲染技术,与直接渲染是相对的概念。为了详细介绍延迟渲染,我们首先需要了解帧缓冲,以及帧缓冲的应用,之后介绍基于帧缓冲技术的延迟渲染。
2024-01-21 17:25:30
1350
原创 从零开始的OpenGL光栅化渲染器构建3-法线贴图和视差贴图
我们可以用一张纹理贴图来表现物体表面的基础反射颜色,也可以用一张镜面反射贴图,来指派表面是否产生高光。除此之外,我们可以用贴图来存储表面的法线信息,以及高度信息,从而让渲染效果更加精细。
2024-01-21 16:07:21
1145
原创 代码随想录算法训练营第三十九天 | 62.不同路径、62.不同路径 II
因为机器人只能向下或向右移动,如果在第一层或第一列遇到了石块,那么第一层或第一列的其他位置都到达不了。在第一层,从左往右遍历,如果没有遇到石块,当前的。然后是遍历顺序,用两层循环来遍历,外层循环是从上到下,内层循环是从左到右进行遍历。建立一个二维的dp数组,其中每一个下标代表了到达当前位置有多少条不同的路径。与不同路径类似,这道题的dp数组也可以压缩成一维的,类似于滚动数组。首先是初始化,因为机器人只能够向下或向右移动,因此对于所有的i,遍历顺序同样是两层循环,外层是从上到下,内层是从左往右遍历。
2024-01-20 20:47:39
1029
原创 代码随想录算法训练营第三十八天 | 斐波那契数、爬楼梯、使用最小花费爬楼梯
初始化时,令dp[0] =1, dp[1] = 1,dp[1] = 1好理解,dp[0]可以从示意中看出,dp[2] = dp[0] + dp[1] = 2,因此dp[0] = 1,dp[1] = 1。代入示例1,dp[2] = min(dp[0] + 10, dp[1] + 15) = 10,dp[3] = min(dp[1] + 15, dp[2] + 20) = 15,结果正确。dp数组的递推公式为:dp[i] = dp[i - 1] + dp[i - 2]。个台阶向上爬需要支付的费用。
2024-01-19 14:48:25
547
原创 代码随想录算法训练营第三十七天 | 738.单调递增的数字、968. 监控二叉树
题目链接:738. 单调递增的数字当且仅当每个相邻位数上的数字 和 满足 时,我们称这个整数是单调递增的。给定一个整数 ,返回 小于或等于 的最大数字,且数字呈 单调递增 。将整数n转化成字符串num来处理,遍历num的每一位,如果当前下标index指向的数字num[index]大于num[index+1],则将num[index]减一,并回退进行判断,一直回退到当前[0,index]构成的数字单调递增为止。如果在遍历的过程中有回退操作,那么[0, index]构成的数字一定小于原数字,为了使获得
2024-01-18 13:27:09
1110
原创 代码随想录算法训练营第三十六天 | 435.无重叠区间、763.划分字母区间、56.合并区间
如上图,区间1、2、3重合,在移除时,需要移除区间2和区间3,保留右边界最小的区间1。区间1的右边界,区间5属于第二个非交叉区间,这时,因为区间5的右边界大于区间4的右边界,需要保。右边界,要么这个区间在下一个非交叉区间中要被移除。区间是按照右边界来判断的,只要一个区间的左边界小于一个非交叉区间的最小右边界,那么这个区间。反之,如果一个区间不属于这个非交叉区间,那么这个区间要么左边界大于等于这个非交叉区间的最小。然后对每个区间进行遍历,每一次遍历的过程中,对区间取并集,如果当前区间不在之前的并集中,则。
2024-01-17 15:01:36
1023
原创 代码随想录算法训练营第三十五天 | 860.柠檬水找零、406.根据身高重建队列、用最少数量的箭引爆气球
由于数组已经按身高从大到小排序,而k表示的是前面正好有k个身高大于当前这个人的人。然后我们开始找重叠的区间,对于当前的重叠区间curBounds,如果第i个气球的x_start小于等于curBounds的x_end,我们便把这个气球纳入当前的重叠区间,并更新重叠区间curBounds。因为10美元只能用于顾客支付20美元时的找零,而5美元既可以用于顾客支付10美元也可以用于20美元,因此应该尽量采用第一种组合。支付20美元时,可以用10美元 + 5美元找零,也可以用5美元 + 5美元 + 5美元找零。
2024-01-16 14:54:55
534
原创 代码随想录算法训练营第三十四天 | 1005.K次取反后最大化的数组和 、134. 加油站、135. 分发糖果
以示例1,gas = [1, 2, 3, 4, 5],cost = [3, 4, 5, 1, 2]为例,净增值数组gain = [-2, -2, -2, 3, 3],如果从下标0开始,净增数组从下标0开始的累加结果为:accumulates = [-2, -4, -6, -3, 0],只有最后一个下标非负,其余累加结果都是负的,说明从下标0开始不成立。注意到,累加数组随着下标i的移动,每一位都是同时减去-gain[i - 1]这个数值,而累加数组中的最小值始终在下标2这个位置,是不变的。
2024-01-15 14:21:47
1033
原创 从零开始的OpenGL光栅化渲染器构建2-冯式光照
因此,如果我们打算把法向量乘以一个模型矩阵,我们就要从矩阵中移除位移部分,只选用模型矩阵左上角3×3的矩阵(注意,我们也可以把法向量的w分量设置为0,再乘以4×4矩阵;平行光只需要一个方向来表示光的位置属性,即该光源发射出的所有光线都是在一个方向上的,光线在任何位置强度都不衰减。生活中的一个例子是灯泡。我们用光的颜色乘以一个很小的常量环境因子,再乘以物体的颜色,然后将最终结果作为片段的颜色。镜面反射同理,我们可以采用一张镜面光贴图,根据片段不同的位置,设置镜面放射的反射度,控制物体表面的反射程度。
2024-01-14 20:26:07
1488
原创 代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机II 、 55. 跳跃游戏、45.跳跃游戏II
从后往前遍历,对于当前下标i,记step = nums[i],如果在[i+1,i+step]范围内有下标可达,则当前下标可达。然后从后往前遍历,对于当前下标i,记step = nums[i],在[i+1,i+step]范围内寻找stepsToLast最小的值,取该值加1,作为当前下标i到达最后一个下标的最小跳跃次数。如果从当前下标i开始跳,能够超过lastAccess,则说明该下标可到达最后一个下标,每一次找到股票走势图的谷底,买入,然后从谷底出发,从后找到最近的一处谷顶,卖出,之后同理。
2024-01-14 00:25:05
569
原创 代码随想录算法训练营第三十一天 | 455.分发饼干、376. 摆动序列、53. 最大子序和
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。
2024-01-13 00:10:35
1082
原创 代码随想录算法训练营第三十天 | 332.重新安排行程、51. N皇后、37. 解数独
题目链接:332.重新安排行程给你一份航线列表 ,其中 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从 (肯尼迪国际机场)出发的先生,所以该行程必须从 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。采用回溯的方法解决,最暴力的方法就是直接回溯,通过判断路径是否是否等于tickets.size() + 1来决定是否结束。为了获得字典序最小的结果,我将tickets排了序
2024-01-11 14:10:14
997
原创 代码随想录算法训练营第二十九天 | 491.递增子序列、46.全排列、47.全排列 II
去重是横向遍历时需要做的事情,可以使用一个unordered_set,在每一层遍历时,判断当前遍历的元素是否已经遍历过,如果遍历过,那么就跳过。这里需要判断去重,去重的方法是:横向遍历过程中,判断该下标对应的元素是否已遍历过,如果已遍历过,则跳过。也可以不用unordered_set,对nums排序,然后在横向遍历时,判断当前元素与上一个元素是否相同,如果相同则跳过。分为横向和纵向两个维度的遍历,横向遍历是遍历当前元素,添加入路径path,纵向遍历是递归地遍历path的下一个元素。
2024-01-10 15:11:37
931
原创 代码随想录算法训练营第二十八天 | 93.复原IP地址、78.子集、90.子集II
遍历:横向遍历确定每层的分隔位置,纵向遍历则递归地确定下一个分隔的位置。回溯的横向遍历是确定每层的分隔位置,纵向遍历则是递归地确定下一个分隔的位置。去重的思路:先把原数组nums排好序,然后回溯函数的每一层在遍历时,判断当前遍历的值和上一个遍历的值是否相等,如果相等则跳过。回溯函数的遍历:每一层的横向遍历,遍历判断加入当前元素和不加入当前元素两种情况,纵向遍历是递归寻找下一个元素。回溯函数的参数:当前已加入的元素集合path,当前遍历到的元素下标starti。,用以表示一个 IP 地址,返回所有可能的。
2024-01-09 12:08:48
562
原创 代码随想录算法训练营第二十七天 | 39. 组合总和、40.组合总和II、131.分割回文串
参考三数之和中的去重方法,我们在横向遍历的过程中,如果当前下标的元素和上一个下标的元素值相同,则跳过该元素,因为此时获得的组合结果一定是重复的。横向遍历的过程是找到划分中当前的分隔,纵向遍历的过程是找到下一个分隔。第一步,确定回溯函数的参数,我们需要指定当前已有元素的组合path,当前已经遍历到的下标starti,组合中元素和与target的差值left。第一步,确定回溯函数的参数,我们需要指定当前已有元素的组合path,当前已经遍历到的下标starti,组合中元素和与target的差值left。
2024-01-08 12:13:35
933
原创 法线变换矩阵的推导
首先,法向量只是一个方向向量,不能表达空间中的特定位置。因此,如果我们打算把法向量乘以一个模型矩阵,我们就要从矩阵中移除位移部分,只选用模型矩阵左上角3×3的矩阵(注意,我们也可以把法向量的w分量设置为0,再乘以4×4矩阵;当我们应用一个不等比缩放时(注意:等比缩放不会破坏法线,因为法线的方向没被改变,仅仅改变了法线的长度,而这很容易通过标准化来修复),法向量就不会再垂直于对应的表面了,这样光照就会被破坏。这是因为旋转矩阵和等比缩放矩阵都是正交矩阵,正交矩阵有一个属性:矩阵的转置等于矩阵的逆。
2024-01-07 16:01:12
1286
原创 代码随想录算法训练营第二十五天 | 216.组合总和III、 17.电话号码的字母组合
回溯分为横向和纵向两个方向的搜索,对于这道题来说,横向就是对当前数字i对应的字母映射的搜索,纵向则是对于输入的数字字符串的搜索。首先确定回溯的函数参数,参数包括当前的组合path,当前遍历到的数字cur,组合的目标大小k,以及当前组合的总和与目标数字n的差值left。在横向搜索过程中,依次遍历当前数字对应的字母列表,在每一次的遍历过程中,递归地对cur + 1的数字字符串下标进行纵向搜索。参数应该包括当前的字母组合path,当前遍历到的数字字符串下标cur,以及对于数字字符串digits的引用。
2024-01-06 20:39:48
625
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人