LeetCode刷题day10

简介: LeetCode刷题day10

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;
}
相关文章
|
16天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
16天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
17天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
17天前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
17天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
|
17天前
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
|
17天前
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
|
17天前
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
|
17天前
【LeetCode刷题】滑动窗口思想解决:最大连续1的个数 III、将x减到0的最小操作数
【LeetCode刷题】滑动窗口思想解决:最大连续1的个数 III、将x减到0的最小操作数
|
17天前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串