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

算法学习day31(动态规划)

一、比特位计数

给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。

输入:n = 2
输出:[0,1,1]
解释:0 --> 0 1 --> 1 2 --> 10
思路一: 如果是偶数的话,1的个数和它的一半是相同的;如果是奇数的话,1的个数等于它前面那个偶数的个数+1
代码:
int countBits(int num) {int[] res=new int[num+1]result[0] = 0;for(int i = 1; i <= num; i++){if(i%2==0)res[i]=res[i/2];else res[i]=res[i-1]+1;}return result;}
思路二:遇到一个数,想办法把它拆成 最靠近它的2的幂 和另一个数

eg:7拆成4和3 4中1的个数有1个,3中1的个数有2个 所以res[7]=res[4]+res[3]

如果遇到2的幂次,dp[i]=1;

代码:
  public int[] countBits(int n) {int[] dp = new int[n + 1];dp[0] = 0;int x = 1;for (int i = 1; i <= n; i++) {// 如果是2的幂,只有最高位为1if (i == x) {dp[i] = 1;x *= 2;} else {// 如果不是2的幂,则为取模最高位后的值+1// 例如 5 % 4 = 1, 那么就是4+1也就是 101;也就是1+dp[1]; int mod = i % (x / 2);dp[i] = 1 + dp[mod];//1代表的是2的幂,dp[mod]代表的是剩下的那个数的1的值}}return dp;}

二、打家劫舍/打家劫舍II(二刷 dp)

题意:小偷要偷窃,相邻房屋是不能偷窃的,否则就会发出报警信号。给定一个数组nums,表示每个房间的价值,第一个房屋和最后一个房屋是相邻的,给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。
思路:

因为房屋是相邻的,所以要破除这个环,那么应该如何破除?因为首尾是相连的,所以我们只需要考虑两种情况:偷首就不能偷尾;偷尾就不能偷首

那我们就把两种情况分别可以偷窃到的最高金额计算出来,比较之后返回。

那么如何计算偷窃道德最高金额?动态规划。

一间屋子可以偷也可以不偷,偷的话dp[i]=dp[i-2]+nums[i];不偷的话:dp[i]=dp[i-1]

dp[i]:偷窃到第i间房子所偷窃的最大价值

递推公式:dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1]);

初始化:dp[0]=nums[0],dp[1]=Math.max(nums[0],nums[1]);

遍历顺序:从i=2开始

代码:
class Solution {public int rob(int[] nums) {if(nums.length<=1)return nums[0];//如何破环int part1=getMax(nums,0,nums.length-2);int part2=getMax(nums,1,nums.length-1);return Math.max(part1,part2);}public int getMax(int[] nums,int left,int right){if(right==left)return nums[left];int[] dp=new int[right-left+1];dp[0]=nums[left];dp[1]=Math.max(nums[left],nums[left+1]);for(int i=left+2;i<=right;i++){dp[i-left]=Math.max(dp[i-2-left]+nums[i],dp[i-1-left]);}return Math.max(dp[dp.length-1],dp[dp.length-2]);}
}

三、两个键的键盘(dp)

最初记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作:

  • Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。
  • Paste(粘贴):粘贴 上一次 复制的字符。

给你一个数字 n ,你需要使用最少的操作次数,在记事本上输出 恰好 n 个 'A' 。返回能够打印出 n 个 'A' 的最少操作次数。

思路:

如何才可以得到n个‘A’?可以根据因数来做。

eg:n=12; 可以是6个A CopyAll->Paste之后得到12个A

也可以是3个A CopyAll->Paste3次后得到12个A

还可以是2个A CopyAll->Paste5次后得到12个A

如果是质数的话,那么操作的次数就是它本身,需要CopyAll+Paste(n-1)次

所以就是在它的因数里面找最小操作次数。双循环

代码:
class Solution {public int minSteps(int n) {//dp[i]的定义:打印出i个A字符需要的操作次数int[] dp=new int[n+1];//dp初始化dp[1]=0;//遍历数组for(int i=2;i<=n;i++){dp[i]=i;for(int j=2;j<=Math.sqrt(i);j++){if(i%j==0){dp[i]=Math.min(dp[i],dp[j]+i/j);dp[i]=Math.min(dp[i],dp[i/j]+j);}}}return dp[n];}
}

四、解码方法

一条包含字母 A-Z 的消息通过以下映射进行了 编码 :

"1" -> 'A'  "2" -> 'B'  "25" -> 'Y'  "26" -> 'Z'

然而,在 解码 已编码的消息时,你意识到有许多不同的方式来解码,因为有些编码被包含在其它编码当中("2" 和 "5" 与 "25")。

给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数 。如果没有合法的方式解码整个字符串,返回 0

输入:s = "226"
输出:3
解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
思路:这道题是爬楼梯类似。但是比爬楼梯要多个决定条件。

给定一串字符串。

如果该数字不等于0,那么就可以只切割该字符,此时dp[i+1]=dp[i];   和爬楼梯从下一层爬到该层一样;

在上一个条件的基础上,如果该数字可以和前一个数字组成一个合法的字符(>=10&&<=26),那么就可以从下两层爬到该层(一次爬两个)。此时dp[i+1]+=dp[i-1];

动态规划五部曲:

1.dp[i]:代表的含义是:字符串中以i-1为结尾的字串的切割方法有多少种。dp.length=s.length()+1

2.递推公式:

