当前位置: 首页 > news >正文

【2023】字节跳动 10 日心动计划——第四关

目录

  • 1. 买卖股票的最佳时机
  • 2. 打家劫舍 II

1. 买卖股票的最佳时机

🔗 原题链接:121. 买卖股票的最佳时机

假设在第 i i i 天卖出股票可获得最大利润,那么买入股票必然是在前 i − 1 i-1 i1 天中的某一天。更进一步,买入股票应当是第 arg min ⁡ 0 ≤ x ≤ i − 2 a [ x ] \argmin_{0\leq x\leq i-2} a[x] argmin0xi2a[x] 天。这说明我们可以维护一个 minprice 的变量,这样一来,a[i] - minprice 就代表在第 i i i 天卖出股票能够获得的最大利润。

class Solution {
public:int maxProfit(vector<int>& prices) {int minprice = 1e9;int ans = 0;for (auto& price: prices) {minprice = min(minprice, price);ans = max(ans, price - minprice);}return ans;}
};

2. 打家劫舍 II

先回顾第一代的打家劫舍。

🔗 原题链接:198. 打家劫舍

考虑使用dp。我们用 dp[i] 来代表偷前 i i i 家能够获得的最大金额,那么我们可以按照第 i i i 个元素的情况对 dp[i] 进行划分。

  • 偷窃第 i i i 间房屋,那么就不能偷窃第 i − 1 i-1 i1 间房屋,偷窃总金额为前 i − 2 i-2 i2 间房屋的最高总金额与第 i i i 间房屋的金额之和。
  • 不偷窃第 i i i 间房屋,偷窃总金额为前 i − 1 i-1 i1 间房屋的最高总金额。

转移方程为:

d p [ i ] = m a x ( d p [ i − 2 ] + n u m s [ i ] , d p [ i − 1 ] ) dp[i]=max(dp[i-2]+nums[i], \,dp[i-1]) dp[i]=max(dp[i2]+nums[i],dp[i1])

class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();if (n == 0) return 0;if (n == 1) return nums[0];vector<int> dp(n);dp[0] = nums[0];dp[1] = max(nums[0], nums[1]);for (int i = 2; i < n; i++) {dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);}return dp[n - 1];}
};

下面回到本题。

🔗 原题链接:213. 打家劫舍 II

假如偷第 0 0 0 间房屋,那么剩下可以偷窃的范围就是 [ 2 , n − 2 ] [2,n-2] [2,n2];假如不偷第 0 0 0 间房屋,那么剩下可以偷窃的范围就是 [ 1 , n − 1 ] [1,n-1] [1,n1]。取两者中的最大值就是本题答案。

class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();if (n == 1) return nums[0];if (n == 2) return max(nums[0], nums[1]);vector<int> a(nums.begin() + 2, nums.begin() + n - 1);int price1 = rob1(a) + nums[0];vector<int> b(nums.begin() + 1, nums.begin() + n);int price2 = rob1(b);return max(price1, price2);}int rob1(vector<int>& nums) {int n = nums.size();if (n == 0) return 0;if (n == 1) return nums[0];vector<int> dp(n);dp[0] = nums[0];dp[1] = max(nums[0], nums[1]);for (int i = 2; i < n; i++) {dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);}return dp[n - 1];}
};

此外,还可以使用滚动数组将空间复杂度优化至 O ( 1 ) O(1) O(1),这里从略。

相关文章:

【2023】字节跳动 10 日心动计划——第四关

目录 1. 买卖股票的最佳时机2. 打家劫舍 II 1. 买卖股票的最佳时机 &#x1f517; 原题链接&#xff1a;121. 买卖股票的最佳时机 假设在第 i i i 天卖出股票可获得最大利润&#xff0c;那么买入股票必然是在前 i − 1 i-1 i−1 天中的某一天。更进一步&#xff0c;买入股票应…...

数据库与数据仓库的区别及关系

数据库与数据仓库的区别及关系 数据库数据仓库异同差异联系例子 数据库 数据库是结构化信息或数据的有序集合&#xff0c;一般以电子形式存储在计算机系统中。通常由数据库管理系统 (DBMS) 来控制。它是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集…...

