part03专题

夸父追日:第八章 贪心算法 part03

今日收获:加油站,分发糖果,柠檬水找零,根据身高重建队列 1. 加油站 题目链接:134. - 力扣(LeetCode) 思路: (1)局部最优是剩余油量和要大于0,否则选下一个节点作为起始节点 (2)记录当前剩余油量和总的剩余油量,如果当前剩余油量小于0,选择下一个节点作为起点。思路有点像最大子序和;如果总的剩余油量小于0,说明无解 方法: class Solution {publ

夸父追日:第七章 回溯算法part03

今日收获:复原IP地址,子集,子集Ⅱ 1. 复原IP地址 题目链接:93. 复原 IP 地址 - 力扣(LeetCode) 思路:         1. 终止条件:因为整个字符串切割为四段就好,所以终止条件是path的长度为3,然后判断剩下字符串的有效性,如果有效就添加,无效就返回。         2. 和分割回文子串的思路相似,只是终止条件不同,以及判断字符串是否合法不同 方法:

代码随想录算法训练营第五十二天 | 图论part03

101. 孤岛的总面积 #include <vector>#include <iostream>using namespace std;int dir[4][2] = {0, 1, 0, -1, -1, 0, 1, 0};void dfs(const vector<vector<int>> &grid, vector<vector<bool>> &visited, int x, int y,

day52-graph theory-part03-8.23

tasks for today: 1. 101.孤岛总面积 2. 102.沉默孤岛 3. 103.水流问题 4. 104.建造最大岛屿 -------------------------------------------------------------------------------------- 1. 101.孤岛总面积 pay attention to the requ

day35贪心算法part03| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

1005.K次取反后最大化的数组和 本题简单一些,估计大家不用想着贪心 ,用自己直觉也会有思路。 题目讲解 | 题目链接 自己的想法,也通过了 class Solution {public:int sumMax(vector<int>& nums) {int sum = 0;for (int i = 0; i < nums.size(); i++) {cout << nums[i] <

day27回溯算法part03| 39. 组合总和 40.组合总和II 131.分割回文串

39. 组合总和 题目链接/文章讲解 | 视频讲解 本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制 class Solution {public:int sum;vector<int> path;vector<vector<int>> result;void backtracking(vector<int>& candidates,

day16二叉树part03 | 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

104.二叉树的最大深度 (优先掌握递归) 两种思路:1.使用递归,主要思想是递归遍历左右子树,然后左右子树高度的最大值加1即为当前节点的高度2.之前学习层次遍历的时候做过这题,直接在层次遍历的时候加上一个计数变量即可 思路1,递归法 class Solution {public:// 1.首先确定函数参数和返回值,要返回的是一个intint depth(TreeNode* root)

day 27 第七章 回溯算法part03

总结 回溯不好在脑海里硬想,多动手画一次树形结构,这样分析回溯逻辑就更方便了 ● 39. 组合总和 ● 40.组合总和II ● 131.分割回文串 ● 39. 组合总和 /** 39. 组合总和中等给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返

代码随想录第34天: 贪心part03

力扣 1005.K次取反后最大化的数组和 class Solution {public int largestSumAfterKNegations(int[] nums, int k) {// 将基本类型的int数组转换成IntStream,以便进行流操作。nums = Arrays.stream(nums)// 将IntStream中的int元素转换(装箱)为Integer对象,这是必须的因为

Day34代码随想录贪心part03:1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

Day34 贪心part03 1005.K次取反后最大化的数组和 题目链接:1005. K 次取反后最大化的数组和 - 力扣(LeetCode) 题意:给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方式修改数组后,返回数组可能的最大和。 示例 2: 输入

Day60 单调栈 part03

Day60 单调栈 part03 最后一天啦!完结撒花~ 84.柱状图中最大的矩形 我的思路: 感觉和接雨水差不多,只需要多考虑一些情况 双指针 lheight 和 rheight 分别是用来存储每个柱子的左边界和右边界的数组。 解答: class Solution {public int largestRectangleArea(int[] heights) {int res =

代码随想录训练营第三十五期|第天16|二叉树part03|104.二叉树的最大深度 ● 111.二叉树的最小深度● 222.完全二叉树的节点个数

104. 二叉树的最大深度 - 力扣(LeetCode) 递归,可以前序遍历,也可以后序遍历 前序遍历是backtracking 下面是后序遍历的代码: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;

●day 13:第五章 栈与队列part03

总结 单调队列的实现, 优先级队列的使用 ● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 239. 滑动窗口最大值 /*239. 滑动窗口最大值困难提示给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。示例 1:输入:nums =

【随想录】Day13—第五章 栈与队列part03

目录 题目1: 239. 滑动窗口最大值1- 思路自定义单调队列 2- 题解⭐滑动窗口最大值 ——题解思路 题目2: 347.前 K 个高频元素1- 思路2- 实现⭐前 K 个高频元素 ——题解思路 题目1: 239. 滑动窗口最大值 题目链接:239. 滑动窗口最大值 1- 思路 滑动窗口移动的过程很像是一个队列,实现一个 单调队列 —— 维护元素的单调顺序

java算法第34天 | 贪心算法 part03 ● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果

1005.K次取反后最大化的数组和 思路: 先将数组元素从小到大排列,从左向右处理,分两种情况讨论 当遇到负数,将负数变为正数,继续处理下一个元素当遇到正数,对数组重排,循环处理当前的最小元素。 但需要注意的是,需要对count取模,因为k可能大于数组的长度。 class Solution {public int largestSumAfterKNegations(int[] nums

day34 第八章 贪心算法 part03● 1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果

自己写的情况理不清楚,wa了好几次才ac。 比如 如果 k比负数多,且多的数是奇数3,那么最后变为符号的应该是绝对值最小的数,而不是负数中最大的数。 比如:  我只考虑了k的次数大于负数的数量,但是没考虑大于数组的整体长度。按照我原来代码,是直接遍历结束了,所有负数取反求和得到9。要特判,如果k比负数多出来数量是奇数,要处理,减去绝对值最小的数的两倍,因为之前加了两次。 cla

day34贪心算法 part03

1005. K 次取反后最大化的数组和 简单 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可能的最大和 。 class Solution {public int largestSumAfterKNega

代码随想录算法训练营(JAVA)| 第五章 栈与队列part03

今日任务  力扣 239. 滑动窗口最大值、   347. 前 K 个高频元素 题目 :239. 滑动窗口最大值 思路 滑动窗口问题,需要维护窗口内的最大值就行。 存在问题:                  1.如何维护最大值?                    2.当滑动窗口在移动时如何判定何时移出窗口内的最大值? 使用了一个自定义的双端队列(

Leetcoder Day36| 动态规划part03

343. 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。 本题需要注意的是,至

Leetcoder Day29| 贪心算法part03

1005.K次取反后最大化的数组和 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。) 以这种方式修改数组后,返回数组可能的最大和。 示例 1: 输入:A = [4,2,3], K = 1输出:5解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。 示例 2:

前后端项目-part03

文章目录 5.4.4 机构名称5.4.4.1 创建实体类Company5.4.4.2 创建实体类CompanyMapper5.4.4.3 创建实体类CompanyService5.4.4.4 创建实体类CompanyController5.4.4.5 后端测试5.4.4.6 修改basic.js5.4.4.7 修改course.vue5.4.4.8 测试 5.4.5 课程标签5.4.5.1

海智算法训练营第三十三天 | 第八章 贪心算法 part03 | ● 1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果

今日任务: 1.k次取反后最大化数组和 2.贪心解决加油站问题 3.左右边界分别处理——分发糖果 1.k次取反后最大化数组和 力扣题目链接 这道题比较简单就不多说了。 class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);for (int i =

Day52- 单调栈part03

一、柱状图中最大的矩形 题目一:84. 柱状图中最大的矩形  84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积 栈中保存的是每个柱子的索引,栈中索引对应的柱子高度是递增的,所以每个柱子的右边界就是其右侧第一个高度不足的位置。同理,柱子的左边界是其左侧第一个高度不足的位置。

Day34 贪心算法part03

K次取反后最大化的数组和  for num in nums:if k == 0:breakif num < 0:num = -numk -= 1 这种直接遍历元素的赋值的话不改变数组里面的数! 得写成下面这个样子 for i in range(len(nums)):if k == 0:breakif nums[i] < 0:nums[i] = -nums[i]k -= 1 A.sort(ke

代码随想录算法训练营day 26|第七章 回溯算法part03

39. 组合总和  本题是集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制 题目链接/文章讲解:代码随想录 视频讲解:带你学透回溯算法-组合总和(对应「leetcode」力扣题目:39.组合总和)| 回溯法精讲!_哔哩哔哩_bilibili 这道题主要的特点是已经选过的数可以重复选取,所以每次选取的数的开始下标就直接是当前下标,这样设置每次选取数字只

Day60 单调栈part03 84. 柱状图中最大的矩形

Day60 单调栈part03 84. 柱状图中最大的矩形 84. 柱状图中最大的矩形 暴力法 class Solution {public:int largestRectangleArea(vector<int>& heights) {int sum = 0;for (int i = 0; i < heights.size(); i++) {int left = i;int right