Android学习总结之算法篇三(打家劫舍)
打家劫舍一
// 动态规划
class Solution {public int rob(int[] nums) {if (nums == null || nums.length == 0) return 0;if (nums.length == 1) return nums[0];int[] dp = new int[nums.length];dp[0] = nums[0];dp[1] = Math.max(dp[0], nums[1]);for (int i = 2; i < nums.length; i++) {dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);}return dp[nums.length - 1];}
}
打家劫舍二(环)
public class HouseRobberCircular {/*** 计算在环形房屋布局下,不触动警报装置时能偷窃到的最大金额* 由于房屋围成一圈,所以需要分别考虑不偷第一间房屋和不偷最后一间房屋的情况* @param nums 每个房屋存放的金额数组* @return 最大偷窃金额*/public int rob(int[] nums) {// 如果数组长度为 1,直接返回该房屋的金额if (nums.length == 1) {return nums[0];}// 计算不偷第一间房屋时能获得的最大金额int max1 = robRange(nums, 1, nums.length - 1);// 计算不偷最后一间房屋时能获得的最大金额int max2 = robRange(nums, 0, nums.length - 2);// 返回两种情况中的最大值return Math.max(max1, max2);}/*** 计算在指定范围内的房屋中,不触动警报装置时能偷窃到的最大金额* @param nums 每个房屋存放的金额数组* @param start 起始房屋索引* @param end 结束房屋索引* @return 指定范围内的最大偷窃金额*/private int robRange(int[] nums, int start, int end) {// 记录前一个房屋的最大偷窃金额int prevMax = 0;// 记录当前房屋的最大偷窃金额int currMax = 0;// 遍历指定范围内的房屋for (int i = start; i <= end; i++) {// 临时保存当前房屋的最大偷窃金额int temp = currMax;// 更新当前房屋的最大偷窃金额,取偷当前房屋和不偷当前房屋的最大值currMax = Math.max(prevMax + nums[i], currMax);// 更新前一个房屋的最大偷窃金额prevMax = temp;}// 返回指定范围内的最大偷窃金额return currMax;}public static void main(String[] args) {// 创建 HouseRobberCircular 类的实例HouseRobberCircular solution = new HouseRobberCircular();// 定义测试数组int[] nums = {2, 3, 2};// 调用 rob 方法计算最大偷窃金额并打印输出System.out.println(solution.rob(nums)); }
}
打家劫舍三(二叉树)
// 定义二叉树节点类
class TreeNode {// 节点存储的金额int val;// 左子节点TreeNode left;// 右子节点TreeNode right;// 构造函数,用于初始化节点的值TreeNode(int x) { val = x; }
}public class HouseRobberBinaryTree {/*** 计算在不触发警报的情况下,小偷能从二叉树结构的房屋布局中盗取的最大金额* @param root 二叉树的根节点* @return 可盗取的最大金额*/public int rob(TreeNode root) {// 调用 dfs 方法获取两个值,分别是不偷根节点和偷根节点时的最大金额int[] result = dfs(root);// 返回两者中的最大值作为最终结果return Math.max(result[0], result[1]);}/*** 深度优先搜索方法,递归计算以当前节点为根的子树中,不偷和偷当前节点时的最大金额* @param node 当前处理的节点* @return 包含两个元素的数组,第一个元素是不偷当前节点的最大金额,第二个元素是偷当前节点的最大金额*/private int[] dfs(TreeNode node) {// 如果当前节点为空,意味着没有房屋可偷,返回 [0, 0]if (node == null) {return new int[]{0, 0};}// 递归计算左子树的结果,得到不偷和偷左子树根节点的最大金额int[] left = dfs(node.left);// 递归计算右子树的结果,得到不偷和偷右子树根节点的最大金额int[] right = dfs(node.right);// 不偷当前节点的最大金额:左子树偷或不偷的最大金额 + 右子树偷或不偷的最大金额int notRobCurrent = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);// 偷当前节点的最大金额:当前节点金额 + 左子树不偷的最大金额 + 右子树不偷的最大金额int robCurrent = node.val + left[0] + right[0];// 返回包含不偷和偷当前节点最大金额的数组return new int[]{notRobCurrent, robCurrent};}public static void main(String[] args) {// 示例构建二叉树TreeNode root = new TreeNode(3);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.right = new TreeNode(3);root.right.right = new TreeNode(1);// 创建 HouseRobberBinaryTree 类的实例HouseRobberBinaryTree solution = new HouseRobberBinaryTree();// 调用 rob 方法计算可盗取的最大金额int maxAmount = solution.rob(root);// 输出可盗取的最大金额System.out.println("可盗取的最大金额为: " + maxAmount);}
}
打家劫舍四(最少金额)
public class MinimumRobberyCapability {/*** 检查在给定的窃取能力下,是否能够窃取至少 k 间房屋* @param nums 每间房屋存放的现金金额数组* @param k 窃贼将会窃取的最少房屋数* @param capability 小偷的窃取能力* @return 如果能窃取至少 k 间房屋返回 true,否则返回 false*/private boolean canRob(int[] nums, int k, int capability) {// 记录已窃取的房屋数量int count = 0;// 标记上一间房屋是否被窃取boolean lastRobbed = false;// 遍历每间房屋for (int num : nums) {// 如果上一间房屋未被窃取且当前房屋的现金金额不超过窃取能力if (!lastRobbed && num <= capability) {// 窃取当前房屋,窃取房屋数量加 1count++;// 标记当前房屋已被窃取lastRobbed = true;} else {// 当前房屋不被窃取,标记上一间房屋未被窃取lastRobbed = false;}}// 判断窃取的房屋数量是否至少为 kreturn count >= k;}/*** 计算小偷的最小窃取能力* @param nums 每间房屋存放的现金金额数组* @param k 窃贼将会窃取的最少房屋数* @return 小偷的最小窃取能力*/public int minCapability(int[] nums, int k) {// 二分查找的左边界,最小窃取能力从 1 开始int left = 1;// 二分查找的右边界,设置一个较大的初始值int right = (int) 1e9;// 初始化结果为右边界的值int result = right;// 二分查找过程while (left <= right) {// 计算中间值int mid = left + (right - left) / 2;// 检查在中间值表示的窃取能力下,是否能窃取至少 k 间房屋if (canRob(nums, k, mid)) {// 如果可以,更新结果为中间值,并缩小右边界result = mid;right = mid - 1;} else {// 如果不可以,增大左边界left = mid + 1;}}// 返回最小窃取能力return result;}public static void main(String[] args) {// 创建 MinimumRobberyCapability 类的实例MinimumRobberyCapability solution = new MinimumRobberyCapability();// 示例房屋现金金额数组int[] nums = {2, 3, 5, 9};// 窃贼需要窃取的最少房屋数int k = 2;// 调用 minCapability 方法计算最小窃取能力int minCap = solution.minCapability(nums, k);// 输出结果System.out.println("小偷的最小窃取能力为: " + minCap);}
}
相关文章:
Android学习总结之算法篇三(打家劫舍)
打家劫舍一 // 动态规划 class Solution {public int rob(int[] nums) {if (nums null || nums.length 0) return 0;if (nums.length 1) return nums[0];int[] dp new int[nums.length];dp[0] nums[0];dp[1] Math.max(dp[0], nums[1]);for (int i 2; i < nums.lengt…...
【蓝桥杯】单片机设计与开发,速成备赛
一、LED模块开看,到大模板 二、刷第零讲题目(直接复制模板) 三、空降芯片模板直接调用部分(听完再敲代码) 四、第十三讲开刷省赛题(开始自己背敲模板) 五、考前串讲刷一遍 b连接࿱…...
【操作系统】Linux进程管理和调试
在 Linux 中,可以通过以下方法查看 PID(进程ID)对应的进程名称和详细信息: 1. 使用 ps 命令(最直接) ps -p <PID> -o pid,comm,cmd示例: ps -p 1234 -o pid,comm,cmd输出: P…...
2025宁德时代测评Verify考什么?网申测评如何通过SHL笔试|附真题线上笔试考点、高分攻略、CATL新能源科技SHL测评宁德社招题目、面试攻略、求职建议
——职小豚 带你拆解新能源巨头招聘密码 一、宁德时代:新能源赛道「超级独角兽」 作为全球动力电池龙头,宁德时代(CATL)的江湖地位无需多言: 技术硬实力:麒麟电池、钠离子电池、无钴电池等黑科技加持&…...
基于 Ollama DeepSeek、Dify RAG 和 Fay 框架的高考咨询 AI 交互系统项目方案
基于 Ollama DeepSeek、Dify RAG 和 Fay 框架的高考咨询 AI 交互系统 一、项目概述 本项目旨在构建一个智能化的高考咨询助手,结合 AI 大模型、知识增强(RAG)和 3D 数字人交互,为用户提供智能高考问答、志愿填报建议、政策解读等…...
【 Vue 2 中的 Mixins 模式】
Vue 2 中的 Mixins 模式 在 Vue 2 里,mixins 是一种灵活的复用代码的方式,它能让你在多个组件间共享代码。借助 mixins,你可以把一些通用的选项(像 data、methods、computed 等)封装到一个对象里,然后在多…...
Spring Boot @RequestParam 解析参数时的常见问题及解决方案
1,遇到的问题:将后端接口写完后我想通过PostMan进行简单的测试一下,一不小心就遇到了这样的情况: org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter contractId is not prese…...
linux xargs命令学习
命令描述 xargs从标准输入中读取默认以空格分隔的项(可以使用双引号保护空格)(或单引号或反斜杠)或换行符,并执行命令(默认为/bin/echo)一次或多次,后面跟着任何初始参数从标准输入中…...
Firefox 浏览器同步一个账户和书签网址
Firefox 浏览器同步一个账户和书签网址 Firefox 支持跨设备接续浏览,可实现电脑、手机与平板无缝衔接。无论您在使用哪台设备上使用 Firefox,都能获取书签、浏览历史、保存的密码等信息。当然也能实现windows、ios、linux、android系统中安装firefox浏览…...
Maven多模块项目,其他项目引用子模块的依赖,无法打包,提示没有找到依赖
背景: 微服务项目 每个服务都是单独的项目,会存在依赖关联的问题,在子模块的下面 depoly 之后,就会出现别的项目,无法package 原因: 多模块项目,depoly 需要在父模块下面执行...
mediacodec服务启动时加载media_codecs.xml
media.codec服务启动时, 会创建 implementation::Omx 和 implementation::OmxStore, 构造 Omx时, 会解析codec相关的xml文件,一般从会如下目录中, // from getDefaultSearchDirs() { "/product/etc",&quo…...
本地部署DeepSeek-R1(Dify压力测试和性能调优)
安装压测软件 为了有效测试,应在局域网设备测试,我这里用的服务器是局域网内的Ubuntu,下载的压测软件是WRK apt install wrk测试脚本 为了省事我直接在/root目录下新建lua脚本 vim test.lua脚本内容如下,app-xxxx更换为你工作…...
自动备份文件到服务器,自动备份文件到服务器有哪些方法?
将SQL Server数据库自动备份文件到服务器,可以通过多种方法实现。以下是几种常用的方法: 一、使用SQL Server Management Studio(SSMS)和SQL Server代理 配置SQL Server代理:确保SQL Server代理服务已启动。如果未启…...
Ollama+open-webui搭建私有本地大模型详细教程
Ollamaopen-webui搭建私有本地大模型详细教程 1. 什么是 Ollama? 1.1. Ollama 简介 Ollama 是一个轻量级的 AI 模型运行时,专注于简化 AI 模型的部署和使用。它支持多种预训练模型(如 Llama、Vicuna、Dolly 等),…...
电销行业机器人外呼话术设计:关键注意事项与实践指南
随着人工智能技术的普及,电话营销行业(电销)逐渐引入智能外呼机器人以提升效率、降低成本。然而,机器人外呼的实际效果高度依赖话术设计的合理性。若话术生硬、缺乏策略,不仅可能导致客户反感,还可能引发合…...
GPT-4o 原生图像生成技术解析:从模型架构到吉卜力梦境的实现
最近不少 AI 爱好者、设计师、Vlogger 在社交平台晒出了 GPT-4o 生成的梦幻图像,尤其是吉卜力风格的作品——柔和光影、日系构图、治愈色彩、富有情感的角色表达,一下子击中了无数人的“童年回忆 审美舒适区”。 🎨 下面是一些 GPT-4o 实际生…...
测试cursor-AI编辑器
Cursor是一个免费的,内置AI插件的编辑器,在vscode基础上开发,可以创建和分析代码,还能提出修改建议。官网是 https://www.cursor.com/cn 载入SFTP的方式跟vscode是一样的,但是会有这样的报错: 报错&#x…...
web网站页面测试点---添加功能测试
添加 一、创建新的申请时,关闭网络查看数据是否存在,并提示网络错位相关提示语 二、在文本框内输入数据 1.在文本框内输入空格,查看文本内容前后是否存在空格 2.在文本框内输入最大长度,查看能否正确提交 3.在文本框内输入最大长…...
[首发]烽火HG680-KD-海思MV320芯片-2+8G-安卓9.0-强刷卡刷固件包
烽火HG680-KD-海思MV320芯片-28G-安卓9.0-强刷卡刷固件包 U盘强刷刷机步骤: 1、强刷刷机,用一个usb2.0的8G以下U盘,fat32,2048块单分区格式化(强刷对U盘非常非常挑剔,usb2.0的4G U盘兼容的多&a…...
Spring Boot 快速入手
前言:为什么选择 Spring Boot? 🚀 在现代 Java 开发中,Spring Boot 已成为最流行的后端框架之一。无论是小型 Web 应用、企业级系统,还是微服务架构,Spring Boot 都能提供快速开发、自动配置、轻量级部署的…...
OpenAI最近放出大新闻,准备在接下来的几个月内推出一款“开放”的语言模型
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
数据结构值ST表的详细讲解浅显易懂
定义与原理 ST表,即Sparse Table(稀疏表),是一种基于倍增思想的数据结构。它主要用于在**O(1)**时间复杂度内查询给定区间的最值(最大值或最小值)。其原理是通过预处理,利用倍增的思想…...
基于PyQt5的自动化任务管理软件:高效、智能的任务调度与执行管理
基于PyQt5的自动化任务管理软件:高效、智能的任务调度与执行管理 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着…...
自动驾驶---学术论文的常客:nuScenes数据集的使用
1 前言 nuScenes 数据集在大模型训练中应用广泛,在很多CVPR或者其它论文中经常能看到使用nuScenes 数据集达到SOTA水平。 在之前的博客《自动驾驶---学术论文的常客:nuScenes 数据集》中,笔者主要介绍了nuScenes数据集的来源和下载方式&#…...
使用大语言模型进行Python图表可视化
Python使用matplotlib进行可视化一直有2个问题,一是代码繁琐,二是默认模板比较丑。因此发展出seaborn等在matplotlib上二次开发,以更少的代码进行画图的和美化的库,但是这也带来了定制化不足的问题。在大模型时代,这个…...
C#调用ACCESS数据库,解决“Microsoft.ACE.OLEDB.12.0”未注册问题
C#调用ACCESS数据库,解决“Microsoft.ACE.OLEDB.12.0”未注册问题 解决方法: 1.将C#采用的平台从AnyCpu改成X64 2.将官网下载的“Microsoft Access 2010 数据库引擎可再发行程序包AccessDatabaseEngine_X64”文件解压 3.安装解压后的文件 点击下载安…...
el-select+el-tree实现下拉树形选择
主要实现el-select下使用树结构,支持筛选功能 封装的组件 composeTree.vue <template><el-select :popper-class"popperClass"v-model"selectedList"placeholder"请选择"filterable:filter-method"handleFilter" multiple:c…...
android studio 安装flutter插件
在 Android Studio 中安装 Flutter 插件 Flutter 是 Google 开发的一个开源 UI 软件开发工具包,主要用于构建高质量的跨平台应用。然而,要在 Android Studio 中开发 Flutter 应用,首先需要安装 Flutter 插件。本文将详细介绍安装 Flutter 插…...
利用 Excel 函数随机抽取(附示例)
RANDARRAY 是 Excel 365 和 Excel 2021 引入的一个函数,用于生成一个随机数数组。它的语法如下: RANDARRAY([rows], [columns], [min], [max], [whole_number])参数详解 rows(可选) 要生成的行数(默认值为 1ÿ…...
部分国产服务器CPU及内存性能测试情况
近日对部分国产服务器进行了CPU和内存的性能测试, 服务器包括华锟振宇、新华三和中兴三家,CPU包括鲲鹏、海光和Intel,初步测试结果如下: 服务器厂商四川华锟振宇新华三中兴中兴服务器HuaKun TG225 B1R4930 G5R5930 G2R5300 G4操作…...
