摘要:
本题思路简单清晰,即判断字符串是否为回文串,若否,则判断其 s[low+1 : high] 与 s[low : high-1] 两个子串是否为回文串,若否则返回非。 我的题解代码如下,leetcode上运行时间20ms,内存占用8.6MB,时间复杂度O(n),空间复杂度O(1). bool comp 阅读全文
摘要:
在本题中,若我们从前往后遍历数组,那么此后满足要求的解的每一个状态都等于max{state[i-1]*nums[i], nums[i]},这就构成了一个状态转移的关系,但同时由于乘法负负得正的特殊性,因此我们除了记录正值的最大值,同时也需要记录负值的最小值,即有两组状态转移方程: 1. maxF[i 阅读全文
摘要:
这是一道简单的子树匹配问题,可以直接用深度优先搜索来完成,递归地比较每一个子树是否与给定子树匹配就可以了。 我的题解代码如下,他LeetCode不给过,我觉得逻辑上没什么问题。 /** * Definition for a binary tree node. * struct TreeNode { 阅读全文
摘要:
本题有两种思路求解,一种是利用递归,逐层验证该节点是否符合BST的要求,空间复杂度较大。第二种是利用中序遍历二叉搜索树,判断序列是否升序来判断是否为二叉搜索树。 我的题解代码如下,leetcode上运行时间16ms,内存占用18.3MB /** * Definition for a binary t 阅读全文
摘要:
本题的要求是返回跳跃的最小步数,在跳跃中能够跳的最大位置为数组中该位置所对应的元素的值,即在上面例子中nums[0]能够跳跃的最大步数为两步即从nums[0]可以跳跃到nums[1]或nums[2]。 这里显然我们需要尽可能地选择跳跃步数最大的跳跃方式,跳跃之后记录该跳跃的位置,在当前位置 i 和上 阅读全文
摘要:
这类题目的往往可以采用暴力穷举的办法,但其时间复杂度过高。因此,这里采用动态规划的方法求解。设定一个状态集合dp[numsSize]与nums[numsSize]一一对应,对dp[0]初始化为nums[0],之后的每一个状态都赋值为max{nums[i], nums[i]+dp[i-1]},这里的意 阅读全文
摘要:
# 解题思路 对于无重复最长子串这类问题,通常可以采用两种解决方案: (1)滑动窗口法,使用首尾两个指针来确定字符串范围 (2)用数组实现hashmap法 下面对两种解法分别进行探讨。 # 滑动窗口法 对于滑动窗口法需要设置两个指针,在对字符数组进行遍历的过程中每移动一个字符就要使用一次遍历判断一次 阅读全文
摘要:
本题中给定两个有序链表让我们进行重新连接,这里我们可以将其看作对两条链表重组的过程,而由于是有序链表,其连接必定是从左向右进行,我们设定两个指针,一个指针做头节点,另一个用来做追踪最小元素,在两个链表的遍历过程中先一一对比,较小的元素处链表指针后移一位,追踪指针指向该较小的节点,另一条链表的链表指针 阅读全文
摘要:
对题目进行分析可以知道对一个数字进行isHappy判断其可能有两种情况,一个使收敛到1另一个是在一组数中陷入循环。因此我们就通过快慢指针,让慢指针一次移动一位,快指针一次移动两位,若是环形结构则两者必然在某一时刻会相遇,若收敛,快指针一定先一步收敛到1,至于发散的可能性,受制于进制和位数,在试过几个 阅读全文
摘要:
由题意可得这是一个山峰形数组的查找类问题,对于山峰形数组,我们可以将其看作是递增和递减的两个有序数组的合并,而对于单一的有序数组,可以很容易的使用二分查找。因此,解题思路很清晰,即找出最高峰,以最高峰为界划分成前后两个有序数组,对两个数组分别二分查找,最后返回题目需要的结果。 而在这样的步骤中,求最 阅读全文