350. 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[4,9]
参考代码
#include<bits/stdc++.h> using namespace std; vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { vector<int> nums3; int i = 0,j = 0; sort(nums1.begin(),nums1.end()); sort(nums2.begin(),nums2.end()); while(i<nums1.size() && j<nums2.size()){ if(nums1[i]==nums2[j]){ nums3.push_back(nums1[i]); i++,j++; }else if(nums1[i]<nums2[j]){ i++; }else if(nums1[i]>nums2[j]){ j++; } } return nums3; } int main() { vector<int> nums3; vector<int> nums1,nums2; nums1 = {4,9,5}; nums2 = {9,4,9,8,4}; nums3 = intersect(nums1, nums2); for(int i = 0;i < nums3.size();i++){ cout<<nums3[i]<<" "; } return 0; }
566. 重塑矩阵
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
思路分析:
思路分析:
二维数组坐标(i,j)和一位数组x的关系 :
(i, j) —> i * n + j ==>x
同样地,我们可以将x映射到二维数组的下标:
i=x / n
{
j=x % n
以上便是本题的核心.
示例 1:
输入:mat = [[1,2],[3,4]], r = 1, c = 4 输出:[[1,2,3,4]]
示例 2:
输入:mat = [[1,2],[3,4]], r = 2, c = 4 输出:[[1,2],[3,4]]
AC代码
#include<bits/stdc++.h> using namespace std; vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) { int m = mat.size(); int n = mat[0].size(); if(m*n!=r*c) { return mat; } p->next = p->next->next; //vector( size_type num, const TYPE &val ); vector<vector<int>> ans(r,vector<int>(c)); for(int i = 0; i < r*c; i++) { ans[i/c][i%c] = mat[i/n][i%n]; } return ans; } int main() { vector<vector<int>> mat = {{1,2},{3,4}}; int r = 1,c = 4; vector<vector<int>> ans; ans = matrixReshape( mat,r,c); for(int i = 0; i < r; i++) { for(int j = 0; j < c; j++) { cout<<ans[i][j]<<" "; } cout<<endl; } return 0; }