- 博客(10)
- 收藏
- 关注
原创 无重复字符的最长子串(滑动窗口)
思路:两个指针一个左指针,一个右指针组成滑动窗口的边界,遍历字符串,当当前字符在窗口内,左指针指向窗口中与当前字符重复的后一个位置;否则右指针向右移动,直到遍历结束。 int lengthOfLongestSubstring(string s) { int max1 = 0,i = 0,j = -1; //max1为子串最大长度 ,j为标志位。 int first = 0, end = 1; //左右指针组成滑动窗口(右边界为end-1)while(end < s.length()..
2021-11-15 22:06:51
438
原创 哈希表(学习1)
一、有效的字母异位词思路:建立数组存放26个字母出现次数,把第一个字符串每个字符出现的次数记录下来,减去第二个字符串每个字母出现的次数,若两个字符串每个字母的次数相同,则数组中每个值均为0;若某值不为0,则表示该字母出现次数不同,返回false。 bool isAnagram(string s, string t) { int a[26] = {0};//初始化 for(int i = 0;i < s.length(); i++) { a[s[i.
2021-11-12 18:36:05
464
原创 两两交换链表中的节点
ListNode* swapPairs(ListNode* head) {ListNode* prevhead = new ListNode(0);prevhead -> next = head;ListNode*cur = prevhead; //设置一个空的节点相当于前驱节点while (cur->next&&cur->next->next) { ListNode* second = cur -> next; //准备交换的第一个节...
2021-11-11 19:35:55
436
原创 反转链表(指针+递归)
一、指针 ListNode* reverseList(ListNode* head) { ListNode* prev = nullptr;//前驱结点开始为空 ListNode* form; //后驱结点 ListNode* cur = head; while (cur) { form = cur -> next; //先存每个结点的下一个结点。 cur -> next = prev;//将当前结点指向前一个完成反转。 prev = c..
2021-11-11 18:47:44
137
原创 两数之和-输入有序数组(双指针)
双指针法一个头指针first,一个尾指针second,由于题目一定有解,不考虑无解情况。当目标值大于两个指针指向的数时,即numbers[first]+numbers[second]>target,此时,任何比numbers[first]大的数(下标大于first)+numbers[second]都不可能是解,因此尾指针second左移;同理numbers[first]+numbers[second]<target时,任何比numbers[second]小的数+numbers[fir..
2021-11-11 17:24:24
235
原创 螺旋矩阵
螺旋矩阵如图,数字代表执行的顺序,相同颜色为一组。1 1 1 2 4 5 6 2 4 8 7 2 4 3 3 3 vector<vector<int>> generateMatrix(int n) { int sx, sy, count = 1; vector<vector<int>> result(n,vector<int>(n)); ..
2021-11-10 22:17:32
111
原创 长度最小子数组(滑动窗口)
滑动窗口(双指针变形)双指针都从头开始,当不满足条件时,右指针不断移动,直到符合条件;记录此时两指针间数组长度,该长度为窗口大小,此时左指针开始移动,直到不满足条件;重复该过程,并比较每次满足条件时的窗口大小,直到右指针出界。 int minSubArrayLen(int target, vector<int>& nums) {int left = 0, right = 0, result = INT_MAX, sum = 0,length = 0;int n = nu..
2021-11-10 21:20:54
113
原创 有序数组的平方(暴力法+双指针)
一、暴力法 vector<int> sortedSquares(vector<int>& nums) { for(int i=0; i < nums.size(); i++) { nums[i] *= nums[i]; } sort (nums.begin(),nums.end()); return nums; }时间复杂度(n+logn),n为for循环遍历一遍,nlogn是sort函数二、双指针头指针从头开...
2021-11-10 20:50:14
394
原创 排序数组中查找元素的第一个和最后一个位置
vector<int> searchRange(vector<int>& nums, int target) {int i,x,y,n=nums.size();for( i=0;i<n;i++){if(target==nums[i]){//找到了第一个 x=i; y=i; while(target==nums[y])//由于是排序数组若存在一定连续 { y++; if(y==n) ret...
2021-11-10 20:17:25
235
原创 搜索插入位置(暴力法与二分法)
4种可能性1.最小插在头2.最大插在尾3.大小在两个元素之间,插在较大元素位置4.等于某元素 int searchInsert(vector<int>& nums, int target) {//3种可能性//第一种插在两个个元素中//找到某个元素//插在队尾for(int i=0;i<nums.size();i++){ if(target<=nums[i])return i;}return nums.size();}..
2021-11-10 19:08:42
438
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人