LeetCode日记——数据结构数组与矩阵专题
Posted 菅兮徽音
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode日记——数据结构数组与矩阵专题相关的知识,希望对你有一定的参考价值。
题1:移动0
LeetCode题号:283
难度:Easy
题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [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; } } }
分析:
设置一个计数值cnt来统计数组中非0的元素的个数。
遍历整个数组,遇到不是0的数,就将nums[cnt]位置设为该数,然后计数值cnt++。
遍历完整个数组后,cnt即为非0元素的个数。然后我们从索引cnt开始(因为数组下标从0开始)把数组的后部分都设置为0即可。
题2:重塑矩阵
难度:Easy
题目描述:
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
示例 1:
输入:
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 < r; i++) { for (int j = 0; j < c; j++) { newnums[i][j] = nums[index / oc][index % oc]; index++; } } return newnums; } }
分析:
核心在于,设置双重循环遍历新数组的每个位置,然后利用nums[index/oc][index%oc]为newnums[i][j]赋值。
以上是关于LeetCode日记——数据结构数组与矩阵专题的主要内容,如果未能解决你的问题,请参考以下文章