LeetCode日记——【数据结构】数组与矩阵专题

2021-05-12 20:29

阅读:384

标签:解释   重构   ret   style   str   i++   shape   数值   否则   

  题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:重塑矩阵

LeetCode题号:556

难度: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 ) {
            for (int j = 0; j ) {
                newnums[i][j] = nums[index / oc][index % oc];
                index++;
            }
        }
        return newnums;        
    }
}

分析:

核心在于,设置双重循环遍历新数组的每个位置,然后利用nums[index/oc][index%oc]为newnums[i][j]赋值。

 

LeetCode日记——【数据结构】数组与矩阵专题

标签:解释   重构   ret   style   str   i++   shape   数值   否则   

原文地址:https://www.cnblogs.com/augenstern/p/13138170.html


评论


亲,登录后才可以留言!