北京品牌网站设计,欧赛网站建设,wordpress装模板,百度怎么搜索到自己的网站刷题顺序及思路来源于代码随想录#xff0c;网站地址#xff1a;https://programmercarl.com
目录
455. 分发饼干
376. 摆动序列
53. 最大子数组和
122. 买卖股票的最佳时机 II
55. 跳跃游戏
45. 跳跃游戏 II
1005. K 次取反后最大化的数组和 455. 分发饼干
假设你是…刷题顺序及思路来源于代码随想录网站地址https://programmercarl.com
目录
455. 分发饼干
376. 摆动序列
53. 最大子数组和
122. 买卖股票的最佳时机 II
55. 跳跃游戏
45. 跳跃游戏 II
1005. K 次取反后最大化的数组和 455. 分发饼干
假设你是一位很棒的家长想要给你的孩子们一些小饼干。但是每个孩子最多只能给一块饼干。
对每个孩子 i都有一个胃口值 g[i]这是能让孩子们满足胃口的饼干的最小尺寸并且每块饼干 j都有一个尺寸 s[j] 。如果 s[j] g[i]我们可以将这个饼干 j 分配给孩子 i 这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子并输出这个最大数值。
输入: g [1,2,3], s [1,1]
输出: 1
解释:
你有三个孩子和两块小饼干3个孩子的胃口值分别是1,2,3。
虽然你有两块小饼干由于他们的尺寸都是1你只能让胃口值是1的孩子满足。
所以你应该输出1。
import java.util.Arrays;
import java.util.Scanner;/*** author light* Description 分发饼干** (思路1.利用大饼干尽量先去满足胃口大的小孩/2.小饼干尽量先去满足胃口小的小孩* create 2023-09-04 9:39*/
public class FindContentChildrenTest {public static void main(String[] args) {Scanner inputnew Scanner(System.in);int ninput.nextInt();int[] gnew int[n]; //胃口for (int i 0; i n; i) {g[i]input.nextInt();}ninput.nextInt();int[] snew int[n]; //饼干尺寸for (int i 0; i n; i) {s[i]input.nextInt();}System.out.println(findContentChildren(g, s));}public static int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int count0;int index0;//小饼干尽量先去满足胃口小的小孩for (int i 0; i s.length; i) { //先遍历饼干if(indexg.lengths[i] g[index]){count;index;}}return count;}
}376. 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替则数字序列称为 摆动序列 。第一个差如果存在的话可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如 [1, 7, 4, 9, 2, 5] 是一个 摆动序列 因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。 相反[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列第一个序列是因为它的前两个差值都是正数第二个序列是因为它的最后一个差值为零。
子序列 可以通过从原始序列中删除一些也可以不删除元素来获得剩下的元素保持其原始顺序。
给你一个整数数组 nums 返回 nums 中作为 摆动序列 的 最长子序列的长度 。
输入nums [1,7,4,9,2,5]
输出6
解释整个序列均为摆动序列各元素之间的差值为 (6, -3, 5, -7, 3) 。
import java.util.Scanner;/*** author light* Description 摆动序列*** 思路删除单调坡度上的节点只保留两端节点这个坡度就有两个局部峰值* 考虑三种情况* 1.上下坡中有平坡 1-2-2-1 删除左边的元素或删除右边的元素* 2.首尾元素 给最左端元素向前延伸一个值默认最右端有摆动不列入计算* 3.单调坡中有平坡 1-2-2-3-4* create 2023-09-04 10:17*/
public class WiggleMaxLengthTest {public static void main(String[] args) {Scanner inputnew Scanner(System.in);int ninput.nextInt();int[] numsnew int[n]; //胃口for (int i 0; i n; i) {nums[i]input.nextInt();}System.out.println(wiggleMaxLength(nums));}public static int wiggleMaxLength(int[] nums) {if(nums.length1){return 1;}int prediff0; //上一个差值int curdiff0; //当前差值int result1; //默认最右端有摆动for (int i 1; i nums.length; i) {//不遍历最后一个元素默认最后一个元素有摆动curdiffnums[i]-nums[i-1];if(prediff0curdiff0||prediff0curdiff0){result;prediffcurdiff; //prediff跟着curdiff去变化但没必要实时跟着curdiff去变化只需要当坡度有变化是去记录一下坡度的原始方向---解决情况三}}return result;}
}53. 最大子数组和
给你一个整数数组 nums 请你找出一个具有最大和的连续子数组子数组最少包含一个元素返回其最大和。
子数组 是数组中的一个连续部分。
输入nums [-2,1,-3,4,-1,2,1,-5,4]
输出6
解释连续子数组 [4,-1,2,1] 的和最大为 6 。
import java.util.Scanner;/*** author light* Description 最大子数组和*** (思路当连续和为负数的时候抛弃当前元素从下一个元素开始重新计算连续和* create 2023-09-04 11:24*/
public class MaxSubArrayTest {public static void main(String[] args) {Scanner inputnew Scanner(System.in);int ninput.nextInt();int[] numsnew int[n];for (int i 0; i n; i) {nums[i]input.nextInt();}System.out.println(maxSubArray(nums));}public static int maxSubArray(int[] nums) {int count0;int sumInteger.MIN_VALUE;for (int i 0; i nums.length; i) {countnums[i];sumMath.max(sum,count);if(count0){count0;}}return sum;}
}122. 买卖股票的最佳时机 II
给你一个整数数组 prices 其中 prices[i] 表示某支股票第 i 天的价格。
在每一天你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买然后在 同一天 出售。
返回 你能获得的 最大 利润 。
输入prices [7,1,5,3,6,4]
输出7
解释在第 2 天股票价格 1的时候买入在第 3 天股票价格 5的时候卖出, 这笔交易所能获得利润 5 - 1 4 。随后在第 4 天股票价格 3的时候买入在第 5 天股票价格 6的时候卖出, 这笔交易所能获得利润 6 - 3 3 。总利润为 4 3 7 。
import java.util.Scanner;/*** author light* Description 股票买卖最佳时机II** (思路把利润拆解成以每天的维度* 如第2天买入第4天卖出 price[4]-price[2]price[4]-price[3]price[3]-price[2]** 贪心获取正利润已达到全局最大利润* create 2023-09-05 9:52*/
public class MaxProfitTest {public static void main(String[] args) {Scanner inputnew Scanner(System.in);int ninput.nextInt();int[] numsnew int[n];for (int i 0; i n; i) {nums[i]input.nextInt();}System.out.println(maxProfit(nums));}public static int maxProfit(int[] prices) {int result0;for (int i 1; i prices.length; i) {resultMath.max(prices[i]-prices[i-1],0); //只获取正利润}return result;}
}55. 跳跃游戏
给你一个非负整数数组 nums 你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标如果可以返回 true 否则返回 false 。
输入nums [2,3,1,1,4]
输出true
解释可以先跳 1 步从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
import java.util.Scanner;/*** author light* Description 跳跃游戏** (思路问题关键不在到底跳跃几步而是在于跳跃的覆盖范围* 那个这个问题就转化为覆盖范围能否覆盖终点* 每次移动取最大跳跃步数得到最大的覆盖范围每移动一个单位就更新最大覆盖范围。* 贪心算法局部最优解每次取最大跳跃步数取最大覆盖范围* 整体最优解最后得到整体最大覆盖范围看是否能到终点。* create 2023-09-05 10:09*/
public class CanJumpTest {public static void main(String[] args) {Scanner inputnew Scanner(System.in);int ninput.nextInt();int[] numsnew int[n];for (int i 0; i n; i) {nums[i]input.nextInt();}System.out.println(canJump(nums));}public static boolean canJump(int[] nums) {if(nums.length1){return true;}int coverRang0; //记录覆盖范围---记录的是下标值for (int i 0; i coverRang; i) {coverRangMath.max(coverRang,inums[i]);if (coverRangnums.length-1){return true;}}return false;}
}45. 跳跃游戏 II
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。
每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说如果你在 nums[i] 处你可以跳转到任意 nums[i j] 处:
0 j nums[i] i j n
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。
输入: nums [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置跳 1 步然后跳 3 步到达数组的最后一个位置。
import java.util.Scanner;/*** author light* Description 跳跃游戏II** (思路还是要看覆盖范围如果当前覆盖范围未达到终点则步数1* 若当前覆盖范围达到最大值步数不用1** create 2023-09-05 10:30*/
public class JumpTest {public static void main(String[] args) {Scanner inputnew Scanner(System.in);int ninput.nextInt();int[] numsnew int[n];for (int i 0; i n; i) {nums[i]input.nextInt();}System.out.println(jump(nums));}public static int jump(int[] nums) {if(nums.length1){return 0;}int count0;int coverRange0; //当前覆盖范围---下标值int nextCoverRange0; //下一步覆盖范围for (int i 0; i nums.length; i) {//coverRangeinums[i];nextCoverRangeMath.max(nextCoverRange,inums[i]);if(icoverRange){if(coverRange! nums.length-1){count;coverRangenextCoverRange;if(coverRange nums.length-1){break;}}else {break;}}}return count;}
}1005. K 次取反后最大化的数组和
给你一个整数数组 nums 和一个整数 k 按以下方法修改该数组
选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后返回数组 可能的最大和 。
输入nums [4,2,3], k 1
输出5
解释选择下标 1 nums 变为 [4,-2,3] 。
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.IntStream;/*** author light* Description K 次取反后最大化的数组和** (思路让绝对值大的负数变为正数当前数值达到最大整体最优整个数组和达到最大。* 那么如果将负数都转变为正数了K依然大于0此时的问题是一个有序正整数序列如何转变K次正负让 数组和达到最大。* 那么又是一个贪心局部最优只找数值最小的正整数进行反转当前数值和可以达到最大例如正整数数组{5, 3, 1}反转1 得到-1 比 反转5得到的-5 大多了全局最优整个数组和达到最大。** 那么本题的解题步骤为* 第一步将数组按照绝对值大小从大到小排序注意要按照绝对值的大小* 第二步从前向后遍历遇到负数将其变为正数同时K--* 第三步如果K还大于0那么反复转变数值最小的元素将K用完* 第四步求和* create 2023-09-05 15:51*/
public class LargestSumAfterKNegationsTest {public static void main(String[] args) {Scanner inputnew Scanner(System.in);int ninput.nextInt();int[] numsnew int[n];for (int i 0; i n; i) {nums[i]input.nextInt();}int kinput.nextInt();System.out.println(largestSumAfterKNegations(nums, k));}public static int largestSumAfterKNegations(int[] nums, int k) {//1.将数组按照绝对值大小从大到小排序//Integer[] integersnew Integer[nums.length];//for (int i 0; i nums.length; i) {// integers[i]nums[i];//}//Arrays.sort(integers, new ComparatorInteger() {// Override// public int compare(Integer o1, Integer o2) {// return Math.abs(o2)-Math.abs(o1);// }//});nums IntStream.of(nums).boxed().sorted((a,b)-Math.abs(b)-Math.abs(a)).mapToInt(Integer::intValue).toArray();//从前向后遍历遇到负数将其变为正数同时K--for (int i 0; i nums.lengthk0; i) {if(nums[i]0){nums[i]-nums[i];k--;}}//如果K还大于0那么反复转变数值最小的元素将K用完if(k%21){ //若剩余k为奇数进行更改若k为偶数次则不进行取反nums[nums.length-1]-nums[nums.length-1];}//求和//int sum0;//for (int i 0; i nums.length; i) {// sumnums[i];//}//return sum;return Arrays.stream(nums).sum();}
} 文章转载自: http://www.morning.blzrj.cn.gov.cn.blzrj.cn http://www.morning.qrndh.cn.gov.cn.qrndh.cn http://www.morning.lyhrg.cn.gov.cn.lyhrg.cn http://www.morning.zcrjq.cn.gov.cn.zcrjq.cn http://www.morning.hcgbm.cn.gov.cn.hcgbm.cn http://www.morning.kjcll.cn.gov.cn.kjcll.cn http://www.morning.ylzdx.cn.gov.cn.ylzdx.cn http://www.morning.4r5w91.cn.gov.cn.4r5w91.cn http://www.morning.nfsrs.cn.gov.cn.nfsrs.cn http://www.morning.ylqrc.cn.gov.cn.ylqrc.cn http://www.morning.kpfds.cn.gov.cn.kpfds.cn http://www.morning.wjhdn.cn.gov.cn.wjhdn.cn http://www.morning.sffwz.cn.gov.cn.sffwz.cn http://www.morning.mtbth.cn.gov.cn.mtbth.cn http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn http://www.morning.ygkb.cn.gov.cn.ygkb.cn http://www.morning.fbpyd.cn.gov.cn.fbpyd.cn http://www.morning.wjtwn.cn.gov.cn.wjtwn.cn http://www.morning.gbfck.cn.gov.cn.gbfck.cn http://www.morning.hbxnb.cn.gov.cn.hbxnb.cn http://www.morning.clqpj.cn.gov.cn.clqpj.cn http://www.morning.fhkr.cn.gov.cn.fhkr.cn http://www.morning.rjcqb.cn.gov.cn.rjcqb.cn http://www.morning.nxbkw.cn.gov.cn.nxbkw.cn http://www.morning.jsxrm.cn.gov.cn.jsxrm.cn http://www.morning.xltwg.cn.gov.cn.xltwg.cn http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn http://www.morning.rybr.cn.gov.cn.rybr.cn http://www.morning.qkdjq.cn.gov.cn.qkdjq.cn http://www.morning.tnkwj.cn.gov.cn.tnkwj.cn http://www.morning.mlwhd.cn.gov.cn.mlwhd.cn http://www.morning.plydc.cn.gov.cn.plydc.cn http://www.morning.qgghr.cn.gov.cn.qgghr.cn http://www.morning.tjpmf.cn.gov.cn.tjpmf.cn http://www.morning.qxwrd.cn.gov.cn.qxwrd.cn http://www.morning.xdhcr.cn.gov.cn.xdhcr.cn http://www.morning.fswml.cn.gov.cn.fswml.cn http://www.morning.rgzc.cn.gov.cn.rgzc.cn http://www.morning.grpbt.cn.gov.cn.grpbt.cn http://www.morning.prls.cn.gov.cn.prls.cn http://www.morning.kpxzq.cn.gov.cn.kpxzq.cn http://www.morning.mwrxz.cn.gov.cn.mwrxz.cn http://www.morning.gqjzp.cn.gov.cn.gqjzp.cn http://www.morning.thrgp.cn.gov.cn.thrgp.cn http://www.morning.cykqb.cn.gov.cn.cykqb.cn http://www.morning.zkqjz.cn.gov.cn.zkqjz.cn http://www.morning.stpkz.cn.gov.cn.stpkz.cn http://www.morning.bfhfb.cn.gov.cn.bfhfb.cn http://www.morning.nqfxq.cn.gov.cn.nqfxq.cn http://www.morning.kghss.cn.gov.cn.kghss.cn http://www.morning.shuangxizhongxin.cn.gov.cn.shuangxizhongxin.cn http://www.morning.syhwc.cn.gov.cn.syhwc.cn http://www.morning.lmxrt.cn.gov.cn.lmxrt.cn http://www.morning.qqzdr.cn.gov.cn.qqzdr.cn http://www.morning.rqhbt.cn.gov.cn.rqhbt.cn http://www.morning.qpqcq.cn.gov.cn.qpqcq.cn http://www.morning.ltzkk.cn.gov.cn.ltzkk.cn http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn http://www.morning.rwnx.cn.gov.cn.rwnx.cn http://www.morning.qfmcm.cn.gov.cn.qfmcm.cn http://www.morning.rbmnq.cn.gov.cn.rbmnq.cn http://www.morning.gmnmh.cn.gov.cn.gmnmh.cn http://www.morning.kzcz.cn.gov.cn.kzcz.cn http://www.morning.qkrz.cn.gov.cn.qkrz.cn http://www.morning.rwbx.cn.gov.cn.rwbx.cn http://www.morning.bxqpl.cn.gov.cn.bxqpl.cn http://www.morning.pzbqm.cn.gov.cn.pzbqm.cn http://www.morning.bkylg.cn.gov.cn.bkylg.cn http://www.morning.twwzk.cn.gov.cn.twwzk.cn http://www.morning.yqgbw.cn.gov.cn.yqgbw.cn http://www.morning.qlwfz.cn.gov.cn.qlwfz.cn http://www.morning.xsfg.cn.gov.cn.xsfg.cn http://www.morning.lqtwb.cn.gov.cn.lqtwb.cn http://www.morning.tlpsd.cn.gov.cn.tlpsd.cn http://www.morning.cytr.cn.gov.cn.cytr.cn http://www.morning.brkrt.cn.gov.cn.brkrt.cn http://www.morning.tgmwy.cn.gov.cn.tgmwy.cn http://www.morning.jsljr.cn.gov.cn.jsljr.cn http://www.morning.pqnpd.cn.gov.cn.pqnpd.cn http://www.morning.nlysd.cn.gov.cn.nlysd.cn