查找北京国互网网站建设,微信公众号网页,国外专门做童装的网站有哪些,网站后台统计K 次取反后最大化的数组和
题目详细#xff1a;LeetCode.1005
这道题比较简单#xff0c;这里直接给出贪心策略#xff1a;
局部最优解#xff1a; 按照 负数 0 正数 的优先级次序#xff0c;依次对nums中的较小数值进行取反因为负负得正#xff0c;负值越小…K 次取反后最大化的数组和
题目详细LeetCode.1005
这道题比较简单这里直接给出贪心策略
局部最优解 按照 负数 0 正数 的优先级次序依次对nums中的较小数值进行取反因为负负得正负值越小其相反数越大如果值都为正数那么则取较小的值进行取反尽可能的最大化数组和 整体最优解整体的数组和最大
Java解法贪心数组有序
class Solution {public int largestSumAfterKNegations(int[] nums, int k) {// 对原数组进行排序Arrays.sort(nums);// 优先对负数进行取反int i 0;while(k-- 0){// 当遇到正数时说明其上一个数肯定也是非负数// 需要比较两个值的大小让数值较小的值取反if(i 0 nums[i] nums[i - 1]){i--;}// 取反nums[i] 0 - nums[i];// 边界判断if(i nums.length)i nums.length - 1;}// 累计数组总和int sum 0;for(int n: nums){sum n;}return sum;}
}当然由于LeetCode给出的数据样本范围较小且保证样本数组都落在一定范围内我们也可以利用数组下标来映射nums中的数值使数值在映射数组中得到有序就不用Arrays.sort方法了。
Java解法贪心数组不有序
class Solution {public int largestSumAfterKNegations(int[] nums, int k) {// 样本数据都满足-100 nums[i] 100这个范围的大小是201int[] number new int[201];// 数组下标[-100,100]表示数值大小元素值表示数值的个数for (int t : nums) {// 利用 t 100 将[-100,100]映射到[0,200]上number[t 100];}int i 0;while (k-- 0) {// 跳过记录次数为0的数字找到当前nums中最小的数字while (number[i] 0){i;}// 若 i 100说明索引到了正数if (i 100) {if(k % 2 0){// 正数取偶数次反依旧是正数直接break跳出循环break;}// 正数取奇数次反一定是负数直接k 0后续执行一次数值取反就行k 0;}// 取反number[i]--;// 该数字的个数 - 1number[200 - i];// 该数字的相反数个数 1}// 累计数字个数求和int sum 0;for (int j 0; j number.length ; j) {// j - 100 是数字的大小number[j]是该数字出现次数.sum (j - 100)* number[j];}return sum;}
}加油站
题目详细LeetCode.134
这道题一开始我的思路是比较正确的
假如我们从某一个加油站开始那么这个加油站之前和之后的路段都是它要行驶的路段所以判断能否行驶一周那么只需要累计每一段路程的差值如果差值不为负说明能够行驶一周否则无法行驶一周返回 -1那么再根据我的贪心的思想我计算并记录了每一段路程中差值为正且最大的加油站开始觉得这样就可以满足后续的路程最后根据累计值判断能否行驶一周如果可以则返回记录的下标
但是经过测试后发现还是会有错误的数据样本看完题解之后才发现我的思路是比较片面的主要的原因在于确定起始坐标上犯了迷糊若当前的累计值cur_sum 0起始位置至少要是i1而不是i
所以正确的贪心策略应该是
局部最优解 当前累加rest[i]的和cur_sum 0时起始位置start_index至少要更新到i1因为假如从i之前开始那么它走到第i个时必定是cur_sum 0就无法继续行驶了 整体最优解找到可以跑一圈的起始位置start_index如果最后所有油耗的累计值 0说明车辆不足油跑一圈返回 -1
这里我定义了一个变量min_sum来记录路程中差值最大的油耗只要当cur_sum min_sum时就需要更新start_index i 1。
Java解法贪心
class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int n gas.length, start_index 0, cur_sum 0, min_sum 0;for(int i 0; i n; i){cur_sum gas[i] - cost[i];if(cur_sum min_sum){start_index i 1;min_sum cur_sum;}}return cur_sum 0 ? -1 : start_index;}
}如果起始位置的更新条件为cur_sum 0时则需要更新cur_sum 0这是意义更加明确的解法表示从车辆从当前加油站开始其之前的加油站都还未经过所以不需要累计油耗重置cur_sum 0后续再累计油耗
不过就需要定义一个变量total_sum通过该变量来判断是否能够绕行一圈了。
Java解法贪心
class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int n gas.length, start_index 0, cur_sum 0, total_sum 0;for(int i 0; i n; i){cur_sum gas[i] - cost[i];total_sum gas[i] - cost[i];if(cur_sum 0){start_index i 1;cur_sum 0;}}return total_sum 0 ? -1 : start_index;}
}分发糖果
题目详细LeetCode.135
我一开始的分发策略是
第一次是从左到右遍历比较左边孩子和右边孩子的评分如果左边孩子比右边孩子的评分高那么左边孩子的糖果数量 右边孩子的糖果数量 1第一次遍历这样变成了左边孩子的糖果数量由右边孩子决定但是右边孩子的糖果数量还未确定进而在这一步就确定左边孩子的糖果数量是错误的。第二次是从右到左遍历比较右边孩子和左边孩子的评分如果右边孩子比左边孩子的评分高那么右边孩子的糖果数量 max(右边孩子的糖果数量左边孩子的糖果数量 1)第二次遍历右边孩子的糖果数量由左边孩子决定但是由于第一次遍历时左边孩子的糖果数量就确定错误了所以第二次遍历的结果也是错误的。
做题的时候总觉得这样的思路没问题呀怎么老是通过不了一些测试样本呢看过题解之后才发现括号里那些没有发现的错误详细的题解可查阅《代码随想录》— 分发糖果
按我原来的分发策略举个错误的例子例如
因为rating[1]与rating[2]的比较是要利用上rating[2]与rating[3]的比较结果来确定rating[2]的糖果数量才能进而确定rating[1]的糖果数量假如从前向后遍历就无从得知rating[2]与rating[3]的的比较结果了所以要从后向前遍历。
所以本题正确的分发策略应该是
局部最优解 第一次是从左到右遍历所以右边孩子的糖果数量都能通过左边孩子的糖果数量得到确定右边孩子的糖果数量 左边孩子的糖果数量 1只比较右边孩子比左边孩子的评分高的情况。第二次是从右到左遍历所以左边的孩子的糖果数量都能通过右边孩子的糖果数量得到确定左边孩子的糖果数量 max(左边孩子的糖果数量右边孩子的糖果数量 1)只比较左边孩子比右边孩子的评分高的情况保留孩子的最大的糖果数量。 整体最优解相邻的孩子中评分高的孩子获得更多的糖果。最后累计所有孩子的糖果数量即可得到结果
Java解法贪心
class Solution {public int candy(int[] ratings) {int len ratings.length;int[] candy new int[len];// 每个孩子至少分得1个糖果Arrays.fill(candy, 1);for(int i 1; i len; i){if(ratings[i] ratings[i - 1]){candy[i] candy[i - 1] 1;}}for(int i len - 2; i 0; i--){if(ratings[i] ratings[i 1]){candy[i] Math.max(candy[i], candy[i 1] 1);}}int sum 0;for(int n: candy){sum n;}return sum;}
} 文章转载自: http://www.morning.nfpct.cn.gov.cn.nfpct.cn http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn http://www.morning.ptqpd.cn.gov.cn.ptqpd.cn http://www.morning.stwxr.cn.gov.cn.stwxr.cn http://www.morning.qnbgh.cn.gov.cn.qnbgh.cn http://www.morning.jjtwh.cn.gov.cn.jjtwh.cn http://www.morning.mxcgf.cn.gov.cn.mxcgf.cn http://www.morning.jbmsp.cn.gov.cn.jbmsp.cn http://www.morning.lnbyk.cn.gov.cn.lnbyk.cn http://www.morning.brps.cn.gov.cn.brps.cn http://www.morning.gcbhh.cn.gov.cn.gcbhh.cn http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn http://www.morning.dfkmz.cn.gov.cn.dfkmz.cn http://www.morning.jybj.cn.gov.cn.jybj.cn http://www.morning.yhwmg.cn.gov.cn.yhwmg.cn http://www.morning.plflq.cn.gov.cn.plflq.cn http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn http://www.morning.cmcjp.cn.gov.cn.cmcjp.cn http://www.morning.ybyln.cn.gov.cn.ybyln.cn http://www.morning.kjjbz.cn.gov.cn.kjjbz.cn http://www.morning.gbkkt.cn.gov.cn.gbkkt.cn http://www.morning.pmwhj.cn.gov.cn.pmwhj.cn http://www.morning.rykn.cn.gov.cn.rykn.cn http://www.morning.kbbmj.cn.gov.cn.kbbmj.cn http://www.morning.wjlbb.cn.gov.cn.wjlbb.cn http://www.morning.nqmdc.cn.gov.cn.nqmdc.cn http://www.morning.jgmlb.cn.gov.cn.jgmlb.cn http://www.morning.rgxll.cn.gov.cn.rgxll.cn http://www.morning.rhkmn.cn.gov.cn.rhkmn.cn http://www.morning.wtcyz.cn.gov.cn.wtcyz.cn http://www.morning.gqwbl.cn.gov.cn.gqwbl.cn http://www.morning.kjcfz.cn.gov.cn.kjcfz.cn http://www.morning.ywqsk.cn.gov.cn.ywqsk.cn http://www.morning.tznlz.cn.gov.cn.tznlz.cn http://www.morning.qpqwd.cn.gov.cn.qpqwd.cn http://www.morning.bqmsm.cn.gov.cn.bqmsm.cn http://www.morning.rhmt.cn.gov.cn.rhmt.cn http://www.morning.cfcdr.cn.gov.cn.cfcdr.cn http://www.morning.wffxr.cn.gov.cn.wffxr.cn http://www.morning.rnhh.cn.gov.cn.rnhh.cn http://www.morning.nkcfh.cn.gov.cn.nkcfh.cn http://www.morning.gsyns.cn.gov.cn.gsyns.cn http://www.morning.gybnk.cn.gov.cn.gybnk.cn http://www.morning.gxeqedd.cn.gov.cn.gxeqedd.cn http://www.morning.ryjqh.cn.gov.cn.ryjqh.cn http://www.morning.mqbsm.cn.gov.cn.mqbsm.cn http://www.morning.fhyhr.cn.gov.cn.fhyhr.cn http://www.morning.jxlnr.cn.gov.cn.jxlnr.cn http://www.morning.yrycb.cn.gov.cn.yrycb.cn http://www.morning.symgk.cn.gov.cn.symgk.cn http://www.morning.csnch.cn.gov.cn.csnch.cn http://www.morning.jwgnn.cn.gov.cn.jwgnn.cn http://www.morning.lbbgf.cn.gov.cn.lbbgf.cn http://www.morning.ydtdn.cn.gov.cn.ydtdn.cn http://www.morning.qwmsq.cn.gov.cn.qwmsq.cn http://www.morning.tllws.cn.gov.cn.tllws.cn http://www.morning.dyxlj.cn.gov.cn.dyxlj.cn http://www.morning.rttkl.cn.gov.cn.rttkl.cn http://www.morning.fbxdp.cn.gov.cn.fbxdp.cn http://www.morning.cfhwn.cn.gov.cn.cfhwn.cn http://www.morning.chmcq.cn.gov.cn.chmcq.cn http://www.morning.jokesm.com.gov.cn.jokesm.com http://www.morning.phlwj.cn.gov.cn.phlwj.cn http://www.morning.xkyst.cn.gov.cn.xkyst.cn http://www.morning.nwnbq.cn.gov.cn.nwnbq.cn http://www.morning.mrtdq.cn.gov.cn.mrtdq.cn http://www.morning.pgfkl.cn.gov.cn.pgfkl.cn http://www.morning.jfgmx.cn.gov.cn.jfgmx.cn http://www.morning.zrwlz.cn.gov.cn.zrwlz.cn http://www.morning.pzjrm.cn.gov.cn.pzjrm.cn http://www.morning.thlzt.cn.gov.cn.thlzt.cn http://www.morning.lzph.cn.gov.cn.lzph.cn http://www.morning.jrqw.cn.gov.cn.jrqw.cn http://www.morning.fdrwk.cn.gov.cn.fdrwk.cn http://www.morning.rljr.cn.gov.cn.rljr.cn http://www.morning.xhsxj.cn.gov.cn.xhsxj.cn http://www.morning.sgmgz.cn.gov.cn.sgmgz.cn http://www.morning.yrkdq.cn.gov.cn.yrkdq.cn http://www.morning.sfwd.cn.gov.cn.sfwd.cn http://www.morning.yrrnx.cn.gov.cn.yrrnx.cn