    2.1如果和上一个数字无法组成合法的大写字母:dp[i+1]=dp[i];

    2.2 如果和上一个数字可以组成合法的大写字母:dp[i+1]=dp[i]+dp[i-1]

3.初始化:dp[0]=dp[1]=1; 默认空串也有一种切割方式。

eg:226。遍历到index=1的时候,可以组成一个合法的大写字母。dp[i+1]=dp[i]+dp[i-1]。这里的dp[i-1]就代表着22

代码:
class Solution {public int numDecodings(String s) {int size=s.length();int[] dp=new int[size+1];dp[0]=1;//初始化 dp[1]=1;//dp[i]表示的是字符串中以(i-1)为结尾的字串 有多少种切割方式if(s.charAt(0)=='0')return 0;for(int i=1;i<size;i++){char ch1=s.charAt(i);if(ch1-'0'!=0){dp[i+1]+=dp[i];}char ch2=s.charAt(i-1);//如果这两个数字可以组成一个有效的大写字母if((ch2-'0')*10+(ch1-'0')>=10&&(ch2-'0')*10+(ch1-'0')<=26){dp[i+1]+=dp[i-1];}}return dp[size];}
}

相关文章:

算法学习day31(动态规划)

一、比特位计数 给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 输入&#xff1a;n 2 输出&#xff1a;[0,1,1] 解释&#xff1a;0 --> 0 1 --> 1 2 -…...

嵌入式学Day25---Linux软件编程---线程间通信

目录 ​编辑 一、线程的分离属性 1.1.什么是分离属性 1.2.分离属性相关函数接口 1.初始化线程属性-pthread_attr_init() 2.销毁线程属性-pthread_attr_destory() 3.设置线程属性-pthread_setdetachstate() 1.3.注意 二、互斥锁 2.1.资源 2.2.互斥锁 1.什么是互斥锁 2.互…...

【实现100个unity特效之17】在unity中使用shader和ShaderGraph分别实现模糊特定层,高斯模糊效果

最终效果 Unity通过Shader来模糊场景画面 参考&#xff1a;【游戏开发小技】Unity通过UI全屏图来模糊场景画面&#xff08;Shader | 模糊 | 滤镜 | Blur&#xff09; ShaderGraph实现图片的高斯模糊 参考&#xff1a;【游戏开发实战】Unity ShaderGraph实现图片的高斯模糊效…...

Unity补完计划 之 SpriteEditer Multiple

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1. SpriteEditer Multiple Automatic slicing - Unity 手册 这是用于裁剪图集的模式 应用之后精灵编辑器会看到Slice亮…...

C++ IOStream

IOStream 类流特性 不可赋值和复制缓冲重载了<< >> 状态位 示例 状态位操作函数coutcin getget(s,n)/get(s,n,d):getline otherif(!fs)/while(cin) operator void*()与 operator!()代码示例 File Stream open 函数 文件打开方式 文件读写 读写接口 一次读一个字符…...

2024/8/8训练

A - 无线网络整点栅格统计 题目链接 算法:模拟 题目大意 给你一个n*m的网格,然后输出每一个点作为顶点能构成的正方形数量(可以为斜正方形). 算法思路 本身题目数据是很小的,可以通过n^2的时间复杂度枚举每一个顶点,然后再通过n平方的时间复杂度枚举出另一个对角顶点,判断…...

项目的小结

项目场景&#xff1a; 作业的发布&#xff0c;打回 。 学生端做作业 由作业的state来确定作业是否上交&#xff0c;批改&#xff0c;打回作业。 实体类的建立&#xff0c;还有各种成员变量的设计要满足需求 问题描述 问题&#xff1a; 在进行上传作业后&#xff0c;老师端…...

【目标检测实验系列】YOLOv5高效涨点:基于NAMAttention规范化注意力模块,调整权重因子关注有效特征(文内附源码)

1. 文章主要内容 本篇博客主要涉及规范化注意力机制&#xff0c;融合到YOLOv5(v6.1版本&#xff0c;去掉了Focus模块)模型中&#xff0c;通过惩罚机制&#xff0c;调整特征权重因子&#xff0c;使模型更加关注有效特征&#xff0c;助力模型涨点。 2. 简要概括 论文地址&#x…...

LSPatch制作内置模块应用软件无需root 教你制作内置应用

前言 LSPatch功能非常强大&#xff0c;它是一款基于LSPosed核心的免Root Xposed框架软件。这意味着用户无需进行手机root操作&#xff0c;即可轻松植入内置Xposed模块&#xff0c;享受更多定制化的功能和体验&#xff0c;比如微某内置模块版等&#xff0c;这为那些不想root手机…...

Java设计模式七大原则

本篇为七大原则概述&#xff0c;后面会有每个原则的介绍&#xff0c;喜欢的朋友可以蹲一下哦&#xff01;&#xff01;&#xff01;&#xff01; Java设计模式的七大原则一般是指“面向对象设计原则”&#xff0c;这些原则有助于在设计软件系统时提高代码的可维护性、可扩展性和…...

Copy as cURL 字段含义

当前端在开发过程中&#xff0c;遇到接口错误反馈给后端人员时&#xff0c;一般在此接口处右键复制为cURL。 格式如下&#xff1a; curl https://xxx.xxx.cn/xxx/xxx/management/record/list \-H accept: application/json, text/plain, */* \-H accept-language: zh-CN,zh;q0…...

mysql更改密码后,若依 后端启动不了解决方案

我原先的mysql 密码是 数字字符串 我想改成000 纯数字 改完之后&#xff0c;连接的数据库的代码 也更改后 &#xff0c;后端启动不了 因为原先 密码数字字符串 不需要用引号" " 括起来 我改成纯数字 需要用 " " 括起来 如下图 然后就可以运行成功了...

Redis--缓存击穿、缓存穿透、缓存雪崩

缓存击穿 什么是缓存击穿呢&#xff1f; 在高并发的场景下,一个热点的缓存数据在redis中突然失效(过期或被删除时&#xff0c;所有的读请求都会直接落在数据库上&#xff0c;导致数据库瞬间压力剧增&#xff0c;严重时可能会造成数据库宕机。这种情况就是所谓的“缓存击穿”。(…...

10个理由告诉你,为什么鸿蒙是下一个职业风口!

在当今科技飞速发展的时代&#xff0c;新的技术和趋势不断涌现&#xff0c;为人们带来了前所未有的机遇和挑战。鸿蒙操作系统作为我国自主研发的创新成果&#xff0c;正逐渐成为科技领域的焦点&#xff0c;被认为是下一个职业风口。 10个理由告诉你&#xff0c;为什么鸿蒙是下一…...

Gitlab仓库的权限分配以及如何查看自己的权限

在GitLab中&#xff0c;权限分配和查看自己的权限可以通过以下步骤进行&#xff1a; ### 1. 查看自己的权限 要查看你在某个GitLab项目中的权限&#xff0c;可以按照以下步骤操作&#xff1a; 1. 登录到GitLab。 2. 进入你想查看权限的项目页面。 3. 在左侧菜单中&#xff0c…...

职业本科大数据实训室

一、职业本科大数据实训室建设背景 在数字化浪潮汹涌澎湃的今天&#xff0c;大数据已跃升为引领社会进步和经济发展的新引擎。随着《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》的深入实施&#xff0c;数字化转型作为国家战略的重要组成部分&…...

【密码学】网络攻击类型:窃听攻击、假冒攻击、欺骗攻击和重放攻击

一、窃听攻击、假冒攻击、欺骗攻击和重放攻击的定义 这些攻击从名字中就大概能知道他们的攻击原理&#xff0c;我就不赘述了&#xff0c;直接用一个表格来一次性介绍四种攻击方式。 攻击类型攻击原理窃听攻击攻击者监听网络中的数据传输以获取敏感信息。示例&#xff1a;在未加…...

探索WebKit的奥秘:塑造高效、兼容的现代网页应用

探索WebKit的奥秘&#xff1a;塑造高效、兼容的现代网页应用 在数字时代的洪流中&#xff0c;网页应用已成为连接用户与信息的桥梁&#xff0c;其性能、兼容性和用户体验直接决定了产品的成败。WebKit&#xff0c;作为众多现代浏览器背后的核心渲染引擎&#xff0c;承载着将HT…...

2-52 基于matlab局部信息的模糊C均值聚类算法(FLICM)

基于matlab局部信息的模糊C均值聚类算法&#xff08;FLICM&#xff09;&#xff0c;是在FCM聚类算法的基础上结合了图像的邻域信息&#xff0c;有更好的鲁棒性。程序已调通&#xff0c;可直接运行。 2-52 局部信息的模糊C均值聚类算法 - 小红书 (xiaohongshu.com)...

JAVASE

1.泛型 泛型指类型参数化&#xff0c; 在定义期间&#xff0c;不知道调用时会使用什么类型&#xff0c;就可以添加泛型形参&#xff0c;在使用时传入实参固定类型即可。 泛型类&#xff1a; 泛型应用在类上。 一般用在类名后&#xff0c;用尖括号括起来。用大写字母作为泛型参…...

FLUX.1-dev像素生成器效果对比:不同采样器(Euler/DPM++)像素质感差异

FLUX.1-dev像素生成器效果对比&#xff1a;不同采样器&#xff08;Euler/DPM&#xff09;像素质感差异 1. 像素幻梦创意工坊简介 像素幻梦 (Pixel Dream Workshop) 是基于FLUX.1-dev扩散模型构建的专业像素艺术生成工具。它采用独特的16-bit像素工坊视觉设计&#xff0c;为创…...

【2026知网预警】不想论文被直接退稿?10款降AI工具实测红黑榜,带你避开90%的坑

说真的&#xff0c;现在写论文难&#xff0c;改论文更难。交稿前一查&#xff0c;心都凉半截。AI痕迹动不动就飘红&#xff0c;导师那边没法交代&#xff0c;系统检测也过不了关。为了找出靠谱的降AI法子&#xff0c;我也是折腾了好几天。 我把以下10个降AI工具一个个试过来了…...

RMBG-2.0部署避坑指南:常见问题解决方案

RMBG-2.0部署避坑指南&#xff1a;常见问题解决方案 1. 引言 最近RMBG-2.0这个开源背景去除模型确实火得不行&#xff0c;效果确实惊艳&#xff0c;精确到发丝级别的抠图能力让很多开发者跃跃欲试。但在实际部署过程中&#xff0c;不少朋友都遇到了各种坑&#xff1a;环境配置…...

计算机视觉——疲劳检测、基于DNN的年龄性别预测

一、疲劳检测&#xff08;基于 dlib 的人脸检测与 68 点关键点定位&#xff09;1.1摘要疲劳检测是一类通过分析人体行为&#xff08;如眼睛闭合、头部姿态、打哈欠等&#xff09;来判断个体是否处于疲劳或注意力不集中的技术。它在驾驶员监控、驾驶安全、课堂学员状态检测、远程…...

mbeduino:Arduino语法兼容层实现RTOS级嵌入式开发

1. 项目概述mbeduino是一个面向嵌入式开发者的桥接型开源库&#xff0c;其核心目标是将 Arduino 生态中高度抽象、易上手的编程范式&#xff08;如setup()/loop()结构、digitalWrite()/analogRead()等语义化 API&#xff09;无缝移植至 ARM mbed OS 平台。它并非 Arduino IDE 的…...

Cookie、Session、Token 详细讲解

Cookie、Session、Token 这三个是Web 身份认证、会话管理的核心技术&#xff0c;核心围绕「用户登录后&#xff0c;怎么证明你是你」展开。先给一个最通俗的比喻&#xff1a;Cookie&#xff1a;酒店给你的房卡贴纸&#xff0c;你自己揣着&#xff0c;每次进房间出示Session&…...

Tinycon终极指南:如何在网站favicon上优雅显示通知气泡的完整教程

Tinycon终极指南&#xff1a;如何在网站favicon上优雅显示通知气泡的完整教程 【免费下载链接】tinycon A small library for manipulating the favicon, in particular adding alert bubbles and changing images. 项目地址: https://gitcode.com/gh_mirrors/ti/tinycon …...

小程序常用页面跳转 5 种方式汇总(开发常备手册)

小程序多页面协作离不开路由跳转&#xff0c;不同场景对应不同跳转 API&#xff0c;今天一次性整理齐全&#xff0c;开发随时查阅。保留当前页跳转&#xff08;普通内页&#xff09;wx.navigateTo({url:"/pages/detail/detail"})关闭当前页再跳转wx.redirectTo({url:…...

算法——bfs/dfs

Find The Multiple 给定一个正整数 n&#xff0c;编写一个程序找出 n 的一个非零倍数 m&#xff0c;其十进制表示只包含数字 0 和 1。可以假设 n 不大于 200&#xff0c;并且存在一个 m&#xff0c;其十进制表示不超过 100 位。 输入 输入文件可能包含多个测试用例。每一行包含…...

倩女幽魂手游全自动24小时系统|雷电模拟器多线程中控+自动倒米交易+智能喊话器(含易语言源码)

温馨提示&#xff1a;文末有联系方式全自动全天候运行&#xff0c;毫秒级响应不中断 本方案实现真正意义上的24小时无人值守全自动运行&#xff0c;所有操作基于精准时间戳与事件触发机制&#xff0c;确保交易指令0延迟下发&#xff0c;告别卡顿与漏单&#xff0c;大幅提升倒米…...