自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 1.27学习博客

今天学习了动态规划和01背包问题。 例题:采药 为了更好地理解01背包问题和动态规划的结合,借用题解中大佬的描述方式。 假设现在的背包的容量是 C=10; 物品编号:1 2 3 物品重量:5 6 4 物品价值:20 10 12 用v[i]表示物品价值,w[i]表示物品重量,要使得放入背包的物品价值最大化,我们知道用贪心是不行的! 所以接下来开始动态规划: 首先定义状态 dp[i][j]以 j 为容量为放入前i个物品(按 i 从小到大的顺序)的最大价值,那么i=1 的时候,放入的是物品

2021-01-27 21:53:23 168

原创 1.26学习博客

今天学习了迭代器以及一些函数 要访问顺序容器和关联容器中的元素,需要通过迭代器(iterator) 进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的 中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读 写它指向的元素。迭代器和指针类似。迭代器按照定义方式分成 正向迭代器、常量正向迭代器、反向迭代器和常量反向迭代器四 种。正向迭代器的定义方式为:“容器类名::iterator 迭代器 名;”。 在做题过程中学到了count()函数,其中的一个用法如下,s.count(k);若该值为0, 则其意思

2021-01-26 19:34:13 188

原创 1.25学习博客

今天学习了c++stl的vector、map、set等内容 **vector** vector容器被称为向量容器,是一种序列式容器。vector容器和数组非 常类似,但比数组优越,vector实现的是一个动态数组,在进行元素的 插入和删除的过程中,vector会动态调整所占用的内存空间。在中间插 入和删除慢,但在末端插入和删除快。 在创建vector容器之前,程序中要包含如下内容: #include <vector> using namespace std; 创建vector容器的方式有很

2021-01-26 00:17:10 158

原创 1.22学习博客

今天继续总结冬令营的题目 结构体排序 第一题: 我们可以设宾馆序列为h,宾馆用结构体表示,h[i].dist表示第i个宾馆离海边的距离,h[i].cost表示该宾馆的价格,根据题意,我们以距离为第一关键字,以价格为第二关键字,对宾馆序列进行排序,然后对排序之后的序列进行候选宾馆数量的遍历。根据题意,如果a宾馆离海边的距离小于b宾馆离海边的距离,则b宾馆的价格一定比a宾馆低才能算入候选宾馆。 #include<iostream> #include<algorithm> using

2021-01-22 20:45:17 194

原创 1.21学习博客

总结一下今天冬令营的几道题目 第一题(关于微积分的问题) 根据题意我们可以知道,项链的长度和n是有关系的,而且可以用式子表示出来,所以这就可以转化成求函数极值的问题。 最后的n需要是整数,所以还需要对求得的n进行最近的取整(向上或向下)。 代码如下: #include<stdio.h> #include<stdlib.h> int main(){ double Vt,V0; while(~scanf("%lf%lf",&Vt,&V0)&&V

2021-01-21 21:23:55 162

原创 1.20学习博客

