LeetCode日记——【数据结构】数组与矩阵专题
2021-05-12 20:29
标签:解释 重构 ret style str i++ shape 数值 否则 题1:移动0 LeetCode题号:283 难度:Easy 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 代码: 分析: 设置一个计数值cnt来统计数组中非0的元素的个数。 遍历整个数组,遇到不是0的数,就将nums[cnt]位置设为该数,然后计数值cnt++。 遍历完整个数组后,cnt即为非0元素的个数。然后我们从索引cnt开始(因为数组下标从0开始)把数组的后部分都设置为0即可。 题2:重塑矩阵 LeetCode题号:556 难度:Easy 题目描述: 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。 重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。 如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。 示例 1: 输入: 代码: 分析: 核心在于,设置双重循环遍历新数组的每个位置,然后利用nums[index/oc][index%oc]为newnums[i][j]赋值。 LeetCode日记——【数据结构】数组与矩阵专题 标签:解释 重构 ret style str i++ shape 数值 否则 原文地址:https://www.cnblogs.com/augenstern/p/13138170.html
输出: [1,3,12,0,0]class Solution {
public void moveZeroes(int[] nums) {
int cnt = 0;
for(int num:nums){
if(num!=0){
nums[cnt++]=num;
}
}
while (cnt nums.length) {
nums[cnt++] = 0;
}
}
}
nums =
[[1,2],
[3,4]]
r = 1, c = 4
输出:
[[1,2,3,4]]
解释:
行遍历nums的结果是 [1,2,3,4]。新的矩阵是 1 * 4 矩阵, 用之前的元素值一行一行填充新矩阵。class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
int or = nums.length;
int oc = nums[0].length;
if(or*oc!=r*c) return nums;
int[][] newnums = new int[r][c];
int index = 0;
for (int i = 0; i ) {
for (int j = 0; j ) {
newnums[i][j] = nums[index / oc][index % oc];
index++;
}
}
return newnums;
}
}
上一篇:简单的推荐算法
文章标题:LeetCode日记——【数据结构】数组与矩阵专题
文章链接:http://soscw.com/index.php/essay/84843.html