
LeetCode 数组
C++ 实现LeetCode上数组相关的题目
姚先生97
这个作者很懒,什么都没留下…
展开
-
LeetCode 15. 三数之和 (C++实现)
首先将nums排序,然后遍历nums,定义左指针left和右指针right,如果nums[i] + nums[left] + nums[right]<0,左指针向右移动一位,如果nums[i] + nums[left] + nums[right]>0,右指针向左移动一位,如果nums[i] + nums[left] + nums[right] == 0,则记录nums[i]和nums[left]和nums[right]的位置。输出:[[-1,-1,2],[-1,0,1]]输出:[[0,0,0]]原创 2024-12-29 15:40:59 · 406 阅读 · 0 评论 -
LeetCode 349. 两个数组的交集 (C++实现)
首先定义一个用来记录元素有无的数组record,还有记录重复元素的集合ans,然后遍历nums1,记录nums1中的元素,然后遍历nums2,如果num2的元素在nums1中出现过,则压入ans,最后返回ans。给定两个数组 nums1 和 nums2 ,返回 它们的 交集。输出结果中的每个元素一定是 唯一 的。输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输入:nums1 = [1,2,2,1], nums2 = [2,2]解释:[4,9] 也是可通过的。原创 2024-12-28 17:55:53 · 305 阅读 · 0 评论 -
LeetCode 242. 有效的字母异位词 (C++实现)
首先定义有26个元素的数组record,全设置为0,首先遍历s字符串,将record中s[i]-'a’位置的元素值加一,然后遍历t字符串,将record中s[i]-'a’位置的元素值减一,如果最后record里面全是0那就说明s和t是字母异位词。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的。输入: s = “anagram”, t = “nagaram”输入: s = “rat”, t = “car”原创 2024-12-28 17:33:38 · 376 阅读 · 0 评论 -
LeetCode 59. 螺旋矩阵 II (C++实现)
首先定义左指针left、右指针right,上指针top,下指针bottom,然后从1开始循环到n^2,遇到边界的时候指针相应地变化。给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。输出:[[1,2,3],[8,9,4],[7,6,5]]原创 2024-12-24 19:15:46 · 431 阅读 · 0 评论 -
LeetCode 54. 螺旋矩阵 (C++实现)
首先定义左指针left、右指针right,上指针top,下指针bottom,然后从左到右,从上到下遍历,遇到边界的时候指针相应地变化。给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]输出:[1,2,3,6,9,8,7,4,5]原创 2024-12-23 20:47:13 · 496 阅读 · 0 评论 -
LeetCode 977. 有序数组的平方 (C++实现)
首先定义左指针left和右指针right,然后定义结果vector,循环比较左指针和右指针指向的值的平方,如果left>=right,则vector从后往前记录,最后当左指针和右指针重合的时候结束循环。解释:平方后,数组变为 [16,1,0,9,100]输入:nums = [-4,-1,0,3,10]输入:nums = [-7,-3,2,3,11]排序后,数组变为 [0,1,9,16,100]输出:[0,1,9,16,100]输出:[4,9,9,49,121]原创 2024-12-23 19:32:29 · 298 阅读 · 0 评论 -
LeetCode 209. 长度最小的子数组 (C++实现)
首先定义慢指针slow和快指针fast,遍历数组元素,先移动快指针,如果快指针和慢指针中间的元素和大于等于target,记录长度,移动慢指针,遍历完成之后选取最小长度返回。, numsr-1, numsr] ,并返回其长度。输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]输入:target = 4, nums = [1,4,4]解释:子数组 [4,3] 是该条件下的长度最小的子数组。原创 2024-12-23 19:11:14 · 552 阅读 · 0 评论 -
LeetCode 844. 比较含退格的字符串 (C++实现)
分别处理s和t,以s举例,首先定义慢指针slow和快指针fast,遍历字符串元素,如果快指针指向的当前元素不等于#,则将快指针指向位置的值赋给慢指针指向的位置,慢指针向后移动一位,否则继续移动快指针,不赋值,如果快指针指向的当前元素等于#,这时候判断slow指针是否在字符串的起始位置,不是的话减1。输入:s = “ab#c”, t = “ad#c”输入:s = “ab##”, t = “c#d#”解释:s 会变成 “c”,但 t 仍然是 “b”。输入:s = “a#c”, t = “b”原创 2024-12-19 20:21:39 · 371 阅读 · 0 评论 -
LeetCode 283. 移动零 (C++实现)
首先定义慢指针slow和快指针fast,遍历数组元素,如果快指针指向的当前元素不等于0,则将快指针指向位置的值赋给慢指针指向的位置,慢指针向后移动一位,否则继续移动快指针,不赋值。循环结束后将慢指针后面的元素都变为0即可。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]输入: nums = [0]原创 2024-12-19 19:31:32 · 353 阅读 · 0 评论 -
LeetCode 26. 删除有序数组中的重复项 (C++实现)
首先定义慢指针slow和快指针fast,遍历数组元素,如果快指针指向的当前元素不等于前一个元素,则先将慢指针向后移动一位,再将快指针指向位置的值赋给慢指针指向的位置,否则继续移动快指针,不赋值。给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。输入:nums = [0,0,1,1,1,2,2,3,3,4]原创 2024-12-19 19:10:24 · 332 阅读 · 0 评论 -
LeetCode 27. 移除元素 (C++实现)
元素的顺序可能发生改变。首先定义慢指针slow和快指针fast,遍历数组元素,如果快指针指向的元素不等于val,则将快指针指向位置的值赋给慢指针指向的位置,否则继续移动快指针,不赋值。解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。输入:nums = [0,1,2,2,3,0,4,2], val = 2。输入:nums = [3,2,2,3], val = 3。输出:5, nums = [0,1,4,0,3,输出:2, nums = [2,2,原创 2024-12-18 19:38:42 · 270 阅读 · 0 评论 -
LeetCode 367. 有效的完全平方数 (C++实现)
首先定义左指针left和右指针right(为num),开始循环,然后取数组中间元素值的平方和x比较,如果中间元素值的平方大于x,则右指针指向中间元素前一个元素,如果中间元素值的平方小于x,则左指针指向中间元素后一个元素,如果中间元素值的平方等于x,返回true。如果 num 是一个完全平方数,则返回 true ,否则返回 false。解释:返回 false ,因为 3.742 * 3.742 = 14 但 3.742 不是一个整数。解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。原创 2024-12-18 19:18:59 · 443 阅读 · 0 评论 -
LeetCode 69. x 的平方根 (C++实现)
首先定义左指针left和右指针right(为x),开始循环,然后取数组中间元素值的平方和x比较,如果中间元素值的平方大于x,则右指针指向中间元素前一个元素,如果中间元素值的平方小于x,则左指针指向中间元素后一个元素,如果中间元素值的平方等于x,返回中间元素。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去。给你一个非负整数 x ,计算并返回 x 的 算术平方根。原创 2024-12-18 19:03:29 · 648 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 (C++实现)
总体步骤分为两步,第一步二分法寻找左边界,第二步二分法寻找右边界,在寻找左边界的过程中,左边界跟着右指针变化而变化;在寻找右边界的过程中,右边界跟着左指针变化而变化。输入:nums = [5,7,7,8,8,10], target = 8。输入:nums = [5,7,7,8,8,10], target = 6。如果数组中不存在目标值 target,返回 [-1, -1]。输入:nums = [], target = 0。输出:[-1,-1]输出:[-1,-1]原创 2024-12-17 20:09:41 · 237 阅读 · 0 评论 -
LeetCode 35. 搜索插入位置 (C++实现)
首先定义左指针left和右指针right,然后取数组中间元素的值和target比较,如果中间元素的值大于target,则右指针指向中间元素,如果中间元素的值小于target,则左指针指向中间元素,直到中间元素等于target。最后,如果没有找到,则右指针的下一位就是插入的位置。输入: nums = [1,3,5,6], target = 5。输入: nums = [1,3,5,6], target = 2。输入: nums = [1,3,5,6], target = 7。原创 2024-12-17 19:02:44 · 524 阅读 · 0 评论 -
LeetCode 704. 二分查找 (C++实现)
首先定义左指针left和右指针right,然后取数组中间元素的值和target比较,如果中间元素的值大于target,则右指针指向中间元素,如果中间元素的值小于target,则左指针指向中间元素,直到中间元素等于target。输入: nums = [-1,0,3,5,9,12], target = 9。输入: nums = [-1,0,3,5,9,12], target = 2。解释: 9 出现在 nums 中并且下标为 4。解释: 2 不存在 nums 中因此返回 -1。原创 2024-12-17 18:45:16 · 303 阅读 · 0 评论 -
LeetCode 1. 两数之和 (C++实现)
这道题可以用哈希表,首先遍历输入的数组元素,如果nums[i]不在哈希表中,则添加键值对,target-nums[i]的结果作为key,i作为value;反之返回i和哈希表中target-nums[i]的value。解释:因为 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。你可以按任意顺序返回答案。原创 2024-12-15 20:19:52 · 278 阅读 · 0 评论