随笔分类 -  力扣标签——数组

摘要:[1010. 总持续时间可被 60 整除的歌曲](1010. 总持续时间可被 60 整除的歌曲) 有这样一个性质: \((a+b)\%c=0-->(a\%c+b\%c)\%c=0\) 我们可以用map将每个数对应的取模结果还有个数存起来,这样i从[1,30) , \(map[i]*map[60-i] 阅读全文
posted @ 2020-07-11 16:20 branna 阅读(110) 评论(0) 推荐(0)
摘要:1329. 将矩阵按对角线排序 暴力即可,因为满足i-j的值都是相等的是复合题意的,所以我们每次将i-j相同的存入数组,然后sort排序,将原来对角线数组更新为拍完数之后的数组 class Solution { public: vector<vector<int>> diagonalSort(vec 阅读全文
posted @ 2020-07-11 11:37 branna 阅读(328) 评论(0) 推荐(0)
摘要:229. 求众数 II 摩尔投票法,因为数组里>n/3的数最多有两个,所以声明两个变量n1,n2和两个计数器c1,c2,一开始都初始化为0,当遍历数组的时候: 当前元素=n1时,c1++; 当前元素=n2时,c2++; 当c1=0时,n1=当前元素,同时c1=1; 当c2=0时,n2=当前元素,同时 阅读全文
posted @ 2020-07-06 13:18 branna 阅读(234) 评论(0) 推荐(0)
摘要:169. 多数元素 摩尔投票法,先设置一个暂时的答案即x=nums[0],然后用一个计数器ii=0;当遍历数组元素的时候,当ii不为0的时候,判断x和nums[i]的大小,nums[i]和x相等的话,ii++,否则ii--;当ii减小到0的时候这时候就应该更新x的值了,同时ii++;这样一次遍历最后 阅读全文
posted @ 2020-07-05 21:10 branna 阅读(182) 评论(0) 推荐(0)
摘要:1266. 访问所有点的最小时间 自己画出几个例子就能发现规律,当 \(abs(x1-x2)=abs(y1-y2)\) 的长度相等时,那么最小的距离就是 \(abs(x1-x2)\), 否则就是两边那个较大的。 class Solution { public: int minTimeToVisitA 阅读全文
posted @ 2020-07-03 22:51 branna 阅读(141) 评论(0) 推荐(0)
摘要:面试题 17.19. 消失的两个数字 这道理难点在于O(n)时间复杂度,O1的空间复杂度,我们可以在nums数组的对应位置的元素上加上30000,当更新元素时该位置的nums元素值大于了30000,那么说明前面有个元素的值为现在的元素位置的下标,我们只要 \(nums[nums[i]-30000]+ 阅读全文
posted @ 2020-07-02 18:36 branna 阅读(240) 评论(0) 推荐(0)
摘要:167. 两数之和 II - 输入有序数组 第一种方法是利用map存入每个数,然后遍历原数组,判断target-numbers[i]存不存在map数组里,若存在返回两个数的下标即可,利用lower_bound会出错,因为当你本身是2的时候,目标是4,那么返回的是同一个位置的值,所以应当用upper_ 阅读全文
posted @ 2020-06-29 20:29 branna 阅读(151) 评论(0) 推荐(0)
摘要:面试题 17.05. 字母与数字 令字母为1,数字为-1,先求前缀和,如果前缀和数组该位置为0,那么说明区间[0,i]之间和为零,我们需要最长的连续的子区间的和为0,那么我们先定义结果的这个区间的头为x,尾巴为y,当遍历前后缀和数组时,位置为0的地方,更新x,y的值为0,i,当遇到其他前缀和时,当m 阅读全文
posted @ 2020-06-29 20:06 branna 阅读(164) 评论(0) 推荐(0)
摘要:373. 查找和最小的K对数字 这题直接定义一个结构体,内部自定义排序规则,属性为两个int数,分别代表第一个和第二个数组的元素,还有一个和的属性,用来写排序规则,排完序后,将$ kk=min(k,nums1.size()*nums2.size()) $个元素存入vector<vector>v(kk 阅读全文
posted @ 2020-06-27 13:09 branna 阅读(217) 评论(0) 推荐(0)
摘要:786. 第 K 个最小的素数分数 我们可以二分,L=0,R=1,那么取mid就是0.5,逐个逼近。令结果分数初始化为0/1,m=0,n=1,取完mid再在数组里找小于等于mid的分数个数,同时更新m和n的值,只要Ai/aj的值大于m/n的就更新,直到找到取完mid再在数组里找小于等于mid的分数个 阅读全文
posted @ 2020-06-26 23:00 branna 阅读(294) 评论(0) 推荐(0)
摘要:378. 有序矩阵中第K小的元素 第一种方法:将二维矩阵中的数存起来,然后排序输出第k个,耗时较多 class Solution { public: int kthSmallest(vector<vector<int>>& matrix, int k) { vector<int>v; for(int 阅读全文
posted @ 2020-06-26 21:06 branna 阅读(241) 评论(0) 推荐(0)
摘要:668. 乘法表中第k小的数 同样,二话不说写个暴力,用两个一维数组来存储行和列,用一个vector来存储乘法表中的每个数,sort排个序输出k位置的数即可, 意料之中,超时,且还是最后一组数据超时!!害### 然后用了二分来写,最小的是1,最大的数是m*n,那么取个mid, 在乘法表里记录每行有多 阅读全文
posted @ 2020-06-26 19:56 branna 阅读(299) 评论(0) 推荐(0)
摘要:1299. 将每个元素替换为右侧最大元素 直接从后往前更新最大值存入数组中,然后逆置数组,删去最前的,在随扈补一个-1即可。 class Solution { public: vector<int> replaceElements(vector<int>& arr) { vector<int>v; 阅读全文
posted @ 2020-06-26 16:52 branna 阅读(125) 评论(0) 推荐(0)
摘要:719. 找出第 k 小的距离对 思路: 首先采用了暴力求差值,11组数据超时,优化后利用map来求,结果在最后的两组超时。。然而还是要用二分写,二分差值,最小的为0,最大的是排完序后最后一个数的值减去第一个数的值,取mid,然后在原来数组里继续二分找有多少对差值cnt是小于等于mid的。 若对数c 阅读全文
posted @ 2020-06-26 13:39 branna 阅读(147) 评论(0) 推荐(0)
摘要:35. 搜索插入位置 二分查找位置即可 class Solution { public: int searchInsert(vector<int>& nums, int target) { int left=0,right=nums.size(); while(left<right) { int m 阅读全文
posted @ 2020-06-25 17:28 branna 阅读(91) 评论(0) 推荐(0)
摘要:119. 杨辉三角 II class Solution { public: vector<int> getRow(int rowIndex) { vector<vector<int>> dp(rowIndex+10); if(rowIndex==0) { dp[0].push_back(1); re 阅读全文
posted @ 2020-06-22 12:35 branna 阅读(123) 评论(0) 推荐(0)
摘要:118. 杨辉三角 二维数组 class Solution { public: vector<vector<int>> generate(int numRows) { vector<vector<int>>a; if(numRows==0) { return a; } if(numRows==1) 阅读全文
posted @ 2020-06-22 12:19 branna 阅读(275) 评论(0) 推荐(0)
摘要:48. 旋转图像 class Solution { public: void rotate(vector<vector<int>>& matrix) { for(int i=0;i<matrix.size()/2;i++)//将行看做一个整体,逆序存放 { swap(matrix[i],matrix 阅读全文
posted @ 2020-06-21 22:14 branna 阅读(163) 评论(0) 推荐(0)
摘要:560. 和为K的子数组 暴力O(n^2) 利用前缀和做差有多少组差为k class Solution { public: int subarraySum(vector<int>& nums, int k) { int sum[nums.size()+10]; int ops=0; sum[ops] 阅读全文
posted @ 2020-06-21 16:36 branna 阅读(146) 评论(0) 推荐(0)
摘要:75. 颜色分类 根据题意提示,用计数排序扫描每个颜色的个数,然后重新往数组里填充012的个数即可,一趟扫描 class Solution { public: void sortColors(vector<int>& nums) { map<int,int>mp; for(int i=0;i<num 阅读全文
posted @ 2020-06-21 13:33 branna 阅读(207) 评论(0) 推荐(0)