算法打卡第十天,今天你刷题了吗
😄😄😄😄😄😄😄😄😄😄
😃😃😃😃😃😃😃😃😃😃
💓💓💓大家一起来刷题!💓💓💓
😍😍😍😍😍😍😍😍😍😍
😘😘😘😘😘😘😘😘😘😘
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映射到二维数组的下标:
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;
}
😜😜😜😜😜 大家卷起来! 😝😝😝😝😝