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

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. };

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习300问】93、到底什么是优化器optimizer?

本文是对之前我写的梯度下降优化算法相关内容进行一次简要总结。在学习PyTorch框架的过程中&#xff0c;会遇到“优化器”&#xff08;optimizer&#xff09;这个概念。我想用通俗易懂的方式&#xff0c;说说优化器到底是个什么东西&#xff0c;并在此基础上&#xff0c;将前文…

Qt代码初识

文章目录 Qt代码初识1. Qt Hello World 程序1.1 使⽤ "按钮" 实现1.1.1 纯代码⽅式实现1.1.2 可视化操作实现 1.2 使⽤ "标签" 实现1.2.1 纯代码⽅式实现1.2.2 可视化操作实现 2. 项⽬⽂件解析2.1 .pro ⽂件解析2.2 widget.h ⽂件解析2.3 main.cpp ⽂件解析…

SwanLab入门深度学习:BERT IMDB文本情感分类

基于BERT模型的IMDB电影评论情感分类&#xff0c;是NLP经典的Hello World任务之一。 这篇文章我将带大家使用SwanLab、transformers、datasets三个开源工具&#xff0c;完成从数据集准备、代码编写、可视化训练的全过程。 观察了一下&#xff0c;中文互联网上似乎很少有能直接…

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

漏洞复现环境搭建请参考 http://t.csdnimg.cn/MxmId 漏洞版本 Apache Log4j 2.8.2之前的2.x版本 漏洞验证 &#xff08;1&#xff09;开放端口4712 漏洞利用 &#xff08;1&#xff09;ysoserial工具获取 wget https://github.com/frohoff/ysoserial/releases/download/v0…

强化学习算法

从上图看出&#xff0c;强化学习可以分成价值/策略、随机策略/确定策略、在线策略/离线策略、蒙特卡洛/时间差分这四个维度。这里分析了基础算法中除了在线策略/离线策略以外的其他维度。 &#xff08;一&#xff09;基础知识 一、基础概念 重点概念&#xff1a;状态S、动作A、…

浏览器自动化~插件推荐Automa

引言 作为一款现代浏览器&#xff0c;得自动化吧&#xff0c;自主完成那些日复一日的重复性任务&#xff0c;开启音乐啥的不在话下~。而你则可以专注于其他更有意义的事情&#xff0c;如享受音乐带来的愉悦。但如果你对编写脚本一窍不通&#xff0c;又该如何实现这一愿景呢&am…

华为机考入门python3--(28)牛客28-素数伴侣

分类&#xff1a;质数、素数、贪心算法、矩阵 知识点&#xff1a; 素数里除了2&#xff0c;都是奇数 奇奇偶&#xff0c;偶&#xff0b;偶偶 对矩阵求和 sum(map(sum, matrix)) 查找元素 3 在列表中的索引 my_list.index(3) 题目来自【牛客】 质数又称素数&#xff0c;是指…

一种综合评价及决策方法:层次分析法AHP

大家好&#xff0c;层次分析法(Analytic Hierarchy Process&#xff0c;AHP)是一种多准则决策方法&#xff0c;它帮助决策者处理复杂的决策问题&#xff0c;将其分解成层次结构&#xff0c;然后通过两两比较来确定各个层次的因素之间的相对重要性。这种分析方式允许决策者对问题…

【vue与iframe通讯】

vue 与 iframe 通讯 发送数据vue 向 iframe 发送数据iframe 向 vue 发送数据接收信息( vue & iframe 通用) 实现相互通讯通讯流程图实现代码vue 页面iframe页面iframe内部重定向访问地址,更新vue路由 代码下载 前言&#xff1a;vue嵌套iframe实现步骤 发送数据 vue 向 if…

回溯算法05(leetcode491/46/47)

参考资料&#xff1a; https://programmercarl.com/0491.%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97.html 491. 非递减子序列 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素…

微软开发者大会:编程进入自然语言时代、“AI员工”闪亮登场

当地时间周二&#xff0c;美国科技公司微软召开年度Build开发者大会。在CEO纳德拉的带领下&#xff0c;微软各个产品团队再一次展现出惊人的执行力&#xff0c;在发布会上又拿出了接近50个新产品或功能更新。 整场发布会持续了接近两个小时&#xff0c;在这里挑选了一些投资者…

知识表示概述

文章目录 知识表示研究现状技术发展趋势 知识表示 知识是人类在认识和改造客观世界的过程中总结出的客观事实、概念、定理和公理的集合。知识具有不同的分类方式&#xff0c;例如按照知识的作用范围可分为常识性知识与领域性知识。知识表示是将现实世界中存在的知识转换成计算机…

Linux进程的地址空间

Linux进程的地址空间 1. 前言 在编写程序语言的代码时&#xff0c;打印输出一个变量的地址时&#xff0c;这个地址在内存中是以什么形式存在的&#xff1f;一个地址可以存储两个不同的值吗&#xff1f; 运行以下代码&#xff1a; #include <stdio.h> #include <un…

C#-根据日志等级进行日志的过滤输出

文章速览 概要具体实施创建Log系统动态修改日志等级 坚持记录实属不易&#xff0c;希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区&#xff01; 谢谢~ 概要 方便后期对软件进行维护&#xff0c;需要在一些关键处添加log日志输出&#xff0c;但时间长…

vulhub——ActiveMQ漏洞

文章目录 一、CVE-2015-5254(反序列化漏洞)二、CVE-2016-3088&#xff08;任意文件写入漏洞&#xff09;2.1 漏洞原理2.2 写入webshell2.3 写入crontab 三、CVE-2022-41678&#xff08;远程代码执行漏洞&#xff09;方法一方法2 四、CVE-2023-46604&#xff08;反序列化命令执行…

HTML+CSS+JS 扩散登录表单动画

效果演示 Code <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,us…

MAIA:多模态自动化可解释智能体的突破

随着人工智能技术的飞速发展&#xff0c;深度学习模型在图像识别、自然语言处理等领域取得了显著成就。然而&#xff0c;这些模型的“黑箱”特性使得其决策过程难以理解&#xff0c;限制了它们的应用范围和可靠性。为了解决这一问题&#xff0c;研究者们提出了多种模型可解释性…

【机器学习】—机器学习和NLP预训练模型探索之旅

目录 一.预训练模型的基本概念 1.BERT模型 2 .GPT模型 二、预训练模型的应用 1.文本分类 使用BERT进行文本分类 2. 问答系统 使用BERT进行问答 三、预训练模型的优化 1.模型压缩 1.1 剪枝 权重剪枝 2.模型量化 2.1 定点量化 使用PyTorch进行定点量化 3. 知识蒸馏…

[emailprotected](7)父子通信,传递元素内容

目录 1&#xff0c;children 属性2&#xff0c;多个属性 普通对象等&#xff0c;可以通过变量直接传递&#xff0c;那类似 vue 中的 slot 插槽&#xff0c;如何传递元素内容&#xff1f; 1&#xff0c;children 属性 实际上&#xff0c;写在自定义组件标签的内部代码&#xf…

【再探】Java—泛型

Java 泛型本质是参数化类型&#xff0c;可以用在类、接口和方法的创建中。 1 “擦除式”泛型 Java的“擦除式”的泛型实现一直受到开发者的诟病。 “擦除式”的实现几乎只需要在Javac编译器上做出改进即可&#xff0c;不要改动字节码、虚拟机&#xff0c;也保证了以前没有使…