【代码随想录刷题记录】day02数组

今日任务

  • 完成数组刷题
  • 完成数组基础知识+总结
  • 学习二叉树
  • 学习第二天的解题思路

常规作业

有序数组的平方

问题

这里列举简单的初始化方式。
 1) vector<int> num;
 2) vector<int> num = nums;
 3) vector<int> num(nums.size());
 4) vector<int> num(nums.size(), 3);
  • 不知道vector<int> numsvector<int>& nums 的区别???

在这里插入图片描述
后续修改初始化就解决了 vector<int> newnums(nums.size(), 0);

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        vector<int> newnums(nums.size(), 0);
        int fastIndex = nums.size()-1;
        int slowIndex = 0;
        int index = nums.size()-1;
        while (slowIndex <= fastIndex) {
            if (nums[fastIndex] * nums[fastIndex] > nums[slowIndex] * nums[slowIndex]) {
                newnums[index--] = nums[fastIndex] * nums[fastIndex];
                fastIndex--;
            } 
            else {
                newnums[index--] = nums[slowIndex] * nums[slowIndex];
                slowIndex++;
            }
        }
        return newnums;
    }
};

长度最小的子数组

思路是没有错,但是中间有几个判断并没有考虑清楚。

  • 子串的长度为 fast-slow+1
  • 设置minlenth的初始值为最大,卡哥设置为INT32_MAX。最开始设置为0,导致min(初始值,计算值)全为0;
  • 设置跳出循环的条件以及输出。在当前slow取不到target时,可以选择跳出循环不再查找。
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int slowIndex = 0;
        int fastIndex = 0;
        int sum = nums[slowIndex];
        int minlenth = nums.size();
        int flag = 0;
        while (slowIndex <= nums.size()-1){
            cout << slowIndex << endl;
            while (sum < target) {
                cout << sum << endl;
                fastIndex++;
                if (fastIndex >= nums.size()) {
                    return flag? minlenth: 0;
                }
                sum += nums[fastIndex];
            }
            minlenth = min(minlenth, fastIndex - slowIndex + 1);
            flag = 1;
            sum = sum - nums[slowIndex];
            slowIndex++;
        }
        return minlenth;
    }
};

看完题解后,觉得卡哥写的更合理。

  • 应该遍历fastIndex而不是slowIndex。

螺旋矩阵

花了三十分钟。对于其中的max_lenth=1的部分没有判断,导致浪费了很多时间。
以及不熟悉二维vector的初始化。vector<vector<int>> matrix(n, vector<int>(n));

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> matrix(n, vector<int>(n));
        int matrix_lenth = n;  
        int row_start = 0;
        int col_start = 0;
        int row_end = n-1;
        int col_end = n-1; 
        int num = 1;       
        while (matrix_lenth >= 0) {
            if (matrix_lenth == 1) {
                matrix[row_start][col_start] = num;
                break;
            } else {
                for (int i = 0; i < matrix_lenth - 1; i++){
                    matrix[row_start][col_start + i] = num;
                    cout<< num<< endl;
                    num++;
                }
                for (int i = 0; i < matrix_lenth - 1; i++){
                    matrix[row_start + i][col_end] = num;
                    num++;
                    cout<< num<< endl;
                }
                for (int i = 0; i < matrix_lenth - 1; i++){
                    matrix[row_end][col_end - i] = num;
                    num++;
                    cout<< num<< endl;
                }
                for (int i = 0; i < matrix_lenth - 1; i++){
                    matrix[row_end - i][col_start] = num;
                    num++;
                }
                row_start++;
                col_start++;
                row_end--;
                col_end--;
                matrix_lenth=matrix_lenth-2; 
            }

        }
        
        return matrix;

    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值