今天继续总结冬令营训练的题目,另外总结一道队列题目。 队列题目:丑数 题目意思很简单,但是我们用暴力去解决理论上可行,但是基本上都是超时的。 仔细观察题目后我们会发现,既然所求的丑数的质因子都是2,3,5,那么我们可以从1开始,建立三个队列,分别存放2的倍数,3的倍数,5的倍数,若遍历到了该值,则继续在该队列中增加下一个丑数序列的对应倍数。这样也可以避免相同数字出现时重复计算的情况。 部分核心代码如下: class Solution { public: int GetUglyNumber_Solu

2021-01-20 18:44:50 154

原创 1.19学习博客

今天总结几道在冬令营训练的题目 第一题(初等几何) 分析: 根据题意我们容易知道的是在所输入的四个点的坐标中,有可能会有两个点是重复的,所以需要先判断一下重复的是哪两个点;然后,因为是平行四边形,根据简单的平面几何知识,设一个平行四边形的四个顶点的逆时针顺序依次为a,b,c,d,则a.x-b.x=d.x-c.x, a.y-b.y=d.y-c.y,这样我们就能很容易的对第四个点的坐标进行确定。 #include<iostream> using namespace std; typedef

2021-01-19 20:38:26 152

原创 1.15学习博客

今天练习了几道堆的题目,下面总结两道。 这两道题目基本思想都一致,一个是大根堆,一个是小根堆。 大根堆题目:数组中的第K个最大元素 其实这道题目用其他基本常见的排序做法也可以解决,但是在这里,正好可以选择基于堆排序的方法来实现。 我们也可以使用堆排序来解决这个问题——建立一个大根堆。 做 k - 1 次删除操作后堆顶元素就是我们要找的答案。 部分代码如下: void maxHeapify(int* a, int i, int heapSize) { int l = i * 2 + 1, r =

2021-01-15 17:30:40 128

原创 1.14学习博客

今天总结一道栈的中等偏难的题目 柱状图中的最大矩形 【算法思路】单调栈 1.构建单调增栈 2.数据入栈,如果大于等于栈顶,则直接入栈 3.如果小于栈顶,则结算栈顶 4.最终数据的统计,到起始位置,要统计全长度 (不好理解的话建议将例子代入来理解) 部分代码如下: int maxi(int a,int b){ if(a<b)return b; else{return a;} } int largestRectangleArea(int* heights, int heig

2021-01-14 21:01:51 153

原创 1.13学习博客

今天继续总结两道有关栈的题目 第一题:每日温度 这道题目的话,采用暴力遍历是会超时的,所以我们采用栈来解决题目。 for 循环要从后往前扫描元素,倒着入栈,正着出栈。 while 循环是把两个较大元素之间的元素排除 部分代码: int* dailyTemperatures(int* T, int TSize, int* returnSize){ *returnSize = TSize; int *ans = malloc(sizeof(int)*TSize); int stack[TSiz

2021-01-13 19:01:50 145

原创 1.12学习博客

今天总结两道在括号使用上面有关栈的题目。 第一题:删除最外层的括号 有关括号使用有效性或者去除最外层等很容易让我们想到使用栈来解决, 在这道题目中,我们可以借助栈的思想,简化做法,定义一个变量来帮助我们辨别 是否在处理最外层结构。 代码如下: char * removeOuterParentheses(char * S){ int cnt = 0,k = 0;//cnt为0,则处于最外层 for(int i = 0;i < strlen(S);i++){ if(S[i]

2021-01-12 19:32:27 122

原创 1.11学习博客

今天总结一道分治题目和dp题目 分治题目:排序矩阵查找 思路:缩小问题规模 (减治) 设矩阵左下角元素 matrix[i][j] ,它是第 i 行最小值,同时也是第 j 列最大值 若 target < matrix[i][j] (小于第 i 行最小值),则排除第 i 行,令 i– 若 target > matrix[i][j] (大于第 j 列最大值),则排除第 j 列,令 j++ 循环 2~3 直到找到 target,或所有行列均被排除 部分代码如下: bool searchMatrix(

2021-01-11 18:35:21 194

原创 1.10学习博客

今天复习了动态规划,解决了一道树的问题。 动态规划题目:最大正方形 部分代码: 树问题的题目:在二叉树中找到两个节点的最近公共祖先 部分代码: 今天的复习让我对前几天学的动态规划更熟练了,能较快地找到正确思路,并写出关键的dp状态变换代码。 ...

2021-01-10 19:58:00 130

原创 1.9学习博客

回溯算法…结合起题目来难度确实有点高啊… 题目链接:全排列 这种典型的求全排列,求所有组合这种的题目都可以用到回溯算法,大多是回溯算法结合其他方法共同解决。 思路: 1、回溯算法使用DFS深度优先搜索,一路到底找到一条路径; 2、每次再从最后一个结点返回至上一层决策树,考虑下一个结点再次一路到底 3、每次路径上使用到一个结点都会标记为已使用,在返回上一层决策树之前删除标记, 这样在上一层中就能选择此节点了 4、直到所有决策树都完成,则结束 部分代码(借鉴了题解中大佬的思想和代码): 今天接触到回溯算

2021-01-09 18:58:41 150

原创 1.8学习博客

今天练习了一些关于二分查找的题目。 第一题:https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days/ 由于本题目中求的是货船的容量,容易知道的是,该容量最小为所有货物重量中的最大值,最大为所有货物重量之和。可以从这个方面来进行二分查找。 部分代码: int shipWithinDays(int* weights, int weightsSize, int D){ int min=-1,max,sum=0; max=

2021-01-08 17:17:11 135

原创 1.7学习博客

今天继续训练了三道dp题目 第一题:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ 根据官方题解思想,每天交易结束后只可能存在手里有一支股票或者没有股票的状态。 定义状态 dp[i][0] 表示第 i天交易完后手里没有股票的最大利润,dp[i][1] 表示第 i天交易完后手里持有一支股票的最大利润(i 从 0 开始)。 考虑 dp[i][0] 的转移方程,如果这一天交易完后手里没有

2021-01-07 18:55:55 132

原创 1.6学习博客

今天学习了动态规划的基本思想,并做了三道训练题。 第一题:https://leetcode-cn.com/problems/stone-game/ 采用动态规划的解法的话,使用二维动态规划数组,dp[i][j]记录了在p[i]到p[j]的序列中先选的人能够取得的比对手多的最大石头数量, 初始化时,对于对角线上的元素,dp[i][i]表示从p[i]到p[i]的序列中选,选了之后就结束了,所以dp[i][i]=p[i] 如果选p[i],那么对手的可选范围变为p[i+1]到p[j],所以当前取得的石头数目减去

2021-01-06 20:43:08 144

原创 1.5学习博客

1.5 今天继续在贪心算法做了练习。 第一题:https://leetcode-cn.com/problems/two-city-scheduling/ 对于这种类型的问题,我们可以这么想,让所有的人先都去B地,总费用为所有人去B的费用之和 ,然后其中一半的人是要去A的,这时每个去A的人的花费为priceA=priceB+(priceA-priceB),其中priceA-priceB可以是负值, 表示去A地的价格比去B地少。所以在都去B地的基础上,找到N个最小的priceA-priceB即可,这

2021-01-05 19:27:27 160

原创 1.4学习博客

1.4学习博客 今天学习了贪心算法的基本思想,在两个基础题目中得到了运用,集合了题目本身的特点以及双指针的运用。 第一题:https://leetcode-cn.com/problems/partition-labels/ 由于同一个字母只能出现在同一个片段,显然同一个字母的第一次出现的下标位置和最后一次出现的下标位置必须出现在同一个片段。因此需要遍历字符串,得到每个字母最后一次出现的下标位置。 在得到每个字母最后一次出现的下标位置之后,可以使用贪心算法和双指针的方法将字符串划分为尽可能多的片段 int m

2021-01-04 22:21:31 138

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除