当前位置:网站首页>[array]566 Reshape the matrix - simple
[array]566 Reshape the matrix - simple
2022-07-05 03:50:00 【51CTO】
stay MATLAB in , There's a very useful function reshape , It can put a m x n The matrix is remodeled to another different size (r x c) The new matrix of , But keep its original data .
Give you a two-dimensional array mat It means m x n matrix , And two positive integers r and c , Represent the number of rows and columns of the matrix to be reconstructed respectively .
The reconstructed matrix needs to replace all elements of the original matrix with the same Row traversal order fill .
If the reshape The operation is feasible and reasonable , The new reshaping matrix is output ; otherwise , Output raw matrix .
Example 1:
Input :mat = [[1,2],[3,4]], r = 1, c = 4
Output :[[1,2,3,4]]
Example 2:
Input :mat = [[1,2],[3,4]], r = 2, c = 4
Output :[[1,2],[3,4]]
Tips :
m == mat.length
n == mat[i].length
1 <= m, n <= 100
-1000 <= mat[i][j] <= 1000
1 <= r, c <= 300
source : Power button (LeetCode)
link :https://leetcode.cn/problems/reshape-the-matrix
Copyright belongs to the network . For commercial reprint, please contact the official authority , Non-commercial reprint please indicate the source .
Answer key
Ideas :
- Judge whether the number of input matrices and the number of output matrices are equal
- Apply for space for the output matrix
- Traverse the original matrix , Move the original matrix elements to the output matrix
The code is as follows :
using namespace std;
class Solution
{
public:
vector < vector < int >> matrixReshape( vector < vector < int >> & mat, int r, int c)
{
if ( mat. empty())
{
return mat;
}
int m = mat. size();
int n = mat[ 0]. size();
if ( m * n != r * c)
{
return mat;
}
std::vector < std::vector < int >> ans( r, std::vector < int >( c, 0));
int t = 0;
for ( int i = 0; i < m; ++ i)
{
for ( int k = 0; k < n; ++ k)
{
ans[ t / c][ t % c] = mat[ i][ k];
t ++;
}
}
return ans;
}
};
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
A few more sentences
leetcode The running time of the upper and lower parts is even faster than mine ( my 12ms), It's ridiculous , First look at leetcode Given 8ms Code for .
class Solution {
public:
vector < vector < int >> matrixReshape( vector < vector < int >>& mat, int r, int c) {
int m = mat. size();
int n = mat[ 0]. size();
int num = 0;
vector < int > s;
vector < vector < int >> mat1( r, vector < int >( c)); // The value can only be assigned after the initialization size
if( m * n != r * c)
{
return mat;
}
for( int i = 0; i < m; i ++)
{
for( int j = 0; j < n; j ++)
{
s. push_back( mat[ i][ j]);
}
}
for( int i = 0; i < r; i ++)
{
for( int j = 0; j < c; j ++)
{
mat1[ i][ j] = s[ num];
num ++;
}
}
return mat1;
}
};
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
This code is not only one more than me vector, And there are all kinds of elements push_back, These are extra expenses , It's faster than mine ,leetcode It's really painful to judge the time .
Of course, my code above can also be optimized , We know CPU There is a cache , If the cache hit rate is high , Then the program can run faster . If you can reduce the calculation , Then improve the efficiency of the program . We can optimize from the last cycle , The optimized code is as follows :
using namespace std;
class Solution
{
public:
vector < vector < int >> matrixReshape( vector < vector < int >> & mat, int r, int c)
{
if ( mat. empty())
{
return mat;
}
int m = mat. size();
int n = mat[ 0]. size();
int total_count = m * n;
if ( total_count != r * c)
{
return mat;
}
std::vector < std::vector < int >> ans( r, std::vector < int >( c, 0));
for ( int i = 0; i < total_count; ++ i)
{
ans[ i / c][ i % c] = mat[ i / n][ i % n];
t ++;
}
return ans;
}
};
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
This code is officially known to achieve 0ms, But it's been tested ,1 Next is 8ms,1 Next is 4ms, Honey operation ~~~
Optimization of the 2 The first point is as follows :
- take 2 individual for Cycle to 1 individual , Can increase cpu shooting
- Calculate ahead of time m*n, Um. , This is trivial ~~~
边栏推荐
- 問下,這個ADB mysql支持sqlserver嗎?
- What is the most effective way to convert int to string- What is the most efficient way to convert an int to a String?
- 【无标题】
- An elegant program for Euclid‘s algorithm
- Kuboard
- [an Xun cup 2019] not file upload
- 企业级:Spire.Office for .NET:Platinum|7.7.x
- glibc strlen 实现方式分析
- PlasticSCM 企业版Crack
- [Chongqing Guangdong education] 2777t green space planning reference questions of National Open University in autumn 2018
猜你喜欢
【web源码-代码审计方法】审计技巧及审计工具
It took two nights to get Wu Enda's machine learning course certificate from Stanford University
程序员的视力怎么样? | 每日趣闻
[luat-air105] 4.1 file system FS
How to define a unified response object gracefully
Leetcode42. connect rainwater
ActiveReportsJS 3.1 VS ActiveReportsJS 3.0
De debugging (set the main thread as hidden debugging to destroy the debugging Channel & debugger detection)
Web components series (VII) -- life cycle of custom components
Clickhouse synchronization MySQL (based on materialization engine)
随机推荐
001 chip test
Excuse me, my request is a condition update, but it is blocked in the buffer. In this case, can I only flush the cache every time?
[web source code code code audit method] audit skills and tools
英语必备词汇3400
【PHP特性-变量覆盖】函数的使用不当、配置不当、代码逻辑漏洞
[deep learning] deep learning reference materials
Analysis of glibc strlen implementation mode
Kuboard
Multi person online anonymous chat room / private chat room source code / support the creation of multiple chat rooms at the same time
线上故障突突突?如何紧急诊断、排查与恢复
Blue Bridge Cup single chip microcomputer -- PWM pulse width modulation
Yuancosmic ecological panorama [2022 latest]
Web components series (VII) -- life cycle of custom components
About MySQL database connection exceptions
Clickhouse synchronization MySQL (based on materialization engine)
PlasticSCM 企业版Crack
Logstash、Fluentd、Fluent Bit、Vector? How to choose the appropriate open source log collector
IPv6 experiment
Some enterprise interview questions of unity interview
Google Chrome CSS will not update unless the cache is cleared - Google Chrome CSS doesn't update unless clear cache