文章目录
599.两数之和
1.暴力枚举O(n2)
2.二分O(nlogn),固定1个数,二分找余数
3.双指针法O(n),对称的杨氏矩阵找2个数
4.哈希表O(n)+O(n),固定1个数,用哈希表找余数
- 哈希表是映射
- 后期用容器代替标记数组
- cin有超时可能,scanf读入
600.杨氏矩阵(满足特定单调性的二维数组 )
- 暴力O(m * n)
- 做法:以左下角为起点遍历,小于则右移,大于则上移,时间复杂度为o(m + n)
- 从右上角同理
- 两数之和的双指针,本质上是 杨氏矩阵 的左下角/右上角的 行数和列数
477.元音字母
- 扫一遍字符串,找到上一个元音字母位置,每碰到一个元音字母,更新答案
- 位置初始值设为-1
479.乒乓球
- 每行至多 25 个字母,最多有 2500 行
分析:假如都是一个人赢了,一共62500分,11分6000局结束,21分3000局结束,多少局是个变量,要统计E
480.保龄球
481.冰壶比赛
484.柱状统计图
485.均分纸牌
- 从左到右一个一个去保证,最后一个一定就是avg
503.独木舟
- 代码中最小+最大<=w时才 l++,否则只是ans++,r–
504.删数
- 若使数尽可能小,高位数必须小
遍历大整数的每两位,满足小数在前大数在后,不满足时删掉前面大数,记录删除的数
遍历完成后删除的数不够,从后往前删除掉剩余的位数 - char n[245];大整数不能用字符数组读入,用字符串读入
- 【注意】同理,字母组成的字符串求最小的字典序字符串
505.最大整数
- 按数字大小排序、按字典序排序都不对(举例96、121、12)
- a+b > b+a 表示前者连接后的字典序大于后者
506.打热水
- 结构体定义
- 排序从1开始
- 格式化输出
508.两人过河
-
四个人以上时,把 [最慢次慢] 送过桥有2种方式
- 手电传递效率最高,num[1]当工具人,最快最慢,最快,最快次慢,最快
- 过桥效率最高,最快次快,最快,最慢次慢,次快
-
4人以上有两种方法的原因是:num[0] < num[1] < num[i - 1], 但是 2num[1] 和 num[0] + num[i - 1] 的大小关系不确定
509.智力大冲浪
- 优先完成扣钱多的任务
- 尽可能靠后完成(每个任务都有截止时间,前面的时间任务会扎堆)
514.火柴棒等式
515.比例简化
516.奶牛碑文
- 明确对于每一个位置的O,前后各有多少个C、W
- 对于C用数组进行记录,对于W可以边统计边计算ans
- 对于寻找“PUSH”问题,参考2-sum问题的思想,时间复杂度o(n2)
517.三角形个数
- 求不一样的三角形,第一轮遍历最短边,第二轮遍历次短边
- 最短边长度1~n/3,最长是等边三角形
- 中等边长度i~(n-i)/2,最短等于最短边长度,不能比最短边短;最长等于剩余长度/2,否则就是最长边
519.优雅数
- 思路1:枚举L~R之间的每个数,判断是否是优雅数,数据范围1016明显不可行
- 思路2:枚举每个优雅数,判断是否是在L~R之间
- 优雅数:一个数是几,一堆数是几,数字长度,一个数在数字中的位置,然后构造