当前位置:网站首页>[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:
![[ Array ]566. Reshaping the matrix - Simple _ Array](/img/3c/593156f5bde67bd56828106d7bed3c.png)
Input :mat = [[1,2],[3,4]], r = 1, c = 4
Output :[[1,2,3,4]]
Example 2:
![[ Array ]566. Reshaping the matrix - Simple _ Array _02](/img/49/4c7d6984954381f6112ed888a7e8ea.png)
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 ~~~
边栏推荐
- How can we truncate the float64 type to a specific precision- How can we truncate float64 type to a particular precision?
- It took two nights to get Wu Enda's machine learning course certificate from Stanford University
- [untitled]
- @Transactional 注解导致跨库查询失效的问题
- [groovy] string (string splicing | multi line string)
- 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?
- Subversive cognition: what does SRE do?
- 天干地支纪年法中为什么是60年一个轮回,而不是120年
- Analysis of glibc strlen implementation mode
- 一文带你了解BI的前世今身与企业数字化转型的关系
猜你喜欢

Deep learning - LSTM Foundation

VM in-depth learning (XXV) -class file overview

SQL performance optimization skills
![[positioning in JS]](/img/f1/02ce74fadc1f7524c7abca9db66c71.jpg)
[positioning in JS]

Multi person online anonymous chat room / private chat room source code / support the creation of multiple chat rooms at the same time

Ubantu disk expansion (VMware)

输入的查询SQL语句,是如何执行的?

企业级:Spire.Office for .NET:Platinum|7.7.x

C # use awaiter

Timing manager based on C #
随机推荐
DECLARE_ WAIT_ QUEUE_ HEAD、wake_ up_ Interruptible macro analysis
线上故障突突突?如何紧急诊断、排查与恢复
JWT漏洞复现
Basic function learning 02
【无标题】
MindFusion.Virtual Keyboard for WPF
UE4 DMX和grandMA2 onPC 3.1.2.5的操作流程
[安洵杯 2019]不是文件上传
001 chip test
An elegant program for Euclid‘s algorithm
[luat-air105] 4.1 file system FS
VM in-depth learning (XXV) -class file overview
An elegant program for Euclid‘s algorithm
[deep learning] deep learning reference materials
@Transactional 注解导致跨库查询失效的问题
Kubernetes - identity and authority authentication
[vérification sur le Web - divulgation du code source] obtenir la méthode du code source et utiliser des outils
Leetcode42. connect rainwater
The latest blind box mall, which has been repaired very popular these days, has complete open source operation source code
Redis之Jedis如何使用