1235. 规划兼职工作
# 1235. 规划兼职工作
你打算利用空闲时间来做兼职工作赚些零花钱。
这里有 n 份兼职工作,每份工作预计从 startTime [i] 开始到 endTime [i] 结束,报酬为 profit [i]。
给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime 和预计报酬 profit 三个数组,请你计算并返回可以获得的最大报酬。
注意,时间上出现重叠的 2 份工作不能同时进行。
如果你选择的工作在时间 X 结束,那么你可以立刻进行在时间 X 开始的下一份工作。
示例 1:
输入:startTime = [1,2,3,3], endTime = [3,4,5,6], profit = [50,10,40,70]输出:120解释:我们选出第 1 份和第 4 份工作, 时间范围是 [1-3]+[3-6],共获得报酬 120 = 50 + 70。
示例 2:
输入:startTime = [1,2,3,4,6], endTime = [3,5,10,6,9], profit = [20,20,100,70,60]输出:150解释:我们选择第 1,4,5 份 ...
901. 股票价格跨度
# 901. 股票价格跨度
编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。
今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。
例如,如果未来 7 天股票的价格是 [100, 80, 60, 70, 60, 75, 85],那么股票跨度将是 [1, 1, 1, 2, 1, 4, 6]。
示例:
输入:["StockSpanner","next","next","next","next","next","next","next"], [[],[100],[80],[60],[70],[60],[75],[85]]输出:[null,1,1,1,2,1,4,6]解释:首先,初始化 S = StockSpanner(),然后:S.next(100) 被调用并返回 1,S.next(80) 被调用并返回 1,S.next(60) 被调用并返回 ...
779. 第K个语法符号
# 779. 第 K 个语法符号
我们构建了一个包含 n 行 ( 索引从 1 开始 ) 的表。首先在第一行我们写上一个 0。接下来的每一行,将前一行中的 0 替换为 01,1 替换为 10。
例如,对于 n = 3 ,第 1 行是 0 ,第 2 行是 01 ,第 3 行是 0110 。
给定行数 n 和序数 k,返回第 n 行中第 k 个字符。( k 从索引 1 开始)
示例 1:
输入: n = 1, k = 1输出: 0解释: 第一行:0
示例 2:
输入: n = 2, k = 1输出: 0解释: 第一行: 0 第二行: 01
示例 3:
输入: n = 2, k = 2输出: 1解释:第一行: 0第二行: 01
提示:
1 <= n <= 30
1 <= k <= $2^n - 1$
# 题解
这道题和腾讯笔试题很像。
本质上每一次操作都是在上一行基础上添加其按位取反后的结果。
class Solution {public: int kthGrammar(int n, int k) { k--; ...
1700. 无法吃午餐的学生数量
# 1700. 无法吃午餐的学生数量
学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。
餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮:
如果队列最前面的学生 喜欢 栈顶的三明治,那么会 拿走它 并离开队列。
否则,这名学生会 放弃这个三明治 并回到队列的尾部。
这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。
给你两个整数数组 students 和 sandwiches ,其中 sandwiches [i] 是栈里面第 i 个三明治的类型(i = 0 是栈的顶部), students [j] 是初始队列里第 j 名学生对三明治的喜好(j = 0 是队列的最开始位置)。请你返回无法吃午餐的学生数量。
示例 1:
输入:students = [1,1,0,0], sandwiches = [0,1,0,1]输出:0 解释:- 最前面的学生放弃最顶上的三明治,并回到队列的末尾,学生队列变为 students = [1,0,0,1]。- 最前面 ...
902. 最大为 N 的数字组合
# 902. 最大为 N 的数字组合
给定一个按 非递减顺序 排列的数字数组 digits 。你可以用任意次数 digits [i] 来写的数字。例如,如果 digits = [‘1’,‘3’,‘5’],我们可以写数字,如 ‘13’, ‘551’, 和 ‘1351315’。
返回 可以生成的小于或等于给定整数 n 的正整数的个数 。
示例 1:
输入:digits = ["1","3","5","7"], n = 100输出:20解释:可写出的 20 个数字是:1, 3, 5, 7, 11, 13, 15, 17, 31, 33, 35, 37, 51, 53, 55, 57, 71, 73, 75, 77.
示例 2:
输入:digits = ["1","4","9"], n = 1000000000输出:29523解释:我们可以写 3 个一位数字,9 个两位数字,27 个三位数字,81 个四位数字,243 个五位数字,729 个六位数字,218 ...
904. 水果成篮
# 904. 水果成篮
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits [i] 是第 i 棵树上的水果 种类 。
你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:
你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。
你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。
给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。
示例 1:
输入:fruits = [1,2,1]输出:3解释:可以采摘全部 3 棵树。
示例 2:
输入:fruits = [0,1,2,2]输出:3解释:可以采摘 [1,2,2] 这三棵树。如果从第一棵树开始采摘,则只能采摘 [0,1] 这两棵树。
示例 3:
输入:fruits = [1,2,3,2,2]输出:4 ...
886. 可能的二分法
# 886. 可能的二分法
给定一组 n 人(编号为 1, 2, …, n), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。
给定整数 n 和数组 dislikes ,其中 dislikes [i] = [ai, bi] ,表示不允许将编号为 ai 和 bi 的人归入同一组。当可以用这种方法将所有人分进两组时,返回 true;否则返回 false。
示例 1:
输入:n = 4, dislikes = [[1,2],[1,3],[2,4]]输出:true解释:group1 [1,4], group2 [2,3]
示例 2:
输入:n = 3, dislikes = [[1,2],[1,3],[2,3]]输出:false
示例 3:
输入:n = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]]输出:false
提示:
1 <= n <= 2000
0 <= dislikes.length <= $10^4$
dislikes[i].length == 2
1 <= d ...
C++学习笔记(三)
接下来是本书第二章的剩余内容
# 1. const 限定符
如果我们想定义一种值不要被随便改变的变量,就可以用 const 对变量类型加以限定,并且一旦创建后它的值就不能在改变,所以,我们必须初始化这个 const 对象。
默认状态下,const 对象仅在文件中有效。我们默认在多个文件中出现了同名的 const 变量时,其实等同于在不同的文件中分别定义了独立的变量。
如果我们想让 const 对象只在一个文件中定义它同时在其他文件中声明并使用它,只要在声明及定义时都添加 extern 关键字就可以了。
# 2. const 的引用
还记得上一篇文章提到的引用吗,(忘了回去看看),我们可以把引用绑定到 const 对象上,就和其他的对象一样,我们称之为对常量的引用(reference to const)。与普通引用的区别是,对常量的引用不能被用作修改它所绑定的对象。
常量引用是我们对于 const 引用的简称,虽然这简称挺形象,但务必记住这只是简称,毕竟常量引用严格而言是不存在的,因为引用不是一个对象,我们没法让引用本身恒定不变。事实上,由于 C++ 语言并不允许随意改变引用所绑定 ...
1441. 用栈操作构建数组
# 1441. 用栈操作构建数组
给你一个数组 target 和一个整数 n。每次迭代,需要从 list = {1 , 2 , 3 …, n} 中依次读取一个数字。
请使用下述操作来构建目标数组 target :
“Push”:从 list 中读取一个新元素, 并将其推入数组中。
“Pop”:删除数组中的最后一个元素。
如果目标数组构建完成,就停止读取更多元素。
题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。
请返回构建目标数组所用的操作序列。如果存在多个可行方案,返回任一即可。
示例 1:
输入:target = [1,3], n = 3输出:["Push","Push","Pop","Push"]解释: 读取 1 并自动推入数组 -> [1]读取 2 并自动推入数组,然后删除它 -> [1]读取 3 并自动推入数组 -> [1,3]
示例 2:
输入:target = [1,2,3], n = 3输出:["Push","Push ...
C++学习笔记(二)
今天是第二章的内容,祝你好运,也祝我。
# 1. 编程语言的特征
常用的编程语言通常具备一组公共的语法特征,仅在特征的细节上有所区别。
大多数编程语言通过两种方式进一步补充其基本特征:
赋予程序员自定义数据类型的权利,从而实现对语言的扩展
将一些有用的功能封装成库函数提供给程序员
与大多数编程语言一样,C++ 的对象类型决定了能对该对象进行的操作,一条表达式是否合法依赖于其中参与运算的对象的类型。C++ 是一种静态数据类型语言,它的类型检查发生在编译时。因此编译器必须知道程序中每一个变量对应的数据类型。
# 2. 基本内置类型
C++ 定义了一套包括算数类型(arithmetic type)和空类型(void)在内的基本数据类型。
算数类型
整型(intergral type,包括字符和布尔类型在内)
浮点型
C++:算数类型
类型
含义
最小尺寸
bool
布尔类型
未定义
char
字符
8 位
wchar_t
宽字符
16 位
char16_t
Unicode 字符
16 位
char32_t
Unicode 字符
32 位 ...