摘要:
滑动窗口法 思路: 由于给定words列表中每个单词长度是一样的,则我们可以通过单词个数乘以长度得到要比对子串的长度,然后在原始字符串不断滑动比对。找到每个子串后,可以将子串按照单词长度拆分变成数组,只需要比对拆分后的数组中元素是否和words中一致即可。 代码: class Solution: d 阅读全文
摘要:
移位减法 思路: 以十进制除法为例,我们可以通过不断用被除数减去除数直到为负值为止,记录减的次数即为对应结果。但是如果是一个很大的被除数和一个很小的除数,这个时候要循环减除数耗时间过长效率很低。计算机中记录数字采用二进制法,所以我们可以采用移位的办法来提高效率。这里假设除数被除数均为正数,我们对除数 阅读全文
摘要:
滑动窗口法 思路: 将要匹配的子串逐一和模式串比较。 ababcab abca 代码(利用Python自带字符串比对): class Solution: def strStr(self, haystack: str, needle: str) -> int: L, n = len(needle), 阅读全文
摘要:
双指针法 思路: 参考删除排序数组中的重复项 class Solution: def removeElement(self, nums: List[int], val: int) -> int: n = 0 for j in range(len(nums)): if nums[j] != val: 阅读全文
摘要:
快慢指针 思路: 快指针负责遍历,慢指针负责记录不同的值。 class Solution: def removeDuplicates(self, nums: List[int]) -> int: if not nums: return 0 i = 0 for j in range(len(nums) 阅读全文
摘要:
递归法 思路: 根据题意先判断节点数是否小于k,如果小于k,直接返回head。接着可以先从head起取k个节点进行翻转,然后对翻转后的链表尾部后面的节点进行递归调用。最后我们要考虑的是如何对k个节点进行翻转,可以采用迭代的方式两两(链表和新节点)翻转实现k个节点的翻转。 例如: 1 -> 2 -> 阅读全文
摘要:
迭代法 思路: 按顺序交换对应两个节点位置,交换前用一个节点充当要交换的节点的前驱,交换节点后更新前驱的位置。 代码: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val 阅读全文
摘要:
分治法 思路: 先设计好两个链表的有序合并,然后采用分治,每次合并两个链表,知道最后得到结果 代码1: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # s 阅读全文
摘要:
回溯法 思路: 对一个空字符串做加字符递归,每次加的可能性有两种,分别是‘( ’ 和 ‘ )’。这里递归里要进行的条件处理是: 1.如果剩余可用的左右括号都为零时,进行结算 2.如果右括号剩余数量小于左括号,则递归终止 3.如果剩余左括号(右括号)不为零,则原字符加上左括号(右括号),进行下一次递归 阅读全文
摘要:
迭代法 思路: 当L1和L2都不是空链表时,判断L1和L2哪一个链表的头节点的值更小,将较小值的节点添加到结果里。当一个节点添加到结果里后,将对应链表中的节点向后移一位。 代码: # Definition for singly-linked list. # class ListNode: # def 阅读全文