【算法题】minimum-adjustment-cost 梦里梦外; 2022-06-04 06:48 141阅读 0赞 题目描述: Given an integer array, adjust each integers so that the difference of every adjacent integers are not greater than a given number target. If the array before adjustment is A, the array after adjustment is B, you should minimize the sum of `|A[i]-B[i]|` ##### Notice ##### You can assume each number in the array is a positive integer and not greater than `100`. Have you met this question in a real interview? Yes Example Given `[1,4,2,3]` and target = `1`, one of the solutions is `[2,3,2,3]`, the adjustment cost is `2` and it's minimal. Return `2`. 题目连接: http://www.lintcode.com/en/problem/minimum-adjustment-cost/ 中文描述:给一个整数数组,调整每个数的大小,使得相邻的两个数的差不大于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少。 思路: 这个是动态规划背包问题。 state: dp\[i\]\[j\] 到A\[i\]为止A\[i\]变为j的时候的min cost initalization:dp\[0\]\[j\] = abs(A\[0\] - j) function:dp\[i\]\[j\] = min(dp\[i\]\[j\], dp\[i - 1\]\[j\] + A\[i\] - j) result:min(dp\[A.size - 1\]\[j\]) 这个其实需要三层循环,第三层循环的时候用到target这个值,根据j和target确定这次的j的范围。并且取最小的那个情况。 这个题目的标准思路和状态及方程是上面这样,我的优化思路: j的取值范围是从A中的最小值到最大值的 ,所以没必要从0到100循环。也就是他提示的假设条件是不需要的。 此时状态方程需要稍稍调整,直接贴出我的代码。 class Solution { public: /* * @param A: An integer array * @param target: An integer * @return: An integer */ int MinAdjustmentCost(vector<int> &A, int target) { int max_a = *(max_element(A.begin(), A.end())); int min_a = *(min_element(A.begin(), A.end())); vector<vector<int>> dp(A.size(), vector<int>(101, INT_MAX)); for (int i = 0; i <= max_a - min_a; i++) { dp[0][i] = abs(A[0] - (i + min_a)); } for (int i = 1; i < A.size(); i++) { for (int j = 0; j <= max_a - min_a; j++) { for (int k = max(min_a, j + min_a - target); k <= min(max_a, j + min_a + target); k++) { dp[i][j] = min(dp[i][j], dp[i - 1][k - min_a] + abs(A[i] - (j + min_a))); } } } return *(min_element(dp[A.size() - 1].begin(), dp[A.size() - 1].end())); } };
相关 算法题刷题笔记 在线题库 > [牛客华为机试题库【题号 HJ开头】(重点看)][HJ] > [牛客在线编程算法篇【题号NC开头】][NC] > [剑指offer【题号 JZ开头】 深藏阁楼爱情的钟/ 2024年03月27日 11:33/ 0 赞/ 76 阅读
相关 算法题汇总 1.冒泡排序 [https://juejin.cn/post/6948814177179795487][https_juejin.cn_post_694881417717 骑猪看日落/ 2022年10月07日 05:52/ 0 赞/ 181 阅读
相关 前端算法题 前端算法题 以下题目均是牛客网 1.dom 节点查找 描述 查找两个节点的最近的一个共同父节点,可以包括节点自身 输入描述: oNode1 和 oNo 桃扇骨/ 2022年09月15日 15:57/ 0 赞/ 126 阅读
相关 算法-刷题 剑指Offer快速过了一遍 字节-飞书高频题-前15 各公司的高频面试算法题,可在 [CodeTop][]查询 (1) 146. LRU 缓存机制 我的实现 桃扇骨/ 2022年09月09日 02:26/ 0 赞/ 236 阅读
相关 算法题 上学时学过的算法,青山遮不住,毕竟东流去,都忘得差不多了。。。。 题目1:使用一个数组实现一个循环队列 分析:简单来讲就是用一个数组,实现个队列的功能,可以用两个脚标来控制 我就是我/ 2022年06月10日 07:19/ 0 赞/ 157 阅读
相关 算法题分析 【题目描述】 在主城站街很久之后,小萌决定不能就这样的浪费时间虚度青春,他打算去打副本。 这次的副本只有一个BOSS,而且BOSS是不需要击杀的,只需要和它比智力……. ╰半橙微兮°/ 2022年06月05日 03:20/ 0 赞/ 183 阅读
相关 算法题 <table> <tbody> <tr> <td>N.RSA加密算法</td> </tr> <tr> <td> <table> 桃扇骨/ 2022年01月10日 10:23/ 0 赞/ 192 阅读
相关 一道算法题 package test.algo; import java.util.ArrayList; import java.util.Arrays; 梦里梦外;/ 2021年12月23日 06:31/ 0 赞/ 324 阅读
相关 其他算法题 绳子可以覆盖的最多点数 数轴上从左到右有n各点a\[0\], a\[1\], ……,a\[n -1\],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点 题解:对于 末蓝、/ 2021年09月18日 12:54/ 0 赞/ 321 阅读
还没有评论,来说两句吧...