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

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

DAY45

1两数之和

[https://www.bilibili.com/video/BV1pt421u7qG/?spm_id_from=333.880.my_history.page.click&vd_source=baa5f3043be10f96febc0c68c5983df5]

出自B站热血编程系列,主要是复习双指针sum写法、重载比较运算符

  1. class Solution {
  2. public:
  3.     vector<inttwoSum(vector<int>& nums, int target) {
  4.         unordered_map<int,intmap;
  5.         for(int i=0;i<nums.size();i++){
  6.             if(map.find(target-nums[i])!=map.end()) return {map[target-nums[i]],i};
  7.             map[nums[i]]=i;
  8.         }
  9.         return {};
  10.     }
  11. };

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

朴素法:

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

1049最后一块石头的重量ii

据说和416分割等和子集很像,思考一下:分成了size()/2+size()%2个集合,集合内部的差要尽可能地小。之后就不会了,晕眩。

如果要吃透这题,看这篇题解

[ https://leetcode.cn/problems/last-stone-weight-ii/solutions/805162/yi-pian-wen-zhang-chi-tou-bei-bao-wen-ti-5lfv/ ]

,他归纳了同类型的题,当然得先思考再看题解。

分成尽可能相等重量的两个石头堆。

  1. class Solution {
  2. public:
  3.     int lastStoneWeightII(vector<int>& stones) {
  4.         int sum=0;
  5.         for(auto n:stones) sum+=n;
  6.         int target=sum/2;
  7.         vector<intdp(1505,0);
  8.         for(int i=0;i<stones.size();i++){
  9.             for(int j=target;j>=stones[i];j--)
  10.             dp[j]=max(dp[j],dp[j-stones[i]]+stones[i]);
  11.         }
  12.         return sum-dp[target]-dp[target];
  13.     }
  14. };

494目标和

正数堆、负数堆。然后就不会了。

  1. 回溯:
  1. class Solution {
  2. public:
  3.     int count=0;
  4.     void backtracking(vector<int>&nums,int target,int index,int cursum){
  5.         if(index==nums.size()){
  6.             if(cursum==target) count++;
  7.         }
  8.         //要加else 否则不终止且越界.
  9.         else{
  10.         backtracking(nums,target,index+1,cursum+nums[index]);
  11.         backtracking(nums,target,index+1,cursum-nums[index]);
  12.         }
  13.     }
  14.     int findTargetSumWays(vector<int>& nums, int target) {
  15.         backtracking(nums,target,0,0);
  16.         return count;
  17.     }
  18. };

  1. 动态规划:

Left+right=sum;(无符号,仅集合)

Left-right=target;(手动给他上符号)

得出right=sum-left

进一步:left-sum+left=target;

所以:left=(target+sum)/2;

2*left=sum+target;“所以sum+target是偶数”是有解的保证。

之前的01背包:求的指定容量下的最大装载价值。这里不一样,他要求的是满足给定价值的选集合法有多少种?(装满容器有多少方法)

  1. class Solution {
  2. public:
  3.     int findTargetSumWays(vector<int>& nums, int target) {
  4.         int s=0;
  5.         for(auto n:nums) s+=n;
  6.         int left=(s+target)/2;
  7.         if((s+target)%2==1return 0;
  8.         if(abs(target)>s) return 0;
  9.         vector<intdp(left+1,0);
  10.         dp[0]=1;
  11.         for(int i=0;i<nums.size();i++){
  12.             for(int j=left;j>=nums[i];j--)
  13.             dp[j]+=dp[j-nums[i]];
  14.         }
  15.         return dp[left];
  16.     }
  17. };

474一和零

满足两个维度的背包。三变量(物品个数[也就是子集的长度]、m个0,n个1)

Dp数组的含义:dp[i][j] 装满i个0,j个1,最多(max)装了多少个物品(dp[i][j])。

Res: dp[m][n]

放入当前物品,有x个0,y个1;dp[i-x][j-y]+1;

  1. class Solution {
  2. public:
  3.     int findMaxForm(vector<string>& strs, int m, int n) {
  4.         vector<vector<int>>dp(m+1,vector<int>(n+1,0));
  5.         for(auto str:strs){
  6.             int x=0,y=0;
  7.             for(auto s:str){
  8.                 if(s=='0') x++;
  9.                 else y++;
  10.             }
  11.             for(int i=m;i>=x;i--){
  12.                 for(int j=n;j>=y;j--)
  13.                 dp[i][j]=max(dp[i][j],dp[i-x][j-y]+1);
  14.             }
  15.         }
  16.         return dp[m][n];
  17.     }
  18. };

相关文章:

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

DAY45 1两数之和 [https://www.bilibili.com/video/BV1pt421u7qG/?spm_id_from333.880.my_history.page.click&vd_sourcebaa5f3043be10f96febc0c68c5983df5] 出自B站热血编程系列&#xff0c;主要是复习双指针sum写法、重载比较运算符 class Solution {public: vec…...

springboot+vue 社区养老服务系统

Springbootvue社区居家养老服务系统&#xff0c;数据库mysql&#xff0c;mybatis框架&#xff0c;有可视化页面。 功能&#xff1a; 用户管理 养老服务管理 护理人员管理 服务类型管理 健康状况管理 社区管理 服务区管理 娱乐资讯管理 咨询分类管理 反馈建议 系统简历管理 轮播…...

AI 赋能前端 -- 文本内容概要生成

幸福不在于你获得了什么,而在于你比他人多获得了什么 是比较出来的 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder 此篇文章所涉及到的技术有 OpenAILangChainRust/WebAssemblyWeb Workerreact+ts+vite配置环境变量(env)因为,行文字数所限,有些概…...

orin部署tensorrt、cuda、cudnn、pytorch、onnx

绝大部分参考https://blog.csdn.net/qq_41336087/article/details/129661850 非orin可以参考https://blog.csdn.net/JineD/article/details/131201121 报错显卡驱动安装535没法安装、原始是和l4t-cuda的部分文件冲突 Options marked [*] produce a lot of output - pipe it t…...

使用javacv对摄像头视频转码并实现播放

要实现Java接受RTSP流解码&#xff0c;并推送给前端实现播放实时流&#xff0c;可以使用一些流媒体处理库&#xff0c;比如JavaCV或者FFmpeg等。以下是一个简单的示例代码&#xff1a; 1.控制层方面的 根据视频rtsp流链接打开转换&#xff0c;通过响应写出流到前台使用flvjs播…...

Linux网络-Socket套接字_Windows与Linux端双平台基于Udp传输协议进行多线程跨平台的服务器与客户端网络通信的简易聊天室实现

文章目录 一、Socket套接字二、Udp 常见API1. int socket(int domain, int type, int protocol);2. int bind(int socket, const struct sockaddr *address, socklen_t address_len);struct sockaddr 3. ssize_t recvfrom(int socket, void *restrict buffer, size_t length, i…...

20分钟快速入门SQL

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种专门用来管理和操作关系型数据库的编程语言。以下是SQL入门的一些基础概念和教程&#xff1a; 1. SQL基础 数据库&#xff08;Database&#xff09;&#xff1a;存储数据的集合。表&am…...

汇总区间,合并区间

题目一&#xff1a; 代码如下&#xff1a; vector<string> summaryRanges(vector<int>& nums) {vector<string> ret;if (nums.size() 0)return ret;int n nums.size();int i 0;while (i < n){int prev i;i;while (i < n && nums[i] n…...

Web程序设计-实验05 DOM与BOM编程

题目 【实验主题】 影视网站后台影视记录管理页设计 【实验任务】 1、浏览并分析多个网站后台的列表页面、编辑页面&#xff08;详见参考资源&#xff0c;建议自行搜索更多后台页面&#xff09;的主要元素构成和版面设计&#xff0c;借鉴并构思预期效果。 2、新建 index.h…...

Window系统安装Docker

因为docker只适合在liunx系统上运行&#xff0c;如果在window上安装的话&#xff0c;就需要开启window的虚拟化&#xff0c;打开控制面板&#xff0c;点击程序&#xff0c;在程序和功能中可以看到启动和关闭window功能&#xff0c;点开后&#xff0c;找到Hyper-V&#xff0c;Wi…...

RabbitMQ不完整的笔记

同步的不足 1、拓展性差&#xff0c;当要添加功能时&#xff0c;需要在原来的功能代码上做修改&#xff0c;高耦合。 2、性能下降&#xff0c;调用者需要等待服务提供者执行完返回结果后&#xff0c;才能继续向下执行 3、级联失败&#xff0c;由于我们是基于OpenFeign调用交易…...

微软Edge浏览器深度解析:功能、同步、隐私与安全

微软Edge浏览器是微软公司开发的一款网页浏览器,它基于Chromium内核,提供了快速、安全和兼容性良好的网页浏览体验。以下是关于微软Edge浏览器的详细信息和使用指南: 微软Edge浏览器的主要特点: 1. 基于Chromium内核: 渲染引擎:Chromium内核是基于开源项目Blink的,它…...

网络性能测试工具:iperf3介绍

文章目录 前言一、iperf3 的安装和使用下载和安装参数说明 二、iperf3 测试服务端启动客户端启动服务端输出反向测试客户端服务端 前言 新接触的网络环境如何评估网络带宽和吞吐量呢&#xff0c;有的项目没有对业务流量进行合理规划&#xff0c;服务或者中间件出口带宽经常有被…...

scp:Linux系统本地与远程文件传输命令

scp 是Linux系统中用于在本地主机和远程主机之间进行文件传输的命令。 详细说明&#xff1a; scp 命令用于安全地将文件从一个主机传输到另一个主机&#xff0c;所有传输数据都是加密的。语法&#xff1a; scp [参数] [源文件路径] [目标主机:目标路径] 参数说明&#xff1a…...

python基础(习题、资料)

免费提取资料&#xff1a; 练习、资料免费提取。持续更新迅雷云盘https://pan.xunlei.com/s/VNz6kH1EXQtK8j-wwwz_c0k8A1?pwdrj2x# 本文为Python的进阶知识合辑&#xff0c;包括列表&#xff08;List&#xff09;、元组&#xff08;Tuple&#xff09;、字典&#xff08;Dic…...

shell脚本免交互

shell脚本的编写一方面为了减少我们命令的输入&#xff0c;另一方面也可以进行简单的自动化运行&#xff0c;其中为了实现自动化过程&#xff0c;一个很重要的点就是免交互&#xff0c;本篇文章跟大家简单分享两个常用的免交互的方法。 Here Document Here document 通过内联重…...

WPF学习笔记:给文字添加线性渐变效果

<TextBox Text"XXX信息管理系统" VerticalAlignment"Center" Background"Transparent" HorizontalAlignment"Center" FontSize"35" FontWeight"Normal"> <TextBox.Effect> <…...

Fully Convolutional Networks for Semantic Segmentation--论文笔记

论文笔记 资料 1.代码地址 2.论文地址 https://arxiv.org/abs/1411.4038 3.数据集地址 论文摘要的翻译 卷积网络是强大的视觉模型&#xff0c;可以产生特征层次结构。我们表明&#xff0c;卷积网络本身&#xff0c;经过端到端&#xff0c;像素对像素的训练&#xff0c;在…...

Camworks编程怎么样:深度解析其四大特点、五大应用领域、六大优势与七大挑战

Camworks编程怎么样&#xff1a;深度解析其四大特点、五大应用领域、六大优势与七大挑战 Camworks编程&#xff0c;作为计算机辅助制造&#xff08;CAM&#xff09;领域的一款重要软件&#xff0c;近年来在制造业中得到了广泛的应用。那么&#xff0c;Camworks编程究竟怎么样呢…...

【Linux】操作系统之冯诺依曼体系

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 操作系统中 冯诺依曼体系 的相关内容。 如果看到最后您觉得这篇文…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...