代码随想录算法训练营第36期DAY35

news2024/11/19 0:21:09

DAY35

122买卖股票的最佳时机ii

很巧妙,也很难想到:计算每天的利润(今天卖出,昨天买入的利润),只取正数相加。

  1. class Solution {
  2. public:
  3.     int maxProfit(vector<int>& prices) {
  4.         int diif=0,res=0;
  5.         for(int i=0;i<prices.size()-1;i++){
  6.             diif=prices[i+1]-prices[i];
  7.             if(diif<0) diif=0;
  8.             res+=diif;
  9.         }
  10.         return res;
  11.     }
  12. };

55跳跃游戏

把可选的(每次可选跳几步)复杂问题转化为覆盖单位问题(能覆盖到哪)。

自己还是写不出覆盖的代码。多学一下;

关键在于 i<=cover; i要在覆盖范围内移动;

取max也是关键

  1. class Solution {
  2. public:
  3.     bool canJump(vector<int>& nums) {
  4.         int cover=0;
  5.         if(nums.size()==1return true;
  6.         //关键在于 i<=cover; i要在覆盖范围内移动
  7.         for(int i=0;i<=cover;i++){
  8.             cover=max(nums[i]+i,cover);//也是关键
  9.             if(cover>=nums.size()-1return true;
  10.         }
  11.         return false;
  12.     }
  13. };

45跳跃游戏ii

难呀。复杂。

方法一:

用最少的步数,尽可能覆盖最多的范围。

当前覆盖范围用完,但是仍然没有覆盖到终点,就启动下一步覆盖范围(nextcover)

  1. class Solution {
  2. public:
  3.     int jump(vector<int>& nums) {
  4.         int cur=0,next=0,res=0;
  5.         if(nums.size()==1return 0;
  6.         for(int i=0;i<nums.size();i++){
  7.             next=max(next,i+nums[i]);
  8.             if(i==cur){
  9.                 res++;
  10.                 cur=next;
  11.                 if(cur>=nums.size()-1break;
  12.             }
  13.         }
  14.         return res;
  15.     }
  16. };

442数组中重复的数据,中等

学习参考:b站up主,老汤讲底层基础。

(高频算法面试题:找出数组中的重复元素)

[https://www.bilibili.com/video/BV1hG411q7q6/?spm_id_from=333.788&vd_source=baa5f3043be10f96febc0c68c5983df5]

注意要找到所有出现两次的整数,这样的整数可能不只有一个。        

  1. 暴力线性查找
  1. vector<int> res;
  2. for(int i=0;i<nums.size();i++){
  3.    for(int j=i+1;j<nums.size();j++){
  4.        if(nums[i]==nums[j]) res.push_back(nums[i]);
  5.     }
  6. }

  1. 排序+二分查找

二分怎么用?学一学:

首先对数组排序,然后使用二分查找来查找后面的元素中是否有和当前元素相同的元素,如果找到,就添加到结果中。

  1. class Solution {
  2. public:
  3.     int EFfind(int l,int r,vector<int>&nums,int target){
  4.         while(l<r){
  5.             int mid=(l+r+1)/2;
  6.             if(nums[mid]<=target) l=mid;
  7.             else r=mid-1;
  8.         }
  9.         if(nums[l]!=target) return -1;
  10.         return l;
  11.     }
  12.     vector<intfindDuplicates(vector<int>& nums) {
  13.         sort(nums.begin(),nums.end());
  14.         vector<int> res;
  15.         for(int i=0;i<nums.size()-1;i++){
  16.             if(EFfind(i+1,nums.size()-1,nums,nums[i])!=-1) res.push_back(nums[i]);
  17.         }
  18.         return res;
  19.     }
  20. };

  1. 排序+双指针

法2没有用到相邻这一特性,这里用到了:

  1. class Solution {
  2. public:
  3.     vector<intfindDuplicates(vector<int>& nums) {
  4.         sort(nums.begin(),nums.end());
  5.         vector<int>res;
  6.         for(int i=0;i<nums.size();i++){
  7.             int j=i+1;
  8.             if(j<nums.size()&&nums[i]==nums[j]) res.push_back(nums[i]);
  9.         }
  10.         return res;
  11.     }
  12. };

  1. 哈希查找
  1. unordered_set<intset;
  2. vector<int>res;
  3. for(int i=0;i<nums.size();i++){
  4.     if(set.count(nums[i])) res.push_back(nums[i]);
  5.     set.insert(nums[i]);
  6. }

  1. 数组代替哈希表
  1. class Solution {
  2. public:
  3.     vector<intfindDuplicates(vector<int>& nums) {
  4.         vector<int>res;
  5.         int cnt[100010]={0};
  6.         for(int i=0;i<nums.size();i++){
  7.             if(cnt[nums[i]]) res.push_back(nums[i]);
  8.             cnt[nums[i]]++;
  9.         }
  10.         return res;
  11.     }
  12. };

  1. 最佳解决方案,符合题目要求:时间复杂度O(n),常量级的空间复杂度。

没必要了。。

复习一下树的对称的判断

101对称二叉树

还是不会呀,每天抽时间来复习做过的题吧。

这个题还是有很多细节,比如:什么时候才能继续往下递归;虽然是遍历树,但是仍然要接住他。

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. public:
  14.     bool isres(TreeNodeleft,TreeNoderight){
  15.         //排除空节点,避免空指针报错。且只有值相等时,才能往下递归
  16.         if(left==nullptr&&right==nullptr) return true;
  17.         else if(left==nullptr&&right!=nullptr) return false;
  18.         else if(left!=nullptr&&right==nullptr) return false;
  19.         else if(left->val!=right->val) return false;
  20.         bool inside=isres(left->right,right->left);
  21.         bool outside=isres(left->left,right->right);
  22.         return inside&&outside;
  23.     }
  24.     bool isSymmetric(TreeNode* root) {
  25.         if(root==nullptr) return true;
  26.         return isres(root->left,root->right);
  27.     }
  28. };

100相同的树

注意方向就好。

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. private:
  14.     bool findres(TreeNode*p,TreeNode*q){
  15.         if(p==nullptr&&q==nullptrreturn true;
  16.         else if(p!=nullptr&&q==nullptrreturn false;
  17.         else if(p==nullptr&&q!=nullptrreturn false;
  18.         else if(p->val!=q->val) return false;
  19.         bool in=findres(p->left,q->left);
  20.         bool out=findres(p->right,q->right);
  21.         return in&&out;
  22.     }
  23. public:
  24.     bool isSameTree(TreeNode* p, TreeNode* q) {
  25.     return findres(p,q);
  26.     }
  27. };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1707834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Broker的主从架构

为了保证MQ的数据不丢失而且具备一定的高可用性&#xff0c;所以一般都是得将Broker部署成Master-Slave模式的&#xff0c;也就是—个Master Broker对应一个Slave Broker Master需要在接收到消息之后&#xff0c;将数据同步给Slave&#xff0c;这样一旦Master Broker挂了&#…

YOLOV10阅读总结

GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection YOLOv10 - Ultralytics YOLO Docs https://arxiv.org/pdf/2405.14458 论文地址 最近yolo又出了个yolov10了&#xff0c;不得不感慨CV是真卷&#xff0c;毕竟yolov9也才没多久。记录一下阅读笔记。…

【JVM】一次JVM内存泄露分析处理

一次内存泄露分析 背景情况 编写了一个大数据基础组件的可用性监控程序&#xff0c;采用Bootstrap监测端口的方式&#xff0c;使得方法常驻&#xff08;main线程常驻&#xff09;&#xff0c;通过一个调度线程ScheduledThreadPoolExecutor&#xff0c;定时的调动监测任务。 …

短视频拍摄方式有哪些:四川鑫悦里文化传媒有限公司

​短视频拍摄方式有哪些 在数字化时代&#xff0c;短视频以其短小精悍、传播迅速的特点&#xff0c;成为了人们表达自我、分享生活的重要工具。然而&#xff0c;想要制作出引人入胜的短视频&#xff0c;除了创意和构思&#xff0c;拍摄方式的选择也至关重要。四川鑫悦里文化传…

详谈 Java中的list.forEach()和list.stream().forEach() 异同点

涉及的文章链接&#xff1a;ArrayList 循环Remove遇到的坑 一、想总结本篇博客的原因 在日常开发中&#xff0c;需要对集合数据进行或多或少的赋值修改&#xff0c;那么循环赋值或者做一些处理就是最常见的一种操作了&#xff0c;但是用习惯了stream流&#xff0c;所以在循环的…

聚合网卡和Wondershaper限速的一些问题(速度减半问题)

首先我们来了解一下聚合网卡&#xff1a; 聚合网卡&#xff0c;又称为链路聚合组&#xff08;LAG, Link Aggregation Group&#xff09;、端口汇聚&#xff08;Port Trunking&#xff09;、以太通道&#xff08;Ethernet Bonding&#xff09;等&#xff0c;是一种网络技术&…

【OpenCV】图形绘制与填充

介绍了绘制、填充图像的API。也介绍了RNG类用来生成随机数。相关API&#xff1a; line() rectangle() circle() ellipse() putText() 代码&#xff1a; #include "iostream" #include "opencv2/opencv.hpp"using namespace std; using namespace cv…

Git和plink

安装git的话首先进入到git官网进行下载Git - Downloading Package (git-scm.com) &#xff0c;点击便会自动进行下载。 安装plink时也是根据自己电脑的版本号选择进行安装&#xff0c;我的是windows的64位&#xff0c;由此选择以上版本进行安装&#xff0c;这一个下载完成之后不…

react中子传父信息

思路是&#xff1a; 在父组件定义一个函数接受参数&#xff0c;接收的参数用于接收子组件的信息&#xff0c;把函数传给子组件&#xff0c;子组件调用父亲传来的函数并把要告诉父亲的话传到函数中&#xff0c;就实现了子传父消息 import { useState } from reactimport { use…

JavaWeb笔记整理+图解——服务器渲染技术之EL表达式与JSTL

上一篇我们讲解了什么是服务器渲染技术和jsp&#xff0c;今天我来整理一下EL表达式和JSTL的笔记与图解&#xff0c;让我们的jsp页面更加的简洁与可维护。 没看过上一期的小伙伴可以看上一期的笔记&#xff1a; JavaWeb笔记全整理——JSP服务器渲染技术-CSDN博客 一、EL表达式…

揭开 SOCKS5 有哪些强大的功能?

在在线隐私和安全领域&#xff0c;SOCKS5 是一种多功能且功能强大的协议&#xff0c;为用户提供了一种无缝的方式来加密他们的互联网流量、绕过防火墙并以增强的匿名性和灵活性访问网络。无论您是担心在线监控、地理封锁还是数据隐私&#xff0c;了解如何利用 SOCKS5 的功能都可…

Apache-Doris单机部署

参考&#xff1a; 快速体验 Apache Doris - Apache Doris 1、Apache Doris是一款 基于MPP架构的高性能、实时的分析型数据库&#xff0c;以高效、简单、统一的特点被人们所熟知&#xff0c;仅需 亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点…

ue引擎游戏开发笔记(46)——简单UI设计

1.需求分析&#xff1a; 玩家操作界面应该有基本的准星和血量显示等内容&#xff0c;告知玩家角色的基本状态。 2.操作实现&#xff1a; 1.较为简单的内容&#xff0c;在控件面板建立相应内容&#xff0c;之后链接到游戏中即可&#xff01; 2.先做准星&#xff0c;在画布上搞个…

Day 56 647. 回文子串 516.最长回文子序列

回文子串 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 示例 1&#xff1a; 输入&#xff1a;“abc”输出&#xff1a;3解释&#xf…

蓝桥杯Web开发【大学组:国赛】2022年真题

1.分一分 如果给你一个数组&#xff0c;你能很快将它分割成指定长度的若干份吗&#xff1f; 1.1 题目问题 请在 js/index.js 文件中补全函数 splitArray 中的代码&#xff0c;最终返回按指定长度分割的数组。 具体要求如下&#xff1a; 将待分割的&#xff08;一维&#x…

“星战之父”乔治・卢卡斯吐槽好莱坞“几乎没有原创思维”,AI 将“不可避免”用于电影制作

《星球大战》系列的创作者乔治・卢卡斯&#xff08;George Lucas&#xff09;在 1977 年奠定了电影制作传奇人物的地位&#xff0c;他对当今电影的状况及其发展方向有一些自己的看法。 他在 2024 年戛纳电影节上谈到了当前的电影行业。现年 80 岁的卢卡斯在接受法国媒体 Brut …

STM32建立工程问题汇总

老版本MDK&#xff0c;例如MDK4 工程内容如下&#xff1a; User文件夹中存放main.c文件&#xff0c;用户中断服务函数&#xff08;stm32f1xx.it.c&#xff09;&#xff0c;用户配置文件&#xff08;stm32f1xx_hal_conf.h&#xff09;等用户程序文件&#xff0c;或者mdk启动程序…

GIT提交:.husky/pre-commit: line 2: .husky/_/husky.sh: No such file or directory

GIT提交&#xff1a;.husky/pre-commit: line 2: .husky/_/husky.sh: No such file or directory 一些项目添加了代码提交校验和格式化&#xff0c;在windows下会忽略.husky下文件提交导致git数据丢失。 处理方案&#xff1a; 方案01&#xff1a;补齐缺失的文件 1.1 项目根…

最新斗音评论区截流拓客,自动引流【引流软件+使用教程】

面对社交媒体的蓬勃生长&#xff0c;加粉和拓展客户群成为品牌及个体的当务之急。新推出的一款技术工具恰到好处地迎合了这一需求&#xff0c;提供了一个多功能、适用性强的增粉与互动解决方案。该工具与抖音平台的所有版本兼容&#xff0c;消除了对特定版本的依赖。 利用这一…

微服务架构-聚合设计模式

微服务架构-聚合设计模式 聚合器&#xff08;Aggregator&#xff09;设计模式&#xff1a;用于将来自多个微服务的数据&#xff0c;聚合成一个统一的响应&#xff0c;提供给客户端。 聚合模式的核心思想&#xff1a;是使用一个聚合器服务&#xff08;Aggregator Service&#…