左(9)--题目讲解

前言

仅记录学习笔记,如有错误欢迎指正。

题目:

leetcode的洗衣机问题

思路:
首先看能不能数量相等 总和%机器数量 = 0
然后分情况讨论:对于任何一个位置都有至少需要搬动n次,最大值就是答案!
在这里插入图片描述

在这里插入图片描述

题目2:

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

题目3:

N*M的区域,从i,j出发,走k步(上下左右等概率),越界就失败,成功的次数为多少?
思路:先分析外围的转动,对于一个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的值
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值