2024年刷题记录

马上要开始找实习了,又开始重启刷题计划了!加油冲冲冲!刷题的顺序follow代码随想录的60天刷题计划!感谢FuCosmo的总结!之前都是按照C++的语法进行刷题的,这次也同样使用C++。

Day 1 数组

这些题过年前都刷过了,所以过的快一些。通过写一些题解的方式来,帮助自己回顾这些方法,记住一些核心点。

704. 二分查找

  • 训练是否取等号,这里选择的是双边都闭合的空间
  • 对于mid的计算方式,有两种mid = (left + right) / 2或者是mid = left + (left - right) / 2
cpp 复制代码
class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        int mid;
        while (left <= right) {
            mid = (left + right) / 2;
            if (nums[mid] == target){
                return mid;
            } else if (nums[mid] < target){
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1;
    }
};

27. 移除元素

  • 双指针的思想
  • 一个指针用来遍历数组中的所以元素(指向当前将要处理的元素)
  • 一个指针用来记录下一个将要赋值的位置
cpp 复制代码
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int i = 0;
        int j = 0;
        while (i < nums.size()) {
            if (nums[i] != val) {
                nums[j] = nums[i];
                j++;
            }
            i++;
        }
        return j;
    }
};

977. 有序数组的平方

  • 暴力的解放,利用sort函数
    • 基本的语法
      • vector的创建
        • vector<int> ans;
        • vector<int> ans(n);
      • vector中添加元素
        • ans.push_back(num);
      • vector的排序
        • sort(ans.begin(), ans.end());
    • 时间复杂度是 O(nlogn),其中 n 是数组 nums的长度。
    • 空间复杂度是 O(logn),除了存储答案的数组以外,我们需要 O(logn) 的栈空间进行排序
cpp 复制代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int i = 0;
        vector<int> ans;
        while (i < nums.size()){
            ans.push_back(nums[i] * nums[i]);
            i++;
        }
        sort(ans.begin(), ans.end());
        return ans;
    }
};
  • 双指针的解法
    • 非递减数组,元素当中存在负数
    • 第一个指针指向找到第一个大于等于0的元素
    • 如果第一个指针为0,则不需要第二个指针
    • 反之,第二个指针指向第一个元素左侧的元素
      • 比较左右指针两个元素的大小,逐个加入
      • 这里需要用到三个循环
      • 同时移动两个指针
      • 当一个指针已经移动完,则只移动单侧的指针
    • 时间复杂度是O(n)。其中 n 是数组 nums 的长度。
    • 空间复杂度是O(1)。除了存储答案的数组以外,我们只需要维护常量空间。
cpp 复制代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int i = 0;
        vector<int> ans;
        for (int num : nums) {
            if (num < 0) {
                i++;
            } else {
                break;
            }
        }

        if (i == 0) {
            for (int num : nums) {
                ans.push_back(num * num);
            }
            return ans;
        } else {
            int j = i - 1;
            while (i < nums.size() && j >= 0) {
                if (nums[i] * nums[i] < nums[j] * nums[j]) {
                    ans.push_back(nums[i] * nums[i]);
                    i++;
                } else {
                    ans.push_back(nums[j] * nums[j]);
                    j--;
                }
            }
            while (i < nums.size()) {
                ans.push_back(nums[i] * nums[i]);
                i++;
            }
            while (j >= 0){
                ans.push_back(nums[j] * nums[j]);
                j--;
            }
        }
        return ans;

    }
  • 双指针的解法二
    • 一个指针指向第一个元素
    • 另一个指针指向最后一个元素
    • 从后往前加元素
    • 时间复杂度是O(n)。其中 n 是数组 nums 的长度。
    • 空间复杂度是O(1)。除了存储答案的数组以外,我们只需要维护常量空间。
cpp 复制代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int n = nums.size();
        vector<int> ans(n);
        for (int i = 0, j = n - 1, pos = n - 1; i <= j; pos--) {
            if (nums[i] * nums[i] > nums[j] * nums[j]) {
                ans[pos] = nums[i] * nums[i];
                i++;
            } else {
                ans[pos] = nums[j] * nums[j];
                j--;
            }
        }
        return ans;
    }
};

209.长度最小的子数组

相关推荐
杰九2 分钟前
【算法题】46. 全排列-力扣(LeetCode)
算法·leetcode·深度优先·剪枝
manba_10 分钟前
leetcode-560. 和为 K 的子数组
数据结构·算法·leetcode
liuyang-neu10 分钟前
力扣 11.盛最多水的容器
算法·leetcode·职场和发展
忍界英雄19 分钟前
LeetCode:2398. 预算内的最多机器人数目 双指针+单调队列,时间复杂度O(n)
算法·leetcode·机器人
Kenneth風车20 分钟前
【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·数据分析
C7211BA38 分钟前
使用knn算法对iris数据集进行分类
算法·分类·数据挖掘
Tisfy40 分钟前
LeetCode 2398.预算内的最多机器人数目:滑动窗口+单调队列——思路清晰的一篇题解
算法·leetcode·机器人·题解·滑动窗口
程序猿练习生44 分钟前
C++速通LeetCode简单第18题-杨辉三角(全网唯一递归法)
c++·算法·leetcode
Huazzi.1 小时前
算法题解:斐波那契数列(C语言)
c语言·开发语言·算法
汉字萌萌哒1 小时前
【2022 CCF 非专业级别软件能力认证第一轮(CSP-J1)入门级 C++语言试题及解析】
数据结构·c++·算法