- 博客(21)
- 收藏
- 关注
原创 c++实现螺旋矩阵
在这种排列中,我们从矩阵的左上角开始,按照顺时针的方向依次遍历所有的元素,直到遍历完整个矩阵。这是一个有趣且有挑战性的问题,它要求我们按照顺时针的螺旋顺序遍历给定的矩阵,并返回其中的所有元素。然后,我们检查是否还有剩余的行需要遍历,如果有,则按照逆时针的方向遍历当前的一行元素,并将其添加到结果数组中。最后,我们检查是否还有剩余的列需要遍历,如果有,则按照逆时针的方向遍历当前的一列元素,并将其添加到结果数组中。在上面的示例代码中,我们使用了一个3行3列的矩阵来进行测试,并输出了遍历得到的结果。
2023-09-26 22:09:28
917
原创 c++实现矩阵置零
首先,我们遍历整个矩阵,如果一个元素为0,我们就将其所在的行和列分别标记为需要被置零的行和列。然后,我们再次遍历整个矩阵,如果一个元素所在的行或列被标记为需要被置零的行或列,我们就将该元素置零。该算法的时间复杂度为O(mn),空间复杂度为O(m+n)。给定一个m x n的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。空间复杂度:O(m+n),我们需要两个大小分别为m和n的数组来记录哪些行和列需要被置零。时间复杂度:O(mn),其中m和n分别是矩阵的行数和列数。我们需要遍历整个矩阵两次。
2023-07-17 10:27:22
480
1
原创 c++实现缺失的第一个正数
我们可以遍历数组中的每个元素,并将其放置在正确的位置上。这样,在遍历完整个数组后,我们可以再次遍历数组,并检查第一个不在正确位置上的元素。本文介绍了一种时间复杂度为O(n),并且只使用常数级别额外空间的解决方案,用于寻找缺失的第一个正数。给定一个未排序的整数数组,我们需要找到其中没有出现的最小的正整数。给定一个未排序的整数数组nums,我们需要找到其中没有出现的最小的正整数。例如,对于数组[3,4,-1,1],我们需要返回2,因为2是最小的正整数,而数组中没有出现过。该元素的位置加1即为缺失的最小正整数。
2023-07-15 11:19:09
221
1
原创 c++实现除自身以外数组的乘积
具体来说,对于left[i],我们可以使用一个变量来记录i左边所有元素之积,初始值为1,然后从左到右遍历数组,每次将当前元素乘以变量的值并更新变量即可。具体来说,对于数组中的每个元素i,我们可以计算出它左边所有元素之积left[i]和右边所有元素之积right[i],然后将它们相乘即可得到答案。在算法和数据结构领域中,有一类问题是求解一个数组中每个元素除了自身以外的所有元素之积。给定一个整数数组nums,返回一个数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。
2023-07-15 11:16:25
218
1
原创 c++轮转数组
然后,我们进行k次操作,每次将数组中最后一个元素保存到临时变量temp中,然后将数组中的每个元素向右移动一个位置。在本篇文章中,我们将详细介绍C++中轮转数组的实现方法,包括基于循环、翻转、STL算法等多种方式。除了基于循环的方法外,我们还可以使用基于翻转的方法来实现轮转数组。该方法的思路是先将整个数组翻转,然后将前k个元素翻转,再将后n-k个元素翻转。该方法的思路是将数组中的元素向右移动k个位置,每次移动一个元素,共进行k次操作。然后,我们先将整个数组翻转,再将前k个元素翻转,最后将后n-k个元素翻转。
2023-07-13 11:17:37
238
1
原创 C++合并区间
通过对起始时间进行排序,并依次比较相邻的两个区间,我们可以找到所有重叠的区间,并将它们合并成一个大区间。要解决这个问题,我们需要找到所有重叠的区间,并将它们合并成一个大区间。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。例如,假设集合为[[1,3],[2,6],[8,10],[15,18]],则合并后的结果为[[1,6],[8,10],[15,18]]。输入:[[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]
2023-07-13 11:15:12
1062
1
原创 使用c++求最大子数组和
代码中,我们定义了一个长度为n的dp数组,其中dp[i]表示以第i个元素结尾的最大子数组和。然后,我们遍历整个数组,对于每个元素i,我们计算以它结尾的最大子数组和dp[i]。动态规划的基本思想是将问题分解为子问题,并且在求解子问题的过程中利用已经求解过的子问题的结果。在最大子数组和问题中,我们可以将原始数组分解为多个子数组,并且在求解每个子数组的最大和时利用已经求解过的子数组的最大和。由于我们要求的是最大子数组和,因此我们需要在遍历过程中不断更新ans变量,它表示目前为止出现过的最大子数组和。
2023-07-12 09:39:40
512
1
原创 C++实现最小覆盖子串
在每次移动指针后,我们都需要检查滑动窗口是否包含t中的所有字符,并且滑动窗口的长度是否小于之前找到的最小子串的长度。给定字符串s和t,我们需要找到s中的一个子串,该子串包含t中的所有字符,并且该子串的长度应该尽可能小。在每次移动right指针后,我们需要检查滑动窗口是否包含t中的所有字符,并且滑动窗口的长度是否小于之前找到的最小子串的长度。在上面的代码中,我们使用了两个哈希表need和window来记录t中每个字符的数量以及滑动窗口中每个字符的数量。为了解决这个问题,我们可以使用滑动窗口的方法。
2023-07-10 23:03:23
342
1
原创 使用c++实现滑动窗口最大值
在遍历数组时,对于每个元素,将其加入队列尾部,并检查队列头部元素是否已经超出窗口范围。滑动窗口是一种常见的算法,它可以在一个数组或序列上移动一个固定大小的窗口,以便在这个窗口内进行一些操作。例如,可以求出在一个数组中大小为k的滑动窗口内的最大值。在遍历数组时,我们首先检查队列头部元素是否已经超出窗口范围,如果是,则将其弹出。最后,将当前元素加入队列尾部。滑动窗口最大值算法可以很方便地解决一些问题,例如找到一个数组中所有大小为k的子数组中的最大值。然后,我们从队列尾部开始,将所有小于当前元素的元素弹出。
2023-07-10 22:33:55
346
1
原创 使用c++找到和为 K 的子数组
在上述代码中,我们首先定义了一个变量 count,用于记录和为 K 的子数组个数。外层循环用于确定子数组的起始位置 i,内层循环用于确定子数组的结束位置 j。在本问题中,我们可以定义两个指针 i 和 j,分别指向子数组的起始位置和结束位置。首先,让我们来看一下题目要求:给定一个整数数组 nums 和一个整数 K,求出该数组中和为 K 的连续子数组的个数。连续子数组是指在原数组中连续的一段元素组成的数组。子数组是指在原数组中连续的一段元素组成的数组。其中,连续子数组必须是在原数组中连续的一段元素组成的。
2023-07-10 22:29:48
388
1
原创 使用c++找到字符串中所有字母异位词
然后我们可以遍历s字符串,对于每个位置i,我们可以维护一个长度为p.size()的滑动窗口。在每次移动窗口之后,我们可以比较两个哈希表是否相等,如果相等,则说明当前窗口是一个符合条件的字母异位词。接下来,我们定义三个变量left、right和count,其中left和right分别指向滑动窗口的左右端点,count表示当前窗口内还需要匹配的字符数,初始值为p.size()。因此,我们记录窗口左端点的索引,并将其加入res数组中。给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。
2023-07-10 22:27:49
248
1
原创 c++实现无重复字符的最长子串
在这一点上,我们将把i移到右边,直到我们的子字符串中不再有任何重复的字符。在这篇博客文章中,我们讨论了如何使用C++在不重复字符的情况下找到最长子字符串的长度。在这篇博客文章中,我们将讨论如何使用C++在不重复字符的情况下找到最长子字符串的长度。这个问题是滑动窗口算法的一个经典例子,滑动窗口算法是一种用于解决涉及数组或字符串的问题的技术。给定一个字符串s,我们需要找到不包含重复字符的最长子字符串的长度。请注意,答案必须是子字符串,“pwke”是子序列,而不是子字符串。说明:答案是“b”,长度为1。
2023-07-10 22:24:22
457
1
原创 c++实现接雨水
1. 首先计算每个柱子左边最高柱子和右边最高柱子的高度,存储在 left_max 和 right_max 数组中。2. 然后遍历每个柱子,如果当前柱子高度小于左边最高柱子和右边最高柱子,则可以盛水。3. 水能达到的最大高度是左边最高柱子和右边最高柱子的最小值减去当前柱子的高度。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。4. 将每个位置可以盛水的量相加,得到总的盛水量。个非负整数表示每个宽度为。
2023-05-25 15:58:32
274
原创 c++实现三数之和
2. 以 nums 数组的第一个元素 nums[i] 作为基准,使用左右指针查找 nums[i] 的两侧是否存在满足 nums[i] + nums[left] + nums[right] == 0 的两个元素。6. 以后续元素为基准继续查找,找到第三组解 -1 + -1 + 27. 返回结果 { {-4, -1, 1}, {-4, -1, 1}, {-1, -1, 2} }4. left = 3,right = 4。1. 排序后 nums = [-4, -1, -1, 0, 1, 2]
2023-05-25 15:55:41
1061
原创 c++实现 盛最多水的容器
4. 如果左指针处的高度大于右指针处的高度,则:- cur_height = height[right] // 记录当前高度。2. 定义变量 ans 存储最大面积,cur_height 存储当前高度,cur_width 存储当前宽度;6. ans = max(ans, cur_width * cur_height) // 更新最大面积。5. 否则:- cur_height = height[left] // 记录当前高度。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
2023-05-23 20:44:28
254
1
原创 c++实现移动零
5. 否则,交换 nums[i] 和 nums[right] 处的元素,将第一个非 0 元素移至 nums[i] 位置;3. 如果当前元素 nums[i] 为 0,将 right 移动至第一个非 0 元素的位置;4. 如果 right 遍历至数组末尾,说明数组仅含 0 元素,直接返回;6. 重复步骤 3~5,直至 right 遍历至数组末尾;1. 定义一个右指针 right,初始化指向 0;移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。7. 遍历完成,返回。
2023-05-23 20:37:04
225
1
原创 c++实现最长连续序列
题目描述:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。4. 从x+1开始查找set中是否存在连续的数字,如果存在就增加curlen和i,继续查找。3. 如果set中不存在x-1,说明x可能是某个连续序列的第一个数字。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。5. 更新ans,保持最长连续序列的长度。1. 将nums中的所有数字加入set。2. 遍历set中的每个数字x。
2023-05-22 19:08:19
275
1
原创 c++实现字母异位词分组
是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。3. 如果该字符串未被访问,创建一个向量tem1存储该字符串及其变位词。4. 查找与该字符串的变位词,加入tem1,并标记为已访问。6. 返回ans,里面包含了所有字符串的变位词组。可以按任意顺序返回结果列表。1. 对所有字符串排序,得到它们的规范形式。题目描述:给你一个字符串数组,请你将。5. 将tem1加入结果ans。2. 遍历每个字符串。
2023-05-22 19:02:18
195
1
原创 c++实现两数相加
总之,这段代码实现了两个链表的相加操作,采用了简单的逐位相加的思路,逐步计算每一位的进位和结果,并将结果存入一个新的链表中。如果两个链表都为空,并且还有进位值carry,则创建一个新节点存储进位值,并将该节点添加到新链表的末尾。最后返回新链表的头节点的下一个节点,因为新链表的头节点是用来初始化的,不存储任何有效的值。输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输入:l1 = [2,4,3], l2 = [5,6,4]输出:[8,9,9,9,0,0,0,1]
2023-05-08 22:03:22
1150
1
原创 c++实现两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。输入:nums = [2,7,11,15], target = 9。输入:nums = [3,2,4], target = 6。输入:nums = [3,3], target = 6。
2023-05-08 21:23:13
1170
2
原创 java实现加减乘除功能的计算器并设计出相应界面
题目要求:实现一个具有加减乘除功能的计算器,界面包括菜单栏、显示区和按键区。界面如下:(只实现加减乘除的四则运算功能,其他功能并未实现)
2023-05-08 21:10:45
946
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人