Emacs之设置行号前景颜色(字体颜色)/背景颜色/光标颜色/背景透明度(一百二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

【hive经典指标,离线数仓指标,ADS层指标分析】最近7日内连续3日下单用户数

1.建表语句 DROP TABLE IF EXISTS ads_order_continuously_user_count; CREATE EXTERNAL TABLE ads_order_continuously_user_count (dt STRING COMMENT 统计日期,recent_days BIGINT COMMENT 最近天数,7:最近7天,order_continu…...

线上java程序CPU及内存占用过高问题排查总结

背景 最近发现线上的一个JAVA程序总是过段时间慢慢卡死&#xff0c;最后导致无法提供服务&#xff0c;外部请求接口超时。 经排查发现&#xff0c;该程序CPU及内存占用都很高&#xff0c;导致整个系统负载很高。 到这里&#xff0c;就想到了对程序内存进行分析。排查过程 查询…...

c高级:day3

作业: 1. 整理思维导图 2.判断家目录下,普通文件的个数和目录文件的个数 #!/bin/bash ######################################################################## # File Name: zy1.sh # Created Time: 2023年08月04日 星期五 19时13分08秒 ##############################…...

Java检查值是否存在于数组中的3种方法

在 Java 中&#xff0c;有许多方法可以检查此数组中是否存在特定元素。 1&#xff09;使用线性搜索方法 时间复杂度&#xff1a;O(N) 辅助空间&#xff1a;O(1) for (int element : arr) { if (element toCheckValue) { return true; } } 示例代码&#xff1a; import java.ut…...

python 连接oracle pandas以简化excel的编写和数据操作

python代码 Author: liukai 2810248865qq.com Date: 2022-08-18 04:28:52 LastEditors: liukai 2810248865qq.com LastEditTime: 2023-07-06 22:12:56 FilePath: \PythonProject02\pandas以简化excel的编写和数据操作.py Description: 这是默认设置,请设置customMade, 打开koro…...

Kubernetes高可用集群二进制部署(三)部署api-server

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…...

【网络|TCP】三次握手、四次握手

TCP是一种面向连接的可靠的传输协议&#xff0c;建立和断开TCP连接时需要进行握手的过程。其中&#xff0c;TCP的连接建立需要进行三次握手&#xff0c;而连接断开则需要进行四次握手。 解释 三次握手 第一次握手&#xff1a;客户端发送一个SYN&#xff08;同步&#xff09;报…...

刷题笔记 day7

力扣 209 长度最小的子数组 解法&#xff1a;滑动指针&#xff08;对同向双指针区间内的数据处理&#xff09; 1&#xff09;先初始化 两个指针 left &#xff0c;right。 2&#xff09;右移指针right的同时使用sum记录指针right处的值&#xff0c;并判断sum的值是否满足要求&…...

Tuxera NTFS2023Mac强大的Mac读写工具

Mac用户在使用NTFS格式移动硬盘时&#xff0c;会遇到无法写入硬盘的情况。要想解决无法写入的问题&#xff0c;很多人选择使用Mac读写软件。面对市面上“众多”的读写硬盘软件&#xff0c;用户应该怎么选择呢&#xff1f;初次接触移动硬盘的伙伴可能不知道移动硬盘怎么和电脑连…...

ARM64 常见汇编指令学习 11 -- ARM 汇编宏 .macro 的学习

文章目录 ARM 汇编宏介绍ARM 汇编宏的使用 下篇文章&#xff1a;ARM64 常见汇编指令学习 12 – ARM 汇编函数 的学习 上篇文章&#xff1a;ARM64 常见汇编指令学习 10 – 无符号位域提取指令 BFXIL ARM 汇编宏介绍 在 ARM 汇编中&#xff0c;“.macro” 是用来定义一个宏的指…...

数据库的分库分表

#!/bin/bash ######################### #File name:db_fen.sh #Version:v1.0 #Email:admintest.com #Created time:2023-07-29 09:18:52 #Description: ########################## MySQL连接信息 db_user"root" db_password"RedHat123" db_cmd"-u${…...

[Docker实现测试部署CI/CD----相关服务器的安装配置(2)]

目录 6、Jenkins安装配置安装jdk安装maven拉取镜像启动jenkins修改数据卷权限浏览器访问安装插件配置jenkins移动JDK和Maven配置JDK和Maven 6、Jenkins安装配置 Jenkins 是一个开源软件项目&#xff0c;是基于 Java 开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&…...

LC-980. 不同路径 III(回溯)

980. 不同路径 III 难度困难291 在二维网格 grid 上&#xff0c;有 4 种类型的方格&#xff1a; 1 表示起始方格。且只有一个起始方格。 2 表示结束方格&#xff0c;且只有一个结束方格。 0 表示我们可以走过的空方格。 -1 表示我们无法跨越的障碍。 返回在四个方向&…...

软件测试缺陷报告

缺陷报告是描述软件缺陷现象和重现步骤地集合。软件缺陷报告Software Bug Report&#xff08;SBR&#xff09;或软件问题报告Software Problem Report&#xff08;SPR&#xff09; 作用&#xff1a;缺陷报告是软件测试人员的工作成果之一&#xff0c;体现软件测试的价值缺陷报…...

vue js-table2excel 导出excel 可带多张图片

1.安装js-table2excel插件&#xff1a; npm install js-table2excel2.使用 2.1:引入 import table2excel from js-table2excel;2.2:导出函数 function exportExcel() {console.log(导出, table2excel);const column [{title: 二维码id,key: fname,type: text,},{title: 二维…...

HTML 基础标签

前言 当今互联网时代&#xff0c;网页是我们获取信息、交流和展示自己的重要渠道之一。而HTML&#xff08;超文本标记语言&#xff09;作为构建网页的基础&#xff0c;学习掌握HTML标签成为了必不可少的技能。 标题标签 <h1>~<h6>&#xff1a;这是用来定义标题的…...

Nginx使用proxy_cache指令设置反向代理缓存静态资源

场景 CentOS7中解压tar包的方式安装Nginx&#xff1a; CentOS7中解压tar包的方式安装Nginx_centos7 tar文件 怎么load_霸道流氓气质的博客-CSDN博客 参考上面流程实现搭建Nginx的基础上&#xff0c;实现静态资源的缓存设置。 注意上面安装时的目录是在/opt/nginx目录下&…...

突破信息壁垒:Bypass Paywalls Clean的非典型应用指南

突破信息壁垒&#xff1a;Bypass Paywalls Clean的非典型应用指南 在信息自由日益受到限制的数字时代&#xff0c;内容解锁工具成为知识获取的重要桥梁。Bypass Paywalls Clean作为一款开源浏览器扩展&#xff0c;以其轻量高效的特性&#xff0c;为用户提供了突破付费内容限制的…...

Escrcpy手机投屏:解决安卓手机投屏到电脑的常见问题与实用指南

你是否遇到过这样的场景&#xff1a;需要在电脑上演示手机App操作&#xff0c;却只能用手机对着摄像头&#xff1b;想在大屏幕上观看手机里的视频&#xff0c;却找不到合适的投屏工具&#xff1b;或者需要用电脑键盘在手机上快速输入文字&#xff0c;却只能低头戳屏幕。这些需求…...

笔记草稿本

...

如何让 Claude Code 彻底变聪明:完整记忆 + 插件体系 + 本地零占用实战教程(2026最新)!!!

从“每次重启就失忆的实习生” → “拥有长期记忆、实时知识、安全检查、结构化工作流的资深架构师”大家好&#xff0c;我最近在用 Claude Code 开发项目时&#xff0c;深深感受到上下文丢失和知识过时的痛苦。经过一番折腾&#xff0c;我把目前社区最强、最实用的插件体系全部…...

从零到实战:手把手教你构建LLM的四大核心阶段!

从零开始构建 LLMs 的四个阶段&#xff0c;使其能够应用于真实场景。 涵盖&#xff1a; 预训练指令微调偏好微调推理微调0️⃣ 随机初始化的 LLM 此时&#xff0c;模型一无所知。 你问它“什么是 LLM&#xff1f;”&#xff0c;得到的却是像“try peter hand and hello 448Sn”…...

Java安全编程与静态分析实战

由于当前年份尚未到达2026年&#xff0c;且未明确具体代码功能需求&#xff0c;以下提供一份通用的Java代码质量与静态分析实战示例&#xff0c;涵盖常见代码规范、静态分析工具集成和单元测试实践。假设需求为“实现一个安全的字符串处理工具类并集成静态分析”&#xff1a;代…...

OpenClaw技能市场巡礼:Qwen3-4B适配的十大实用模块

OpenClaw技能市场巡礼&#xff1a;Qwen3-4B适配的十大实用模块 1. 为什么需要关注OpenClaw技能市场&#xff1f; 第一次接触OpenClaw时&#xff0c;我被它"AI操控电脑"的概念吸引&#xff0c;但真正让我持续使用的却是它的技能市场&#xff08;ClawHub&#xff09;…...

MsServer 2000-2016 客户端对应驱动文件

连接ms server&#xff0c;需要安装ms数据库驱动文件&#xff0c;下面是对应关系 早期版本是Nativ client包 微软OLE DB包 微软ODBC包 &#xff08;包括v11 13 17 18 x86和x64合集&#xff09; 他奶奶的csdn&#xff0c;上传的资源自动强制设置成vip付费的&#xff0c;真不要…...

OpenClaw技能市场挖掘:百川2-13B-4bits量化版适配插件精选

OpenClaw技能市场挖掘&#xff1a;百川2-13B-4bits量化版适配插件精选 1. 为什么需要专门适配百川模型的技能&#xff1f; 去年冬天第一次尝试用OpenClaw对接百川2-13B模型时&#xff0c;我遇到了一个典型问题&#xff1a;虽然模型本身运行良好&#xff0c;但很多现成的技能模…...

RAG系统的多路召回(Multi-Retrieval)详解

在RAG&#xff08;检索增强生成&#xff09;系统中&#xff0c;多路召回是一种通过多种检索策略并行获取候选文档&#xff0c;再进行结果融合的机制。它的核心目的是提高召回率&#xff0c;确保不同类型的查询都能被有效检索。一、为什么需要多路召回&#xff1f;单一检索方式存…...