![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode之数组
explore翔
安徽某985小硕,记录日常学习生活,欢迎大家交流指教。
展开
-
求最小的K个数的三种方法
STL里面默认用的是vector,因为玩完全二叉树用数组比较好表示),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。利用各种排序方法,比如冒泡,快速排序,归并排序、希尔排序等。所以求最小的K个数要用降序队列,即根是最大的,之后每个数和根比较,如果更大,直接略过,比根小,把根删去,把这个数加进去。原创 2022-12-16 10:23:07 · 1636 阅读 · 0 评论 -
448.找到数组中消失的数字
定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]这题我第一 想到hash表,为0的就是缺的,但是用到额外的空间了。2、第一次遍历,把nums[i]作为索引,把其中数据变为负数;第二次遍历原创 2021-04-22 23:33:17 · 75 阅读 · 0 评论 -
1128.等价多米诺骨牌对的数量
给你一个由一些多米诺骨牌组成的列表 dominoes。如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 a=c 且 b=d,或是 a=d 且 b=c。在 0 <= i < j < dominoes.length 的前提下,找出满足 dominoes[i] 和 dominoes[j] 等价的骨牌对 (i, j) 的数量。原创 2021-03-27 16:36:51 · 83 阅读 · 0 评论 -
724.寻找中心数组下标
给你一个整数数组 nums,请编写一个能够返回数组 “中心下标” 的方法。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。注意:中心下标可能出现在数组的两端。1.暴力法,双重循环class Solution {public: int pivotIndex(vector<int>& nums) { int n=nums.size()原创 2021-03-26 20:07:02 · 108 阅读 · 0 评论 -
1779.找到最近的相同X或Y点
你两个整数 x 和 y ,表示你在一个笛卡尔坐标系下的 (x, y) 处。同时,在同一个坐标系下给你一个数组 points ,其中 points[i] = [ai, bi] 表示在 (ai, bi) 处有一个点。当一个点与你所在的位置有相同的 x 坐标或者相同的 y 坐标时,我们称这个点是 有效的 。请返回距离你当前位置 曼哈顿距离 最近的 有效 点的下标(下标从 0 开始)。如果有多个最近的有效点,请返回下标 最小 的一个。如果没有有效点,请返回 -1 。两个点 (x1, y1) 和 (x2, y2)原创 2021-03-24 21:16:38 · 164 阅读 · 0 评论 -
1232.缀点成线
在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。这题我一开始就用斜率来比较,也就是y2-y1/x2-x1=y1-y0/x1-x0第一次发现还要区分斜率为无穷的情况,麻烦,并且除法运算涉及浮点数了,我们可以变换一下用乘法运算,减小运算量。class Solution {pu原创 2021-03-24 19:21:55 · 89 阅读 · 0 评论 -
1758.生成二进制交替字符串的最小次数
给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s 。一步操作中,你可以将任一 ‘0’ 变成 ‘1’ ,或者将 ‘1’ 变成 ‘0’ 。交替字符串 定义为:如果字符串中不存在相邻两个字符相等的情况,那么该字符串就是交替字符串。例如,字符串 “010” 是交替字符串,而字符串 “0100” 不是。返回使 s 变成 交替字符串 所需的 最少 操作数。示例 1:输入:s = “0100”输出:1解释:如果将最后一个字符变为 ‘1’ ,s 就变成 “0101” ,即符合交替字符串定义。这题有个巧妙原创 2021-03-23 17:08:59 · 399 阅读 · 0 评论 -
1260.二维网格迁移
给你一个 m 行 n 列的二维网格 grid 和一个整数 k。你需要将 grid 迁移 k 次。每次「迁移」操作将会引发下述活动:位于 grid[i][j] 的元素将会移动到 grid[i][j + 1]。位于 grid[i][n - 1] 的元素将会移动到 grid[i + 1][0]。位于 grid[m - 1][n - 1] 的元素将会移动到 grid[0][0]。请你返回 k 次迁移操作后最终得到的 二维网格。1.暴力法,结果时间超过限制2.展开成一维数组我们发现1234567原创 2021-03-23 17:05:42 · 135 阅读 · 0 评论 -
88.合并两个有序数组
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]1、一开始我思维僵化了,遍历nums2找到在nums原创 2021-03-21 23:26:10 · 146 阅读 · 0 评论 -
605.种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2:输入:flowerbed = [1,0,0,0,1],原创 2021-03-21 14:27:57 · 89 阅读 · 0 评论 -
219.存在重复元素
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1:输入: nums = [1,2,3,1], k = 3输出: true。1、暴力法class Solution {public: bool containsNearbyDuplicate(vector<int>& nums, int k) { int n=nums.size原创 2021-03-20 22:15:35 · 91 阅读 · 0 评论 -
主要元素
一个数组中超过半数的元素为主要元素,没有返回-1解法1:先排序,然后可以O(n)的判断是否存在主要元素时间:O(nlogn)空间:O(1)class Solution {public: int majorityElement(vector<int>& nums) { sort(nums.begin(), nums.end()); for(int i = 0; (i+nums.size()/2) < nums.size(); i++)原创 2021-03-18 20:10:50 · 552 阅读 · 0 评论