前言
仅记录学习笔记,如有错误欢迎指正。
题目:
leetcode的洗衣机问题
思路:
首先看能不能数量相等 总和%机器数量 = 0
然后分情况讨论:对于任何一个位置都有至少需要搬动n次,最大值就是答案!


题目2:

思路:
不能纠结单个点的移动,宏观思路去打印
记录左上角A和右下角B的位置,调用f()去打印以这两个点所构成的矩阵,
顺序从左到右,从上到下;之后A往右下角移动,B往左上角移动;
当A,B错开时,结束循环。


题目3:

思路:先分析外围的转动,对于一个N*N的矩阵,分为N-1组,每个点的运动轨迹

题目四:

思路:
先统计每个字符出现的次数,然后建立容量为k的小根堆,
当堆满时,再插入新的字符,和堆顶比较,次数如果比堆顶的次数大,
堆顶remove,新数据入堆

dp的空间压缩



题目五:

思路:先找出最大的数字,然后如果最大的数字在左边,相对右部分的最大值就是最后一个数字,右边同理
有点类似于贪心?
题目六:

思路:
首先判断两个字符是不是长度相等,不等return false;
例如 a= “1234” b =“2341”
让a = a + a;然后判断b是否为a的字串(KMP)
如果b是a的字串,就return true;
题目七:


题目八:
找工作问题
思路:
先把所有的工作按照难度从小到大,价值从大到小排列
之后删除相同难度下,价值小的工作,
以及工作难度大,价值还比工作难度小工作价值的工作
最后选择工作只要选择恰好匹配能力的工作就是回报最大的工作!



二叉树专题:
题目九:

思路:
对于每个二叉树节点,如果左右孩子都转化好为双向链表了
只要左孩子的尾,和有右孩子的头互相连接
之后左孩子的头,和有右孩子的尾作为整个链表表的头尾!

题目十:

改造:返回头结点
思路:对于head节点,判断以该节点为头是否是搜索二叉树,如果是,返回节点个数,不是返回-1
递归需要返回的信息:

- 可能性1 左子树为最大二叉搜索树
- 可能性2 右子树为最大二叉搜索树
- 可能性3 整颗树为最大二叉搜索树(左树最大值<head.val<右树最小值)


题目11:
子数组的最大累加和:


进阶:求子矩阵的最大累计和
思路:(压缩数组)
求0行的最大累计和,求出res
之后求0-1行的累计和,把0行对应位置的数字和1行的数字相加,去调用数组的最大累计和方法
和之前的res比较,取较大者。
题目12:
数组的最长子序列的长度
优化思路:
新增一个数据用来当前长度的最小结尾!ends
之后每次遇见新的数字,先去ends中找大于当前数的最左位置,
如果存在就更新为新的数字,因为新数字一定比之前的数字小
如果不存在,那就在当前i位置插入此数字
dp[i] = ends数组中所在位置i+1;


题目13:

思路 :
如123,只需要(1+2+3) %3 ==0 来判断是否能被3整除
用等差数列之和的公式来算和

题目14:

思路:
从左到右,对于i位置的值x,找到下标为x-1的位置,交换位置,
直到交换的位置等于i+1
开始下一轮;i++
输出x !=i+1的值





![[附源码]计算机毕业设计Python的项目管理系统(程序+源码+LW文档)](https://img-blog.csdnimg.cn/b54a69f9e468493c8c443b10c0a8e412.png)







![[附源码]Nodejs计算机毕业设计基于协同过滤技术的旅游景点购票系统Express(程序+LW)](https://img-blog.csdnimg.cn/b8603964a9d5416ca5608f6876877ea3.png)





