厦门做网站哪家公司好山西网架公司

bicheng/2026/1/19 9:26:34/文章来源:
厦门做网站哪家公司好,山西网架公司,深圳网站建设模板乐云seo,温州移动互联网开发class083 动态规划中用观察优化枚举的技巧-下【算法】 算法讲解083【必备】动态规划中用观察优化枚举的技巧-下 code1 1235. 规划兼职工作 // 规划兼职工作 // 你打算利用空闲时间来做兼职工作赚些零花钱#xff0c;这里有n份兼职工作 // 每份工作预计从startTime[i]开始、e…class083 动态规划中用观察优化枚举的技巧-下【算法】 算法讲解083【必备】动态规划中用观察优化枚举的技巧-下 code1 1235. 规划兼职工作 // 规划兼职工作 // 你打算利用空闲时间来做兼职工作赚些零花钱这里有n份兼职工作 // 每份工作预计从startTime[i]开始、endTime[i]结束报酬为profit[i] // 返回可以获得的最大报酬 // 注意时间上出现重叠的 2 份工作不能同时进行 // 如果你选择的工作在时间X结束那么你可以立刻进行在时间X开始的下一份工作 // 测试链接 : https://leetcode.cn/problems/maximum-profit-in-job-scheduling/ 利用观察单调性 二分搜索的方式优化枚举最优解时间复杂度O(n*logn) dp[i][0…i]的最大报酬 不需要i位置的工作dp[i-1] 需要i位置的工作profit[i]dp[j]j是结束时间不超过startTime[i]的最右的 package class083;import java.util.Arrays;// 规划兼职工作 // 你打算利用空闲时间来做兼职工作赚些零花钱这里有n份兼职工作 // 每份工作预计从startTime[i]开始、endTime[i]结束报酬为profit[i] // 返回可以获得的最大报酬 // 注意时间上出现重叠的 2 份工作不能同时进行 // 如果你选择的工作在时间X结束那么你可以立刻进行在时间X开始的下一份工作 // 测试链接 : https://leetcode.cn/problems/maximum-profit-in-job-scheduling/ public class Code01_MaximumProfitInJobScheduling {public static int MAXN 50001;public static int[][] jobs new int[MAXN][3];public static int[] dp new int[MAXN];public static int jobScheduling(int[] startTime, int[] endTime, int[] profit) {int n startTime.length;for (int i 0; i n; i) {jobs[i][0] startTime[i];jobs[i][1] endTime[i];jobs[i][2] profit[i];}// 工作按照结束时间从小到大排序Arrays.sort(jobs, 0, n, (a, b) - a[1] - b[1]);dp[0] jobs[0][2];for (int i 1, start; i n; i) {start jobs[i][0];dp[i] jobs[i][2];if (jobs[0][1] start) {dp[i] dp[find(i - 1, start)];}dp[i] Math.max(dp[i], dp[i - 1]);}return dp[n - 1];}// job[0...i]范围上找到结束时间 start最右的下标public static int find(int i, int start) {int ans 0;int l 0;int r i;int m;while (l r) {m (l r) / 2;if (jobs[m][1] start) {ans m;l m 1;} else {r m - 1;}}return ans;}} code2 629. K 个逆序对数组 // K个逆序对数组 // 逆序对的定义如下 // 对于数组nums的第i个和第j个元素 // 如果满足0ijnums.length 且 nums[i]nums[j]则为一个逆序对 // 给你两个整数n和k找出所有包含从1到n的数字 // 且恰好拥有k个逆序对的不同的数组的个数 // 由于答案可能很大只需要返回对10^97取余的结果 // 测试链接 : https://leetcode.cn/problems/k-inverse-pairs-array/ 最优解 利用观察 构造窗口累加和已经进入 观察并设计高效的查询结构 的范畴了 只不过这个结构就仅存在于概念并用一个int类型的变量维护而已 package class083;// K个逆序对数组 // 逆序对的定义如下 // 对于数组nums的第i个和第j个元素 // 如果满足0ijnums.length 且 nums[i]nums[j]则为一个逆序对 // 给你两个整数n和k找出所有包含从1到n的数字 // 且恰好拥有k个逆序对的不同的数组的个数 // 由于答案可能很大只需要返回对10^97取余的结果 // 测试链接 : https://leetcode.cn/problems/k-inverse-pairs-array/ public class Code02_KInversePairsArray {// 最普通的动态规划// 不优化枚举public static int kInversePairs1(int n, int k) {int mod 1000000007;// dp[i][j] : 1、2、3...i这些数字形成的排列一定要有j个逆序对请问这样的排列有几种int[][] dp new int[n 1][k 1];dp[0][0] 1;for (int i 1; i n; i) {dp[i][0] 1;for (int j 1; j k; j) {if (i j) {for (int p 0; p j; p) {dp[i][j] (dp[i][j] dp[i - 1][p]) % mod;}} else {// i jfor (int p j - i 1; p j; p) {dp[i][j] (dp[i][j] dp[i - 1][p]) % mod;}}}}return dp[n][k];}// 根据观察方法1优化枚举// 最优解// 其实可以进一步空间压缩// 有兴趣的同学自己试试吧public static int kInversePairs2(int n, int k) {int mod 1000000007;int[][] dp new int[n 1][k 1];dp[0][0] 1;// window : 窗口的累加和for (int i 1, window; i n; i) {dp[i][0] 1;window 1;for (int j 1; j k; j) {if (i j) {window (window dp[i - 1][j]) % mod;} else {// i jwindow ((window dp[i - 1][j]) % mod - dp[i - 1][j - i] mod) % mod;}dp[i][j] window;}}return dp[n][k];}} code3 514. 自由之路 // 自由之路 // 题目描述比较多打开链接查看 // 测试链接 : https://leetcode.cn/problems/freedom-trail/ 优化枚举的核心是贪心策略 下一步做枚举时不需要枚举所有可能性只需要枚举 顺时针的最近、逆时针的最近 两种可能性即可 贪心当然会有专题讲述【必备】课程的动态规划专题结束了就会开始贪心的专题 package class083;// 自由之路 // 题目描述比较多打开链接查看 // 测试链接 : https://leetcode.cn/problems/freedom-trail/ public class Code03_FreedomTrail {// 为了让所有语言的同学都可以理解// 不会使用任何java语言自带的数据结构// 只使用最简单的数组结构public static int MAXN 101;public static int MAXC 26;public static int[] ring new int[MAXN];public static int[] key new int[MAXN];public static int[] size new int[MAXC];public static int[][] where new int[MAXC][MAXN];public static int[][] dp new int[MAXN][MAXN];public static int n, m;public static void build(String r, String k) {for (int i 0; i MAXC; i) {size[i] 0;}n r.length();m k.length();for (int i 0, v; i n; i) {v r.charAt(i) - a;where[v][size[v]] i;ring[i] v;}for (int i 0; i m; i) {key[i] k.charAt(i) - a;}for (int i 0; i n; i) {for (int j 0; j m; j) {dp[i][j] -1;}}}public static int findRotateSteps(String r, String k) {build(r, k);return f(0, 0);}// 指针当前指着轮盘i位置的字符要搞定key[j....]所有字符最小代价返回public static int f(int i, int j) {if (j m) {// key长度是m// 都搞定return 0;}if (dp[i][j] ! -1) {return dp[i][j];}int ans;if (ring[i] key[j]) {// ring b// i// key b// jans 1 f(i, j 1);} else {// 轮盘处在i位置ring[i] ! key[j]// jump1 : 顺时针找到最近的key[j]字符在轮盘的什么位置// distance1 : 从i顺时针走向jump1有多远int jump1 clock(i, key[j]);int distance1 (jump1 i ? (jump1 - i) : (n - i jump1));// jump2 : 逆时针找到最近的key[j]字符在轮盘的什么位置// distance2 : 从i逆时针走向jump2有多远int jump2 counterClock(i, key[j]);int distance2 (i jump2 ? (i - jump2) : (i n - jump2));ans Math.min(distance1 f(jump1, j), distance2 f(jump2, j));}dp[i][j] ans;return ans;}// 从i开始顺时针找到最近的v在轮盘的什么位置public static int clock(int i, int v) {int l 0;// size[v] : 属于v这个字符的下标有几个int r size[v] - 1, m;// sorted[0...size[v]-1]收集了所有的下标并且有序int[] sorted where[v];int find -1;// 有序数组中找i尽量靠左的下标while (l r) {m (l r) / 2;if (sorted[m] i) {find m;r m - 1;} else {l m 1;}}// 找到了就返回// 没找到那i顺指针一定先走到最小的下标return find ! -1 ? sorted[find] : sorted[0];}public static int counterClock(int i, int v) {int l 0;int r size[v] - 1, m;int[] sorted where[v];int find -1;// 有序数组中找i尽量靠右的下标while (l r) {m (l r) / 2;if (sorted[m] i) {find m;l m 1;} else {r m - 1;}}// 找到了就返回// 没找到那i逆指针一定先走到最大的下标return find ! -1 ? sorted[find] : sorted[size[v] - 1];}} code4 未排序数组中累加和小于或等于给定值的最长子数组长度 // 累加和不大于k的最长子数组 // 给定一个无序数组arr长度为n其中元素可能是正、负、0 // 给定一个整数k求arr所有的子数组中累加和不大于k的最长子数组长度 // 要求时间复杂度为O(n) // 测试链接 : https://www.nowcoder.com/practice/3473e545d6924077a4f7cbc850408ade // 请同学们务必参考如下代码中关于输入、输出的处理 // 这是输入输出处理效率很高的写法 // 提交以下的code提交时请把类名改成Main可以直接通过 强烈推荐先看一下讲解046 利用构造单调数组 二分搜索的解不是最优解时间复杂度O(n*logn) 最优解中包含的贪心思想窗口的加速建立、可能性的淘汰是这个题的重点时间复杂度O(n) 贪心当然会有专题讲述【必备】课程的动态规划专题结束了就会开始贪心的专题 package class083;// 累加和不大于k的最长子数组 // 给定一个无序数组arr长度为n其中元素可能是正、负、0 // 给定一个整数k求arr所有的子数组中累加和不大于k的最长子数组长度 // 要求时间复杂度为O(n) // 测试链接 : https://www.nowcoder.com/practice/3473e545d6924077a4f7cbc850408ade // 请同学们务必参考如下代码中关于输入、输出的处理 // 这是输入输出处理效率很高的写法 // 提交以下的code提交时请把类名改成Main可以直接通过import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StreamTokenizer;// 至今的最优解全网题解几乎都是我几年前讲的方法 public class Code04_LongestSubarraySumNoMoreK {public static int MAXN 100001;public static int[] nums new int[MAXN];public static int[] minSums new int[MAXN];public static int[] minSumEnds new int[MAXN];public static int n, k;public static void main(String[] args) throws IOException {BufferedReader br new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in new StreamTokenizer(br);PrintWriter out new PrintWriter(new OutputStreamWriter(System.out));while (in.nextToken() ! StreamTokenizer.TT_EOF) {n (int) in.nval;in.nextToken();k (int) in.nval;for (int i 0; i n; i) {in.nextToken();nums[i] (int) in.nval;}out.println(compute2());}out.flush();out.close();br.close();}public static int compute1() {int[] sums new int[n 1];for (int i 0, sum 0; i n; i) {// sum : 0...i范围上这前i1个数字的累加和sum nums[i];// sums[i 1] : 前i1个包括一个数字也没有的时候所有前缀和中的最大值sums[i 1] Math.max(sum, sums[i]);}int ans 0;for (int i 0, sum 0, pre, len; i n; i) {sum nums[i];pre find(sums, sum - k);len pre -1 ? 0 : i - pre 1;ans Math.max(ans, len);}return ans;}public static int find(int[] sums, int num) {int l 0;int r n;int m 0;int ans -1;while (l r) {m (l r) / 2;if (sums[m] num) {ans m;r m - 1;} else {l m 1;}}return ans;}public static int compute2() {minSums[n - 1] nums[n - 1];minSumEnds[n - 1] n - 1;for (int i n - 2; i 0; i--) {if (minSums[i 1] 0) {minSums[i] nums[i] minSums[i 1];minSumEnds[i] minSumEnds[i 1];} else {minSums[i] nums[i];minSumEnds[i] i;}}int ans 0;for (int i 0, sum 0, end 0; i n; i) {while (end n sum minSums[end] k) {sum minSums[end];end minSumEnds[end] 1;}if (end i) {// 如果end i// 窗口范围i...end-1那么窗口有效ans Math.max(ans, end - i);sum - nums[i];} else {// 如果end i那么说明窗口根本没扩出来代表窗口无效// end来到i1位置然后i了// 继续以新的i位置做开头去扩窗口end i 1;}}return ans;}} 2023-12-10 12:31:44

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

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

