- 博客(37)
- 收藏
- 关注
原创 day32//删除字符串中所有相邻重复项
注:可以拿字符串直接作为栈class Solution {public: string removeDuplicates(string s) { string st; for(int i =0;i<s.length();i++) { if(st.empty()||st.back()!=s[i])//当原字符串中的元素与新串最末尾元素不同时,压入字符串 { st.pus...
2022-05-23 10:47:05 152
原创 day31//有效的括号
用栈实现括号匹配问题:思路:运用栈后进先出的特点,用一个栈来存对应的右括号,遍历字符串,当出现相等右括号时,就pop(),若出现不相等右括号时,就reeturn falseclass Solution {public: bool isValid(string s) { stack<int> st; for (int i = 0; i < s.size(); i++) { if (s[i] == '(') st.pus...
2022-05-22 17:17:48 122
原创 day30//用队列实现栈
思想:用一个队列即可,用循环将队首元素放到队尾(除最后一个元素外),然后顺序出队列实现函数:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空class MyStack {public: queue<int> que;//创建队列 MyStack() { }//放入队列 void push(int x) { que.push(x)...
2022-05-21 12:11:21 98
原创 day29//用栈实现队列
思路:用两个栈实现,一个输入栈,一个输出栈实现函数:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空class MyQueue {public: stack<int> stIn; stack<int> stOut; MyQueue() { } //push() void push(int x) {...
2022-05-20 13:32:41 142
原创 day28//KMP求重复的子字符串
给定一个非空的字符串,检查是否可以通过由它的一个子串重复多次构成。class Solution {public://构造next数组(前缀表减1) void getNext (int* next, const string& s){ next[0] = -1; int j = -1; for(int i = 1;i < s.size(); i++){ while(j >= 0 && ...
2022-05-18 15:18:59 120
原创 day27//KMP实现strStr()函数
解题思路:(1)构造next数组:初始化 处理前后缀不相同的情况 处理前后缀相同的情况(2)使用next数组进行匹配代码如下:class Solution {public: void getNext(int* next, const string& s) { int j = -1; next[0] = j; for(int i = 1; i < s.size(); i++) { // 注意i从1开始 ...
2022-05-14 12:00:25 264
原创 day26//剑指Offer58-II.左旋转字符串
解题思路:反转区间为前n的子串 反转区间为n到末尾的子串 反转整个字符串方法一:class Solution {public: void swapNum(string &s, int start, int end) { for(int i = start,j = end;i<j;i++,j--) { swap(s[i],s[j]); } } string reverseLeft...
2022-05-13 16:59:47 68
原创 day25//翻转字符串里的单词
解题思路:1.移除多余空格2.将整个字符串反转3.将每个单词反转class Solution {public: // 反转字符串s中左闭又闭的区间[start, end] void reverse(string& s, int start, int end) { for (int i = start, j = end; i < j; i++, j--) { swap(s[i], s[j]); } ...
2022-05-13 16:43:12 48
原创 day23//反转字符串
第一种题型:设置两个指针分别从头部和尾部向中间靠拢,并且两两交换void reverseString(vector<char>& s) { for (int i = 0, j = s.size() - 1; i < s.size()/2; i++, j--) { swap(s[i],s[j]); }}第二种题型:给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。如果剩余字符少于...
2022-05-07 11:09:25 54
原创 day22//四数相加 ||
class Solution {public: int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) { unordered_map<int,int>map;//key:a+b的数值,value:a+b数值出现的次数 for(int a :...
2022-05-04 14:26:46 140
原创 day21//四数之和(双指针法)
在三数之和的基础上再套一层for循环,用来添加第四个数class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result;//二维容器 sort(nums.begin(), nums.end());//排序 for (int ...
2022-04-29 14:55:27 204
原创 day19//快乐数
什么是快乐数?对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。classSolution{public://定义一个方法用来获取一个数n的每个位数上的平方和intgetn(intn){intsum=0;w...
2022-04-25 11:57:07 56
原创 day18//输出两个数组的交集
哈希数据结构:unordered_setunordered_set 容器,可直译为“无序 set 容器”。即 unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会,unordered_set 容器不能存放重复的元素。classSolution{public:vector<int>intersection(vector<int>&nums1,ve...
2022-04-24 13:09:16 745
原创 day17//哈希表的简单应用
有效的字母异位词、赎金信什么是字母异位词?给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例1: 输入: s = "anagram", t = "nagaram" 输出: true示例 2: 输入: s = "rat", t = "car" 输出: falseclassSolution{public:boolisAnagram(strings,stringt){intrecord[26]={0...
2022-04-23 11:39:22 437
原创 day16//环形链表
主要分为两步:第一步:判断是否有环(fast指针一次走两个节点,slow指针一次走一个节点,当同时指向一个节点时,有环)第二步:找到环的入口节点(一个指针从头节点开始走,一个指针从第一次相遇节点走,同时一个节点一个节点走,再次相遇的节点即为环入口节点)(本题主要考察思维,代码比较简洁,以下讲解细节部分不太具体,如有不懂的,可参考题解力扣https://leetcode-cn.com/problems/linked-list-cycle-ii/)classSolution{public..
2022-04-22 22:32:08 303
原创 C++访问声明
为什么用访问声明?对于私有继承,基类的公有成员函数变成了派生类的私有成员函数,这时外界就无法利用派生类的对象直接调用基类的成员函数,而只能通过调用派生类的成员函数间接地调用基类的成员函数。访问声明的作用:把基类的保护成员或公有成员直接写至私有派生类定义式中的同名段中,同时给成员名前冠以积累名和作用域标识符::eg:class A{public:A(int x1){x = x1;}void print(){cout<<x;}private:int x
2022-04-21 21:28:18 1469
原创 day14//删除链表的倒数第N个节点
方法一:暴力法(先遍历得到长度,再用长度减去N即可获得需要删除节点前的节点位置)classSolution{public:ListNode*removeNthFromEnd(ListNode*head,intn){ListNode*dummyhead=newListNode(0);dummyhead->next=head;ListNode*cur=head;intm=0...
2022-04-19 22:38:35 352
转载 day11//设计链表(设虚拟头节点)
classMyLinkedList{public://定义链表节点结构体structLinkedNode{intval;LinkedNode*next;LinkedNode(intval):val(val),next(nullptr){}};//初始化链表MyLinkedList(){_dummyHead=newLinkedNode(...
2022-04-15 23:09:33 449 1
原创 day10//while(i--)和while(--i)
以i--为例:int i = 2;while(i--)//执行了2次{cout<<i;}i++也类似--i:int i = 2;while(--i)//执行了1次{cout<<i;}小记:符号在前,则加加或减减在前 符号在后,则加加或减减在后...
2022-04-14 22:41:35 160
转载 unity2D//终极跳跃(可实现二段跳)
using System.Collections;using System.Collections.Generic;using UnityEngine;public class FinalMove : MonoBehaviour{ private Rigidbody2D rig; private Collider2D coll; private Animator anim; // public Collider2D discoll;//用于下蹲关闭头部碰撞体 ...
2022-04-13 22:54:49 524
原创 day8//c++螺旋矩阵
classSolution{public:vector<vector<int>>generateMatrix(intn){vector<vector<int>>res(n,vector<int>(n,0));//使用vector定义一个二维数组intstartx=0,starty=0;//定义每循环一个圈的起始位置intloop=n/2...
2022-04-12 22:29:39 139
原创 day7//INT_MAX
INT_MAX是一个很大的数,一般用在数组中求最小值。在开头预设一个min,并将其赋值为INT_MAX,再让每一个数组中的元素与之比较int min = INT_MAX;for(arr[i]<min){min = arr[i];}
2022-04-11 09:01:37 276
原创 day6//滑动窗口(求子数组长度)
classSolution{public:intminSubArrayLen(inttarget,vector<int>&nums){intresult=INT_MAX;//初始化长度inti=0;intsublenth=0;intsum=0;for(intj=0;j<nums.size();j++){sum+=nums[j]...
2022-04-09 23:09:33 42
原创 day4//vector中sort()的使用
sort(nums.begin(),nums.end())从小到大排序class Solution {public:vector<int> sortedSquares(vector<int>& nums) {int size = nums.size();int j=0;for(int i =0;i<size;i++){nums[j]=nums[i]*nums[i];j++;}sort(nums.begin(),nums....
2022-04-07 22:20:29 248
原创 day3//退格字符#
退格字符会删除自己和前一个字符应用例子:比较两个含退格字符串是否相等思想:先创建一个栈用来装不为‘#’的值,然后每个#弹出一个字符,最后再比较两个不含#的字符串
2022-04-06 18:20:08 197
原创 day2//二分法(左闭右闭)获得左右边界
classSolution{public:vector<int>searchRange(vector<int>&nums,inttarget){intleftBorder=getLeftBorder(nums,target);intrightBorder=getRightBorder(nums,target);//情况一if(leftBorder...
2022-04-05 18:03:47 53
转载 每日收获//day1 二分法(左闭右闭)
class Solution {public: int search(vector<int>& nums, int target) { int left = 0; int right = nums.size() - 1; // 定义target在左闭右闭的区间里,[left, right] while (left <= right) { // 当left==right,区间[left, right]依然有效,所以用 <.
2022-04-03 11:38:27 29
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人