关于子数组和的问题,容易想到前缀和,但是一般前缀和还不足够优化时间复杂度。看到一个大于五个零的数组长度,我就知道这题应该只能O(n)了。然后首先想到双指针,指了半天发现中间有负数也就是左端点可能不行,但是左端点往右可能又行了,这种情况又不会处理了。这时候我想到了一种叫单调栈的东西,感觉这东西应该是能 ...
分类:
其他好文 时间:
2020-07-07 00:26:08
阅读次数:
66
问题描述 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 注意点:实例一中相交的节点是8而不是1。这里可以这样理解两个链表相交的节点是指节点本身相同,而不单单是节点的值同,还要地址相同。相交点是出题者自己定义的,实例一的intersectval是 8 说明出题者定义的两个链表中的 ...
分类:
其他好文 时间:
2020-07-05 17:26:30
阅读次数:
49
滑动窗口(双指针) 要在字符串S里找出包含字符串T的所有字符的最小子串(注意只需要包含字符串T的所有字符),不需要子串就是T。 所以我们可以扫描一遍字符串S,找出一个满足条件包含字符串T的所有字符串子串,然后根据长度是否比之前记录的字符串长度小,更新最小子串。 扫描字符串S需要用到滑动窗口(双指针) ...
分类:
其他好文 时间:
2020-07-05 00:42:27
阅读次数:
63
双指针法(尺取法),向前遍历一次对称轴,再向后遍历一次对称轴,就可通过已知的字符串得到其他所有不相交的字符串对,其中向后遍历等价于向前遍历反转的字符串。 ...
分类:
其他好文 时间:
2020-07-03 23:35:32
阅读次数:
46
双指针算法 模板 for (int i=0;i<n;i++) { while(j<i && check(i,j)) j++; /* 这里面 的 j 相比于两重循环,不用 回调 所以时间复杂度低 */ //具体问题的逻辑 } /* 常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) ...
分类:
其他好文 时间:
2020-07-03 19:09:58
阅读次数:
50
快排的划分,归并排序的归并,之后的kmp都是双指针算法。 双指针算法的两大类: 指向两个区间或指向一个区间 双指针算法一般是这样的 双指针算法运用了某些单调性质,可以将暴力的O(n^2)优化到O(n) 先来一个小的问题热身,输入一行若干个用空格隔开的单词,然后依次每行输出一个单词。具体应用看这里ht ...
分类:
其他好文 时间:
2020-06-30 10:56:43
阅读次数:
44
1. 二分法 二分查找也属于顺序表查找范围,二分查找也叫做折半查找,二分查找的时间效率为(logN) 二分查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功,如果给定值小于中间值,则查找数组的前半段,否则查找数组的后半段。 二分查找只适用于有序数组或者链 ...
分类:
编程语言 时间:
2020-06-29 23:01:59
阅读次数:
100
链接:LeetCode [Leetcode]5448. 判断路径是否相交 给你一个字符串 path,其中$path[i]$的值可以是 'N'、'S'、'E' 或者 'W',分别表示向北、向南、向东、向西移动一个单位。 机器人从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走 ...
分类:
其他好文 时间:
2020-06-28 22:48:47
阅读次数:
72
方法一 暴力枚举所有可能的子数组,也就是枚举子数组的所有开始下标和结束下标,计算子数组的和,如果子数组的和小于等于s,就更新最小长度。 class Solution { public: int minSubArrayLen(int s, vector<int>& nums) { if(nums.si ...
分类:
编程语言 时间:
2020-06-28 20:34:15
阅读次数:
50
地址 https://leetcode-cn.com/problems/minimum-size-subarray-sum/ 给定一个含有 n 个正整数的数组和一个正整数 s , 找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。 如果不存在符合条件的连续子数组,返回 0。 示例: ...
分类:
编程语言 时间:
2020-06-28 12:50:37
阅读次数:
68