相关文章

wordpress建站是什么有名网站建设公司

英伟达(NVIDIA)是一家知名的图形处理器(GPU)制造公司,而CUDA则是NVIDIA推出的一种并行计算架构和编程模型。CUDA全称为Compute Unified Device Architecture,即计算统一设备架构,它允许开发者使…

免费 网站 模板自动评论插件wordpress

LeetCode-331. 验证二叉树的前序序列化【栈 树 字符串 二叉树】 题目描述:解题思路一:看提示主要是栈和树。这题其实不是二叉树的遍历题,而是检验二叉树基础知识的题,也许有些难想。第一种解法是:把有效的叶子节点使用…

东莞建站模板公司wordpress怎么样

带参数的宏替换因各种需求叠加,替换规则很怪异: 1、首先将实参替换形参,并展开宏 2、如果1步展开后,有#或者##,那么停止替换。 3、如果1步展开后,没有#或者##,且参数也是宏,那么继续…

做网站大概多少wordpress表

寒假作业 传送门 题目背景 zzs 和 zzy 正在被寒假作业折磨,然而他们有答案可以抄啊。 题目描述 他们共有 n n n 项寒假作业。zzy 给每项寒假作业都定义了一个疲劳值 a i a_i ai​,表示抄这个作业所要花的精力。 zzs 现在想要知道,有多…

