中级班3
题目1:leetcode 517

思路:业务题 分析情况
现在假设在i点位置,有一下情况: 每次扔 只能扔一个,接受 可以从两边一起接受
1) 左边衣服多与需求衣服,右边衣服数量多于需求衣服:至少需要{左边数量,和右边数量} 最大值
2) 左边多,右边少:至少需要{左边数量,和右边数量} 最大值
3)左边少,右边多:至少需要{左边数量,和右边数量} 最大值
4)左右都少, 扔的次数 = 左右两边次数+一起

题目2:

思路:宏观的写个函数打印一个斜线的数据


题目3:

思路: 实现一个函数 打印 左上角和右下角所在的行和列, 每次更新左上角和右下角的位置即可

不同情况:左上角和右下角 在同一行,或者在同一列,或者 普通情况

题目4:

思路:同样是函数,只不过交换某些点 ,要分组

coding:

题目5:650

思路: 把N分解为指数因子,指数 只能调用2操作 ,所以 当时指数时,为N-1此操作
题目6:

思路: 用堆,
用map创建词频表,根据map创建大根堆

题目7:57?
创建一个结构,这个结构可以接受字符串,并且实现一个方法:打印频率最高的前N个字符串
思路:手写 堆;; 进来数据看有没有在堆上 ,没有看堆满没满,没满就去,否则看数量 ,数量小于堆的小根堆则 不进去,但是在堆位置map标志位-1,
每进来一个词频都要现在词频表等级更新数量,

coding



第四课:

思路:创建两个栈 一个是数据栈一个是辅助栈,每当进来个元素都要添加到数据栈,然后比较元素的大小和辅助栈的大小谁小压谁

题目2

用两个栈实现队列:
两个栈 ···
队列实现栈:
两个队列:正常入队列当要返回数据时把她前面的数据都加入另个队列 弹出最后一个


当 某个位置只依赖上面和左面时 可以用压缩技巧 轮着 更新 一个数组

思路:只观察自己上面的格子,记住自己左侧的最大值和自己 右侧的最大值 谁小 用谁-当前的值,得到的差就是当前值能够装的最大值水 ,, 双指针遍历 到结束

题目:

思路: 题目的意思是 左右两个最大值相减, 解题流程是遍历数组求最大值,这个最大值有两种可能 一种是倍划分左边一种是被划分右边,
划分左边时: 最大值 减去最后一个数
划分右边时:最大值减去第一个数

思路: 生成a+a 大字符串 判断b是不是大字符串的字串
题目:
咖啡杯问题:
给一个数组,arr=[3,2,1] 表示 第一个咖啡机时间时3,第二个咖啡机时间是2...,每个咖啡机每次只能冲一杯咖啡
现在有N个人要咖啡,每人只喝一杯,人喝咖啡时要先去该咖啡机前如果有人则等待,没人则喝咖啡,并且只有一台洗咖啡杯子的机器,且该机器洗完一个杯子要花上a的时间,
咖啡杯不洗,自然挥发也能变干净的时间b
问从第一杯开始到所有咖啡杯都干净 的最短时间
小根堆:得到咖啡的时间 也是从这个时间要去洗的时间,(3,3,)表示 从3时刻可以做咖啡,然后做一杯咖啡需要的时间 排队的序是 3+3

洗咖啡时的:

题目:

浙公网安备 33010602011771号