- 博客(16)
- 收藏
- 关注
原创 左值和右值
1.当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)2.左值可以取地址,代表着内存中某个位置,可以存储数据,右值仅仅是一个值,不能取地址,或者它看起来是一个变量,但它是临时的无法取地址。可以被赋值的表达式是左值,左值可以取地址。右值是一个表示值得表达式,不是左值得表达式都可以看成是右值。...
2021-11-09 10:17:40
243
原创 c++成员函数后面加一个冒号:
冒号后跟着的是赋值操作,这种写法是c++的特性比如,LRUcache(int capacity) : cap(capacity){ }相当于LRUcache(int capacity){cap=capacity;}
2021-10-18 15:46:30
378
原创 c++内存空间
c++内存空间分为5部分1.静态存储区:内存在程序编译的时候就已经分配好了,这块内存在程序的整个运行期间都存在。它主要存放静态数据(局部static变量,全局static变量)、全局变量和常量。2.栈区:在执行函数时,函数(包括main函数)内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存 分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3.堆区:也叫做动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当
2021-10-17 09:57:19
1790
原创 leetcode 452 用最少数量的箭引爆气球 贪心算法
一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需的弓箭的最小数量。输入:points = [[10,16],[2,8],[1,6],[7,12]]输出:2解释:对于该样例,x = 6 可以射爆 [2,8],[1,6] 两个气球,以及 x = 1..
2021-09-10 11:16:04
207
原创 leetcode 55跳跃游戏 贪心算法
给定一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。题解:不用纠结于每次跳几步,比如说当前元素是3,那么究竟是跳一步,两步,还是三步呢?其实跳几步无所谓,关键在于可跳的覆盖范围,每次取最大跳跃步数,得到跳跃的可覆盖范围。...
2021-09-08 20:44:36
120
原创 leetcode 135 分发糖果 贪心算法+两次遍历
老师想给孩子们分发糖果,有 N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?例子:输入:[1,2,2]输出:4解释:你可以分别给这三个孩子分发 1、2、1 颗糖果。 第三个孩子只得到 1 颗糖果,这已满足上述两个条件。分析:先确定孩子的一边是按照规则分发的,然后再确定孩子的另.
2021-09-08 17:09:15
259
原创 leetcode 714买卖股票的最佳时机含手续费 贪心算法
给定一个整数数组prices,其中第i个元素代表了第i天的股票价格。整数fee代表了交易股票的手续费用。可以无限次的完成交易,但是每笔交易都需要付手续费。如果你已经购买一个股票,在卖出它之前你就不能再继续购买了。返回获得利润的最大值。输入:prices = [1, 3, 2, 8, 4, 9], fee = 2输出:8解释:能够达到的最大利润: 在此处买入prices[0] = 1在此处卖出 prices[3] = 8在此处买入 prices[4] = 4在此处卖出 prices[5..
2021-09-07 21:27:33
170
原创 leetcode 柠檬水找零 860 (贪心算法)
在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回true,否则返回 false。输入:bills = [5,5,5,10,20]输出:...
2021-09-05 12:10:05
104
原创 leetcode k次取反后最大化的数组和1005(贪心算法)
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i)以这种方式修改数组后,返回数组可能的最大和。例子:输入:A = [2,-3,-1,5,-4], K = 2输出:13解释:选择索引 (1, 4) ,然后 A 变为 [2,3,-1,5,4]。思路:1.按照数组的绝对值大小进行排序。2.从前先后遍历,遇到负数将其变为正数,同时k--3.如果k值还大于0,那么反复转变.
2021-09-04 21:27:28
122
原创 leetcode455题 分发饼干 (贪心算法)
题目:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j]>= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,...
2021-09-04 15:38:37
305
原创 KMP算法
朴素模式匹配算法(也就是我们平时使用的暴力法)的缺点:当某些子串与模式串能部分匹配时,主串的扫描指针i经常回溯,导致时间开销增加。KMP算法:当子串和模式串不匹配时,主串指针i不回溯,模式串指针j=next[j]算法平均时间复杂度为 o(m+n)...
2021-06-25 13:02:02
87
原创 平衡二叉树
定义:树上任一结点的左子树和右子树的高度之差不超过1.结点的平衡因子:左子树高-右子树高。平衡二叉树结点的平衡因子的值只可能是-1、0、1
2021-06-02 09:43:17
138
原创 二叉搜索树(也叫二叉查找树、二叉排序树)
缩写:BST(binary search tree)定义:一颗二叉树或者是空二叉树,此二叉树具有如下性质左子树上所有结点的关键字均小于根结点的关键字。右子树上
2021-06-01 21:07:08
604
1
原创 二进制求和
给你两个二进制的字符串,返回它们的和string addbinary(string a,string b){ int al=a.size(); int bl=b.size(); while(al<bl) { a='0'+a; ++al; } while(al>bl) { b='0'+b; ++bl; } //首先,令两个字符串等长,如果不等长,则在短的字符串前面补零,否则之后
2021-05-23 11:10:18
90
原创 求最大子序和的问题
求最大子序和 :给定一个数组nums,找到一个具有最大和的连续子数组第一种:贪心算法 从左向右依此相加,当和存在负数时,令其为0 int maxsubarr(vector<int>& nums){int result=INT_MIN;int n=nums.size();int sum=0;for(int i=0;i<n;i++) { sum+=nums[i]; //统计数组中从0到i这些数的和 result=max(sum,res...
2021-05-22 21:54:44
205
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