怎样做网站标题的图标网站做充值和提现

本篇文章聊聊网上聊的比较少的具体量化操作,非常见整型位数的量化,来自让各种开源模型能够在 CPU 环境、CPU & GPU 环境混合推理的技术方案:llama.cpp 。 写在前面 接下来,有计划分享一些关于各种开源模型的实践内容。为了能…

企业门户网站制作周期琼海网站制作

🌳List类型常见命令 LPUSH / RPUSH [KEY] [element] …… 向列表左侧或者右侧插入一个或多个元素 LPOP / RPOP [key] 删除左边或者右边第一个元素 LRANGE [key] start end 返回索引start到end的元素(索引从0开始) BLPOP / BRPOP [key] [等…

开封市网站建设网站建设 互成网络

五、动态规划 基本概念 阶段(Stage):将所给问题的过程,按时间或空间特征分解成若干相互联系的阶段,以便按次序去求解每阶段的解,常用字母 k k k 表示。 状态(State):…

一下成都网站建设公司太原网页设计招聘

第68套&#xff1a; 给定程序中&#xff0c;函数fun的功能是:求ss所指字符串数组中长度最长的字符串所 在的行下标,作为函数值返回&#xff0c;并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串&#xff0c;且串长<N。 请在程序的下划线处填入正确的内容并…

做机械设备网站app开发流程表

题干&#xff1a; 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了. Input 第一行正整数N(0<N<10)表示有N组测试数…

网站建设与维护教案视频教做家常菜的网站

Mesh&#xff1a;是一种三维模型的表示形式&#xff0c;它由一系列顶点、三角形&#xff08;或其他多边形&#xff09;和相关属性组成。Mesh用于表示物体的外观和形状&#xff0c;它是可见物体的基本组成部分。通过操作Mesh&#xff0c;开发者可以实现各种视觉效果、物理模拟和…

公司官方网站一般什么公司做泰安人才招聘信息网

阿里云服务器配置如何选择&#xff1f;用于高性能计算或大游戏并发&#xff0c;可选择企业级第七代云服务器计算型g7、ECS计算型c7、内存型r7独享型云服务器&#xff0c;CPU采用第三代Intel Xeon可扩展处理器&#xff08;Ice Lake&#xff09;&#xff0c;基频2.7 GHz&#xff…

wordpress自定义网站做免费推广网站

注&#xff1a;服务器默认以root用户登录 NGINX 官方网站地址&#xff1a;https://nginx.org/en/NGINX 官方安装文档地址&#xff1a;https://nginx.org/en/docs/install.html服务器的终端中输入以下指令&#xff1a; # 安装 Nginx apt-get install nginx # 查看版本信息 ngi…

农业信息网站建设意义老闵行小学排名

发布确认原理 生产者将信道设置成 confirm 模式&#xff0c;一旦信道进入 confirm 模式&#xff0c;所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始)&#xff0c;一旦消息被投递到所有匹配的队列之后&#xff0c;broker 就会发送一个确认给生产者(包含消息的…

安徽智能网站建设制作桐乡住房和建设局网站

简要做一下总结&#xff1a; 为实现类似top的功能&#xff0c;我们在SQL Server中和MySQL中使用到的SQL语句是不同的。 1、在SQL Server中&#xff0c;我们使用 select top N * from tablename来查询tablename表中前N条记录。 根据所给变量的不同还有其他方法&…

购物网站设计理念有没有免费代理项目

下面我将介绍当需要用C语言开发能访问MySQL数据库的程序时成功配置的关键事项。 操作系统&#xff1a;Windows 7 x64 编程环境&#xff1a;Code::Blocks 10.05(32bit) 配置方式说明&#xff1a;用C语言开发访问MySQL数据库至少有3种配置方式。 方式1&#xff1a;使用MySQL C…

外包做网站的要求怎么写网站cms系统 开源框架

本文实例讲述了Python正则替换字符串函数re.sub用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替换成自己想要的字符串的方法re.sub 函数进行以正则表达式为基础的替换工作…

网站建设流程和方法外贸线上推广

一道名为"敲门砖"的面试题: 用面向对象的方法写,点击列表内,子元素的子标签, 来删除子元素 敲门砖考点: 递归(删除标签, 需要找到列表的直属子标签, 需要通过递归层层往上找, parentNode)冒泡(只需为顶级父元素addEventListener绑定事件, 并通过e.target区分子标签, …

做文艺文创产品的网站建设网站公司

特别提醒&#xff1a;注意看本地端和服务器端 一、服务器终端运行 tensorboard --logdirlogs --port6008二、本地终端运行--以建立端口映射 ssh -L 6008:localhost:6008 -p 443 root服务器IP解释&#xff1a;将服务器的6008端口映射到本地的6008端口&#xff0c;-p 443 …

贵阳建站模板设计广告图片

一.人工智能概述 1.AI的基础学科包括&#xff1a;数学&#xff08;离散、模糊&#xff09;、思维科学&#xff08;认知心理、逻辑思维学、形象思维学&#xff09;和计算机&#xff08;硬件、软件&#xff09;等。 2.新一代人工智能呈现出“深度学习、跨界融合、人机协同、群智…

怎么验证网站备案密码是否正确儿童网站开发

连续变化检测和分类 (CCDC) 1 背景 1.1 土地变化监测 土地覆盖变化影响自然和人为环境,被全球气候观测系统视为基本气候变量。例如,荒漠化导致土地覆盖从植物生态系统转变为沙漠,森林砍伐导致森林转变为人类改变的土地用途,城市发展可以将自然环境转变为被建筑物和道路覆…