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

浙公网安备 33010602011771号