首页
学习
活动
专区
圈层
工具
发布

【算法一周目】双指针(2)

有效三角形的个数 题目链接:611. 有效三角形的个数 题目描述:给定一个包含非负整数的数组nums,返回其中可以组成三角形三条边的三元组个数。...解法一:排序+暴力求解 先排序,然后用3层for循环枚举所有的三元组。判断是否能构成三角形。...解法二:排序+双指针 先对数组排序 固定一个最长边,然后在比这条边小的有序数组种找出一个二元组,使二元组之和大于这个最长边,由于数组有序,可以使用双指针。...和为s的两个数字 题目描述:输入一个递增排序的数组和一个数字 s,在数组中查找两个数,使得它们的和正好是 s。如果有多对数字的和等于 s,则输出任意一对即可。...请你找出并返回满足下述全部条件且不重复的四元组[nums[a], nums[b], nums[c], nums[d]](若两个四元组元素一一对应,则认为两个四元组重复) 解题思路 解法:排序+双指针 这道题是三数之和的升级版

12410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【优选算法篇】双指针的华丽探戈:深入C++算法殿堂的优雅追寻

    分享给更多人:欢迎分享给更多对 C++ 感兴趣的朋友,一起学习双指针的基础与进阶!...让我们继续双指针的优雅舞步,开启 C++ 算法世界的浪漫探索! 第一章:有效三角形的个数 1.1 有效三角形的个数 题目链接:611....有效三角形的个数 题目描述:给定一个包含非负整数的数组 nums,返回其中可以组成三角形三条边的三元组个数。...和为s的两个数字 题目描述:输入一个递增排序的数组和一个数字 s,在数组中查找两个数,使得它们的和正好是 s。如果有多对数字的和等于 s,则输出任意一对即可。...我们可以利用双指针思想来对暴力枚举做优化: 先排序; 然后固定一个数 a; 在这个数后面的区间内,使用「双指针算法」快速找到两个数之和等于 -a 即可。

    18620

    【leetcode刷题】:双指针篇(有效三角形的个数、和为s的两个数)

    一、有效三角形的个数 题目解析 有效三角形的个数【点击跳转】 题目意思很好理解:就是在一堆非负整数的数组里,随机选三个数进行搭配,然后统计这个数组中任意三个数能组成三角形的组合个数。...+ 双指针 首先根据题目的意思是数组里的元素都是大于等于零的,这里我们就可以利用组成三角形的一个特性: 假设三个数a、b、c,最大数是c,那么: 1、a + c > b 2、b + c > a 3、...a + b > c 这是判断是否能构成三角形的条件 其实第一种和第二种情况可以合并成一种情况,因为c是最大的那个数,一个最大的数加一个大于零的数,其结果一定是大于另外一个数的 知道了这个特性,我们的算法就有了优化的空间...大的数,left加上right已经大于最大的数了,那么一个大于left的数加上right,那必定是大于最大的数c的,所以left往右就没必要计算了,因为left与right这个区间再加上最大数构成的三个数一定是能构成三角形的...代码编写 C++代码: class Solution { public: int triangleNumber(vector& nums) { // 排序

    12500

    入门浅谈C语言

    腾班小怪的博客-CSDN博客 C语言 格式转换字符_腾班小怪的博客-CSDN博客 常用的转义字符 C语言_腾班小怪的博客-CSDN博客 C语言 运算符与表达式_腾班小怪的博客-CSDN博客 C语言 条件运算符...: 唯一的一个三目运算符_腾班小怪的博客-CSDN博客 C语言 常用标准库函数 初学者常用_腾班小怪的博客-CSDN博客 函数的调用约定 _cdecl_心 灵 骇 客的博客-CSDN博客 C语言 变量的存储类型..._腾班小怪的博客-CSDN博客 排序  冒泡排序 C语言 经典版和升级版_腾班小怪的博客-CSDN博客 选择排序 C语言_腾班小怪的博客-CSDN博客 快速排序 C语言_腾班小怪的博客-CSDN博客 插入排序...直接插入 C语言_腾班小怪的博客-CSDN博客 希尔排序 C语言_腾班小怪的博客-CSDN博客 经典应用  汉诺塔 详解 C C++ Python_腾班小怪的博客-CSDN博客 图灵机 X+1 C语言..._腾班小怪的博客-CSDN博客 大数模拟之加法 高精度 C语言_腾班小怪的博客-CSDN博客 打印图案  打印三角形_腾班小怪的博客-CSDN博客 打印棱形 for fun_腾班小怪的博客-CSDN博客

    24410

    掌握归并排序:理解原理并用C++实现

    掌握归并排序:理解原理并用C++实现 归并排序是一种经典的排序算法,它的主要思想是分而治之。现在,让我们通过一个生动的例子来理解归并排序的原理,然后再用C++来实现它。...假设你有一堆乱序的扑克牌,你的任务是把它们按照数字从小到大排列。归并排序的思路就是,先把这堆牌一分为二,然后再把每一堆牌分别一分为二,一直这样分下去,直到每一堆只剩下一张牌。...你每次从两堆牌中各取出顶上的一张,比较它们的数字大小,把较小的那张放在新的一堆牌的最下面。然后再从两堆牌的顶上各取一张,重复这个比较和放牌的过程,直到两堆牌都被取完。这样,你就得到了一堆有序的牌。...merge函数,用于合并两个有序的子数组,然后定义了一个mergeSort函数,用于递归地将数组分成两部分并排序。...最后,在main函数中调用mergeSort函数来对一个数组进行排序。 时间复杂度O(nlogn) 空间复杂度O(n)

    19000

    Unity Mesh基础系列(一)生成网格(程序生成)

    除了在我们自己的组件中保存对它的引用之外,还必须将它分配给mesh filter才行。一旦处理好了顶点,就可以把它们交给网格了。 ? ?...我们现在有一个三角了,但是要注意,这里我们使用的三个点是一条直线上的。这会导致程序产生一个不可见的退化三角形,其实就是一条直线。这里前两个顶点很好,但是最后一个我们应该跳到下一行的第一个顶点才对。...(第一个正方形) 这样每个三角形的顶点都用一行代码,效率太低了,我们可以通过将整个第一行瓷砖转换成一个循环来创建整个第一行。...法线是一个垂直于表面的矢量。我们总是使用单位长度的法线,并用它们指向表面的外部,从而区分表面的内外。 法线还可以用来确定光线击中表面的角度(如果有的话)。它的具体使用方式取决于shader。...Mesh.RecalculateNormals 计算每个顶点的法线是通过计算哪些三角形与该顶点相连,先确定这些平面三角形的法线,对它们进行平均,最后对结果进行归一化处理。 ? ?

    11.4K41

    Direct3D 11 Tutorial 2: Rendering a Triangle_Direct3D 11 教程2:渲染一个三角形

    我们必须为三个顶点创建一个足够大的顶点缓冲区,并用顶点位置填充它。 在Direct3D 11中,应用程序必须在创建缓冲区资源时指定缓冲区大小(以字节为单位)。...前三个顶点定义第一个三角形,后三个顶点定义第二个三角形。 此拓扑称为三角形列表。 三角形列表具有易于理解的优点,但在某些情况下它们效率非常低。 当连续渲染的三角形共享顶点时会出现这种情况。...例如,图3a左侧显示了由两个三角形组成的正方形:ABC和CB D.(按照惯例,三角形通常通过按顺时针顺序列出它们的顶点来定义。)...如果我们使用三角形列表将这两个三角形发送到GPU ,我们的顶点缓冲区会这样: A B C C B D 请注意,B和C在顶点缓冲区中出现两次,因为它们由两个三角形共享。 ?...顶点着色器负责将三角形的各个顶点转换为正确的位置。像素着色器负责计算三角形的每个像素的最终输出颜色。这将在下一个教程中详细介绍。

    2K20

    Alpha混合物体的深度排序

    现在我们就没法对它们进行排序了, 因为A的一部分比B近, 而另一部分又比B远. 甚至我们不需要两个不同的物体来复现这个问题. 组成玻璃杯的那些三角形会怎样?...要让它们显示正确, 需要在前面的绘制之前先绘制后面的. 所以, 只对物体进行排序是不够的: 我们要对每一个三角形进行排序. 问题是, 对每个三角形进行排序的代价太大!...比如说两个透明的三角形相交时会怎样呢? 没有方法对这样的三角形进行排序, 因为我们需要把B的上半部分画在A的前面, A的下半部分画在B的前面....如果你仅仅对一些大的的物体进行排序, 速度很快但不是很精确; 如果你对一些小物体进行排序(包括三角形个体的极限情况), 速度会慢一些, 但更加精确....) 油画家算法对透明的物体排序(两个透明物体相交时仍然会有排序错误) 依赖背面剔除来对单个透明物体上的三角形排序(如果物体不是凸面体也会产生错误) 结果并不是非常完美, 但是非常高效, 易于实现, 对于大多数游戏来说也够用了

    88820

    浅谈 GPU图形固定渲染管线

    应用程序阶段(CPU) 应用程序阶段,通过高级编程语言(C、C++、JAVA)进行开发,与CPU、内存打交道,主要任务是识别出潜在可视的网格实例,并把它们及其材质呈交给图形硬件以供渲染。...因此我们希望能够设计一种数据结构来解决大场景的裁剪问题,它能够迅速丢弃大量完全不接近摄像机平截头体的场景部分,这样才能进行更加仔细的平截头体剔除,此数据结构更可以帮助对场景中的几何物体排序。...视口变换的任务是将顶点坐标从投影平面转换到屏幕的一个矩形区域中,该区域称为视口。...然后对超出视口外的三角形进行裁剪(视口裁剪),如果有一个三角形其中一个顶点位于画面外,另外两个顶点位于画面内,我们看到的将是一个四边形,而这个四边形又被划分为两个小的三角形。...这个阶段把几何阶段送过来的三角形转化为片段,并对片段进行着色。片段经过裁剪测试、alpha测试、模板测试、深度测试、融合等处理后,最终和帧缓冲混合。

    2.9K80

    手把手:用OpenCV亲手给小扎、Musk等科技大佬们做一张“平均脸”(附Python代码)

    面部特征检测案例 步骤二:坐标转换 我们手头的面部图像的尺寸很可能是不一样的,同时面部也很可能处于图像的不同位置,所以我们需要标准化面部特征,并把它们放到同一参考坐标系下。...(不想学数学的同学可以简单略过) 如果你想对一个正方形作出转换,使正方形在x和y方向上分别缩放s_x和s_y,同时将它旋转theta角度,再在x和y方向上平移t_x和t_y,对应的相似变换矩阵就是 对于一个...Delaunay三角剖分将图像分解成若干三角形。Delaunay三角剖分的结果是一个三角形列表,用76个点(68个人脸基准点+8个边界点)的序号表示。...下面的矩阵展示了部分三角形列表,我们看到,关键点62、68和60形成一个三角形,32、50和49形成另一个三角形,等等。...注意,左图的三角形1对应中图的三角形1。用左图三角形1的三个顶点及其对应的中图三个顶点计算变换矩阵。用这一变换将左图三角形1中的所有像素变换到中图的三角形1中去。

    1.7K70

    【优选算法篇】两队接力跑:双指针协作解题的艺术(下篇)

    分享给更多人:如果你觉得这篇文章对你有帮助,欢迎分享给更多对C++算法感兴趣的朋友,让我们一起进步!...1.1.1 基本应用场景: 查找数组中的一对数:给定一个有序数组,找出和为指定目标值的两数。 字符串问题:寻找不含重复字符的最长子串、回文子串等。 2. 题目1:盛最多水的容器 题目链接:11....有效三角形的个数 - 力扣(LeetCode) 题目描述: 3.1 算法思路: 3.1.1 排序 将数组 nums 按升序排序,使得对于任意 i<j<k,我们有:nums[i]≤nums[j]≤nums...3.4 总结: 该算法通过排序和双指针的结合,有效地减少了重复计算,是解决三角形个数问题的经典方法。排序后的双指针遍历不仅逻辑简单,而且复杂度低,非常适合处理大规模数据。 4....4.4 总结: 双指针法适合于在已排序的数组中查找满足特定条件的元素对。它利用了数组的顺序性,通过调整指针来高效地减少计算量,从而在 O(n) 时间内找到目标结果。

    19300

    浅谈 GPU图形固定渲染管线

    应用程序阶段(CPU) 应用程序阶段,通过高级编程语言(C、C++、JAVA)进行开发,与CPU、内存打交道,主要任务是识别出潜在可视的网格实例,并把它们及其材质呈交给图形硬件以供渲染。...因此我们希望能够设计一种数据结构来解决大场景的裁剪问题,它能够迅速丢弃大量完全不接*摄像机*截头体的场景部分,这样才能进行更加仔细的*截头体剔除,此数据结构更可以帮助对场景中的几何物体排序。...视口变换的任务是将顶点坐标从投影*面转换到屏幕的一个矩形区域中,该区域称为视口。...然后对超出视口外的三角形进行裁剪(视口裁剪),如果有一个三角形其中一个顶点位于画面外,另外两个顶点位于画面内,我们看到的将是一个四边形,而这个四边形又被划分为两个小的三角形。...这个阶段把几何阶段送过来的三角形转化为片段,并对片段进行着色。片段经过裁剪测试、alpha测试、模板测试、深度测试、融合等处理后,最终和帧缓冲混合。

    2.6K20

    2023 CSP-J1 试题+参考答案

    一、 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 1. 在C++中,下面哪个关键字用于声明一个变量,其值不能被修改?( )。...,求将第一个字符串转换为第二个字符串所需要的最少操作次数。...答案: B拓扑排序是有向无环图中对顶点进行排序的一种方法,使得所有的有向边从排在前面的顶点指向排在后面的顶点。...根据上述关系,只有顶点 1 没有前置依赖,所以它必须是拓扑排序的第一个顶点。 接下来,根据关系 (1,2) 和 (1,3),顶点 2 和 3 是直接依赖于顶点 1 的,它们应该在 1 后面。...这段代码是一个计算三角形面积的程序。代码中包含了输入三个变量a、b、c,表示三角形的三边长度。然后通过函数f计算三角形的面积,并通过cout输出结果。 代码的大致执行过程如下: 1.

    1.1K40

    OpenGL 图形渲染流程入门

    所有这些阶段都是高度专门化的(它们都有一个特定的函数),并且很容易并行执行。...正是由于它们具有并行执行的特性,当今大多数显卡都有成千上万的小处理核心,它们在 GPU 上为每一个(渲染管线)阶段运行各自的小程序,从而在图形渲染管线中快速处理你的数据。...之后就是对超出屏幕外的三角形进行裁剪。 这里的裁剪怎么理解呢?...三角形遍历阶段会根据上一个阶段的计算结果来判断一个三角网格覆盖了哪些像素,并使用三角网格 3 个顶点的顶点信息对整个覆盖区域的像素进行插值。下图展示了三角形遍历阶段的简化计算过程。...用一种通俗的说法来解释的话,就是比如三维空间内有两个从摄像机角度看过去一前一后的三角形,它们重叠部分的显示区域,每个像素对应两个片元;不重叠的部分,像素和片元一一对应。

    2.7K10

    挑战NumPy100关,全部搞定你就NumPy大师了 | 附答案

    创建一个5x5矩阵, 其对角线下方的数值正好是1,2,3,4 (★☆☆) ? 19. 创建一个8x8矩阵并用棋盘图案填充它 (★☆☆) ? 20....创建一个大小为10的向量,值为0到1的小数(不包含0和1) (★★☆) 40. 创建一个大小为10的随机向量并对其进行排序 (★★☆) 41. 如何比np.sum更快地对一个小数组求和?...设有一个随机10x2矩阵, 其中的值代表笛卡尔坐标,现需将它们转换为极坐标 (★★☆) 45. 创建大小为10的随机向量,并将最大值替换为0 (★★☆) 46....生成一个通用的二维高斯型数组 (★★☆) 57. 如何将p个元素随机放置在二维数组中 (★★☆) 58. 减去矩阵每行的均值 (★★☆) 59. 如何按第n列排序数组?(★★☆) 60....设有10个三元组(例如[x1, y1, z1]), 每个三元组代表一个三角形. 这些三角形可能还有共同的顶点. 现在需要找出组成这10个三角形的所有线段的集合(还要去重哦) (★★★) 74.

    5.7K30

    Metal 框架之渲染管线渲染图元

    要将位置转换为 Metal 的坐标,该函数需要绘制三角形的视口的大小(以像素为单位),因此需要将其存储在 viewportSizePointer 参数中。...下图是将输入坐标系转换为归一化的设备坐标系。 因为这是一个二维应用,不需要齐次坐标,所以先给输出坐标写一个默认值,w值设置为1.0,其他坐标设置为0.0。...由于此示例只有一个渲染目标,因此可以直接指定一个浮点向量作为函数的输出,此输出是要写入渲染目标的颜色。 光栅化阶段计算每个片元参数的值并用它们调用片元函数。...光栅化阶段将其颜色参数计算为三角形顶点处颜色的混合,片元离顶点越近,顶点对最终颜色的贡献就越大。 将内插颜色作为函数的输出返回。...总结 本文介绍了如何配置渲染管道,如何编写顶点和片元函数、如何创建渲染管道状态对象,以及最后对绘图命令进行编码,最终在视图中绘制一个简单的 2D 彩色三角形。 本文示例代码下载

    2.7K00

    刷爆Leetcode!字节算法大佬进阶专属算法笔记:GitHub标星97k+

    对于那些知道C++而不熟悉Java的程序员,本章对这两种语言的主要差别进行了描述。 数组 第⒉章“数组”。集中讨论数组。这里面包含有两层意思:如何使用类来对数据存储结构进行封装和类的接口。...本章还解释了Java中被称作“无痛指针”的使用,并用一个专题applet演示了链表的插入、查找和删除是如何进行的。 递归 第6章“递归”探索了递归的知识,这是书中仅有的非数据结构的几章之一。...本章给出了大量的递归例子,包括汉诺塔问题和归并排序,它们都有相应的专题applet。 高级排序 第7章“高级排序”研究了几种高级的排序方法:希尔排序和快速排序。...一个专题applet演示了此类树的插入、别除和遍历是如何进行的。 红-黑树 第9章“红-黑树”解释了红-黑树,它是最有效的平衡树之一。专题applet 演示了平衡这种树所需的旋转和颜色转换。...2-3-4树和外部存储 第10章“2-3-4树和外部存储”将2-3-4树作为多叉树的一个例子进行了讲解。专题applet 会演示它们是如何工作的。

    62820
    领券