LeetCode每日一练(189, 122)

一、旋转数组(Rotate Array)

题目:给定数组 nums 和整数 k,将数组中的元素向右轮转 k 个位置。

代码:

cpp 复制代码
class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        vector<int> temp(nums);
        int numsLen = nums.size();
        int real = k % numsLen;
        for (int i = 0; i < numsLen; ++i) {
            if (i + real < numsLen) {
                nums[i + real] = temp[i];
            } else {
                nums[i + real - numsLen] = temp[i]; 
            }
        }
    }
};

思路很简单:

  1. 先用 temp 备份一份原数组,避免边改边读。

  2. 对于原来下标 i 的元素,旋转后应该到位置 (i + real) % numsLen

  3. if / else 手动实现了这个取模逻辑:

    • i + real < numsLen 放到 i + real

    • 否则放到 i + real - numsLen

时间复杂度:O(n),遍历一次。

空间复杂度:O(n),额外一份备份数组。

如果想稍微简洁一点,可以写成:

cpp 复制代码
int real = k % numsLen;
for (int i = 0; i < numsLen; ++i) {
    int newIndex = (i + real) % numsLen;
    nums[newIndex] = temp[i];
}

核心:备份原数组,用 (i + k) % n 计算新下标。

二、买卖股票的最佳时机 II

题目:给定数组 pricesprices[i] 是第 i 天的股价。可以多次买入和卖出(不能同时持有多股),求最大利润。

代码:

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int res = 0;
        for (int i = 1; i < prices.size(); ++i) {
            if (prices[i] > prices[i - 1]) {
                res += prices[i] - prices[i - 1];
            }
        }
        return res;
    }
};

思路(贪心):

  1. 允许多次交易,只要不同时持有多股。

  2. 对于一段上涨区间 [p0 < p1 < ... < pk]

    • 一次性买在 p0,卖在 pk,利润是 pk - p0

    • 或者每天赚差价:(p1 - p0) + (p2 - p1) + ... + (pk - p(k-1)),结果一样。

  3. 所以直接把所有"今天比昨天贵"的差价加起来,就是最大利润。

代码里就是:

  • i = 1 开始遍历;

  • 如果 prices[i] > prices[i - 1],就把这两天的差价加进 res

时间复杂度:O(n);空间复杂度:O(1)

这两个题的共同点:

都是线性扫描数组,加一点简单的小公式(旋转用 (i + k) % n,股票用"所有正的差价相加")。

相关推荐
怪奇云呼军7 分钟前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
ZC跨境爬虫20 分钟前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
乐观勇敢坚强的老彭1 小时前
C++ 竞赛常用算法模板速查表
开发语言·c++·算法
高洁011 小时前
工信部教考中心证书
人工智能·深度学习·算法·机器学习·知识图谱
我变成萤火虫2 小时前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
Dr.kangder2 小时前
嵌入式面试总结(十九)——内存泄露
单片机·算法·面试·职场和发展·架构·硬件架构
Herbert_hwt2 小时前
【C语言基础】常量、选择结构与运算符全解析
c语言·开发语言·算法
buhuizhiyuci2 小时前
【Linux 篇】数字世界的水流蓄水池 —— IO 缓冲区机制深度实战解析
linux·运维·服务器·c++
liulilittle2 小时前
LLM 推理引擎与内核系统工程原理
c++·ai·llm·内存·memory·core·kernel
Suxing93 小时前
C语言基础分享:从“租房”到“拆迁”,C语言动态内存管理
java·数据结构·算法