【代码随想录】刷题笔记Day35

前言

  • 日常学习,抵触心理5%;毫无指示的干活,抵触心理95%

122. 买卖股票的最佳时机 II - 力扣(LeetCode)

  • 把整体利润拆分为每次利润,只要积上涨的就可以,so easy
  • class Solution {
    public:
        int maxProfit(vector<int>& prices) {
            int result = 0;
            for (int i = 1; i < prices.size(); i++) {
                result += max(prices[i] - prices[i - 1], 0);
            }
            return result;
        }
    };

55. 跳跃游戏 - 力扣(LeetCode)

  • 一步步走,更新最大可覆盖到的位置,关键在 i <= cover
  • class Solution {
    public:
        bool canJump(vector<int>& nums) {
            int cover = 0;
            if (nums.size() == 1) return true; // 只有一个元素,就是能达到
            for (int i = 0; i <= cover; i++) { // 注意这里是小于等于cover
                cover = max(i + nums[i], cover);
                if (cover >= nums.size() - 1) return true; // 说明可以覆盖到终点了
            }
            return false;
        }
    };

45. 跳跃游戏 II - 力扣(LeetCode)

  • 当前最大范围走到底发现不够了,就用该范围内更新的最大范围替代,相当于走一步
  • class Solution {
    public:
        int jump(vector<int>& nums) {
            if (nums.size() == 1) return 0;
            int curDistance = 0;    // 当前覆盖最远距离下标
            int ans = 0;            // 记录走的最大步数
            int nextDistance = 0;   // 下一步覆盖最远距离下标
            for (int i = 0; i < nums.size(); i++) {
                nextDistance = max(nums[i] + i, nextDistance);  // 更新下一步覆盖最远距离下标
                if (i == curDistance) {                         // 遇到当前覆盖最远距离下标
                    ans++;                                  // 需要走下一步
                    curDistance = nextDistance;             // 更新当前覆盖最远距离下标(相当于加油了)
                    if (nextDistance >= nums.size() - 1) break;  // 当前覆盖最远距到达集合终点,不用做ans++操作了,直接结束
                    // 这个特殊情况也可以通过控制for里的i<nums.size()-1解决
                }
            }
            return ans;
        }
    };

1005. K 次取反后最大化的数组和 - 力扣(LeetCode) 

  • 先按照绝对值从大到小排,负数先转一遍,K有余1则把绝对值最小的转了
  • class Solution {
    static bool cmp(int a, int b) {
        return abs(a) > abs(b);
    }
    public:
        int largestSumAfterKNegations(vector<int>& A, int K) {
            sort(A.begin(), A.end(), cmp);       // 第一步
            for (int i = 0; i < A.size(); i++) { // 第二步
                if (A[i] < 0 && K > 0) {
                    A[i] *= -1;
                    K--;
                }
            }
            if (K % 2 == 1) A[A.size() - 1] *= -1; // 第三步
            int result = 0;
            for (int a : A) result += a;        // 第四步
            return result;
        }
    };

后言

  • 代码盯久了脑阔疼,今天2.33搞到B站大会员月卡,刷B站去咯

相关推荐

  1. 代码随想笔记Day36

    2023-12-14 10:40:04       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-14 10:40:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-14 10:40:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-14 10:40:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-14 10:40:04       20 阅读

热门阅读

  1. Golang模板语法

    2023-12-14 10:40:04       39 阅读
  2. 网络编程案例

    2023-12-14 10:40:04       42 阅读
  3. Python 表达式计算详解(eval)

    2023-12-14 10:40:04       40 阅读
  4. C++11在算法竞赛中常用语法特征/语法糖

    2023-12-14 10:40:04       31 阅读
  5. FPGA设计流程:从概念到实现的详细指南

    2023-12-14 10:40:04       32 阅读
  6. 【Typora 的一些常用使用方法】

    2023-12-14 10:40:04       46 阅读
  7. SpringCloud 和 Linux 八股文第一期五问五答

    2023-12-14 10:40:04       32 阅读
  8. xml.etree.ElementTree --- ElementTree XML API

    2023-12-14 10:40:04       27 阅读
  9. mysql迁移步骤

    2023-12-14 10:40:04       30 阅读
  10. Python核心编程之文件和输入输出

    2023-12-14 10:40:04       36 阅读