
LeetCode刷题
weixin_45794299
这个作者很懒,什么都没留下…
展开
-
leetcode-44. 通配符匹配-支持 ‘?‘ 和 ‘*‘ 的通配符匹配
一、题目二、思路三、代码class Solution {public: bool isMatch(string s, string p) { int m = s.size(); int n = p.size(); vector<vector<int>> dp(m + 1, vector<int>(n + 1)); dp[0][0] = true; for (int i原创 2022-04-24 10:14:17 · 1769 阅读 · 0 评论 -
leetcode-1721. 交换链表中的节点-双指针方式找到两个节点
一、题目二、思路1、采用双指针方式找到两个节点2、交换两个节点的值三、代码class Solution {public: ListNode* swapNodes(ListNode* head, int k) { ListNode *fast=head; ListNode *cur=head; for(int i=0;i<k-1;++i){ cur=cur->next; }原创 2022-04-23 23:07:41 · 1462 阅读 · 0 评论 -
leetcode-2095. 删除链表的中间节点-双指针-慢指针新建一个头指针(要删除下一个)
一、题目二、思路1、双指针,快指针指向空时,慢指针指向中间节点2、慢指针新建一个头指针,方便删除下一个三、代码class Solution {public: ListNode* deleteMiddle(ListNode* head) { ListNode *fast=head; ListNode *slow=new ListNode(0); ListNode *node=slow; slow->next=head;原创 2022-04-23 16:01:55 · 700 阅读 · 0 评论 -
leetcode-剑指 Offer 46. 把数字翻译成字符串-0到25翻译成子母,有几种不同的法翻译
一、题目二、思路1、采用dfs2、传入加判断条件,比如不能超过25,传两个数时第一个数不能为0三、代码class Solution {public: int Count; int translateNum(int num) { Count=0; string str=to_string(num); int len=str.length(); dfs(str,len,0); return Count;原创 2022-04-23 14:37:46 · 179 阅读 · 0 评论 -
leetcode-剑指 Offer II 119. 最长连续序列的长度(连续序列是指0123456一直连续,数组顺序可以是乱的)
一、题目二、思路1、添加到哈希容器中2、遍历,找到当前数的前一个,如果不在哈希容器中,就从当前数while遍历到后面,找到长度三、代码class Solution {public: int longestConsecutive(vector<int>& nums) { unordered_set<int> dic; int size=nums.size(); for(int i=0;i<size;++原创 2022-04-21 23:03:21 · 354 阅读 · 1 评论 -
leetcode-牛客-最长上升子序列(三)-最长递增子序列(求出具体的递增子序列,不是个数)-动态规划
一、题目二、思路1、动态规划,在求出最长递增子序列个数的基础上,找到具体的值2、先求出长度3、找到dp[i]等于当前长度的值,添加到输出容器三、代码class Solution {public: /** * retrun the longest increasing subsequence * @param arr int整型vector the array * @return int整型vector */ vector<int&原创 2022-04-21 22:32:08 · 260 阅读 · 0 评论 -
leetcode-剑指 Offer II 095. 最长公共子序列--求长度
一、题目二、思路二维动态规划dp[i][j]表示的text1的i-1和text2的j-1之间的公共子序列的长度三、代码class Solution {public: int longestCommonSubsequence(string text1, string text2) { int len1=text1.length(); int len2=text2.length(); vector<vector<int>&原创 2022-04-21 20:32:30 · 196 阅读 · 0 评论 -
leetcode-543. 二叉树的直径-最长路径的长度减一
一、题目二、思路1、和最长路径相似,不一定从根节点开始2、指的是这条路径上有多少个节点,再减去1三、代码class Solution {public: int ans; int diameterOfBinaryTree(TreeNode* root) { ans=1; depth(root); return ans-1; } int depth(TreeNode* root){ if(root==n原创 2022-04-20 15:57:53 · 379 阅读 · 0 评论 -
leetcode-119. 杨辉三角 II-返回「杨辉三角」的第 rowIndex 行。
一、题目二、思路三、代码class Solution {public: vector<int> getRow(int rowIndex) { vector<vector<int>>res(rowIndex+1); for(int i=0;i<=rowIndex;++i){ res[i].resize(i+1); res[i][0]=1; res[原创 2022-03-24 15:31:05 · 947 阅读 · 0 评论 -
leetcode-118. 杨辉三角-生成「杨辉三角」的前 numRows 行
一、题目二、思路res[i].resize(i+1)重设元素个数三、代码class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>>res(numRows); for(int i=0;i<numRows;++i){ res[i].resize(i+1);原创 2022-03-24 11:54:46 · 1152 阅读 · 0 评论 -
01背包-完全背包问题--每个物体可以多次选取
一、题目有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。二、思路三、代码// 先遍历物品,在遍历背包void test_CompletePack() { vector<int> weight = {1, 3, 4}; vector<int> value = {15, 20, 30}; int bagWe原创 2022-03-24 11:01:00 · 783 阅读 · 0 评论 -
01背包问题-每个物品只能选一次-动态规划dp[i][j]
一、题目有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。二、思路三、代码void test_2_wei_bag_problem1() { vector<int> weight = {1, 3, 4}; vector<int> value = {15, 20, 30}; int bagWeight = 4; /原创 2022-03-24 10:33:33 · 1955 阅读 · 0 评论 -
leetcode-链表中环的入口节点-第一次判断是否有环,第二次两个指针从(head,fast)同时开始遍历
一、题目题目描述对于一个给定的链表,返回环的入口节点,如果没有环,返回null拓展:你能给出不利用额外空间的解法么?二、思路1、一个快指针、一个慢指针2、再跑第二次3、注意fast!=NULL && fast->next!=NULL,如果没有后面那个,将会报出越界的错误三、代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *原创 2022-03-24 09:39:14 · 709 阅读 · 0 评论 -
leetcode-349. 两个数组的交集--公共部分--通过两个set数组去重,判断是否在set容器里
一、题目二、思路1、通过两个set数组去重2、判断是否在set容器里三、代码class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { int size1=nums1.size(); int size2=nums2.size(); set<int>dic1原创 2022-03-21 22:12:26 · 384 阅读 · 0 评论 -
leetcode-搜索旋转数组中指定值--返回指定值下标--有重复元素
一、题目二、思路三、代码class Solution {public: int search(vector<int>& arr, int target) { int size=arr.size(); int left=0,right=size-1; int mid=0; while(left<=right){ mid=(left+right)/2; /原创 2022-03-21 21:59:18 · 345 阅读 · 0 评论 -
leetcode-81. 搜索旋转排序数组 II--查找指定值在不在--bool--有重复的元素
一、题目二、思路三、代码class Solution {public: bool search(vector<int> &nums, int target) { int n = nums.size(); if (n == 0) { return false; } if (n == 1) { return nums[0] == target;原创 2022-03-21 20:43:56 · 537 阅读 · 0 评论 -
leetcode-153. 寻找旋转排序数组中的最小值-平移数组--不含重复元素
一、题目二、思路三、代码class Solution {public: int findMin(vector<int>& nums) { int low = 0; int high = nums.size() - 1; while (low < high) { int pivot = low + (high - low) / 2; if (nums[pivot]原创 2022-03-20 19:59:03 · 269 阅读 · 0 评论 -
leetcode-154. 寻找旋转排序数组中的最小值 II--平移数组--有重复的数组
一、题目二、思路三、代码class Solution {public: int findMin(vector<int>& nums) { int low = 0; int high = nums.size() - 1; while (low < high) { int pivot = low + (high - low) / 2; if (nums[pivot]原创 2022-03-20 19:48:33 · 756 阅读 · 0 评论 -
leetcode-189. 轮转数组-旋转数组-平移数组
一、题目二、思路三、代码一class Solution {public: void rotate(vector<int>& nums, int k) { int size=nums.size(); k=k%size; reverse(nums.begin(),nums.end()); reverse(nums.begin(),nums.begin()+k); reverse(nums.be原创 2022-03-20 19:14:48 · 568 阅读 · 0 评论 -
leetcode-Lazada-输入多组数据,查找范围内的质数个数
一、题目输入多组数据,查找范围内的质数二、思路1、找到一个最大的右范围2、设置一个dp[maxnum+1],1表示是质数,0表示非质数;初始化都为13、当一个数是1,即为质数,那么从ii开始,每加一个i都是非质数,置为0for(int j=ii;j<=right;j+=i){dp[j]=0;}4、统计dp数组,动态规划ans[i]三、代码#include <iostream>#include <string.h>#include <string&原创 2022-03-18 11:02:57 · 467 阅读 · 0 评论 -
leetcode-剑指 Offer 54. 二叉搜索树的第k大节点
一、题目二、思路先遍历右子节点,在中,再左,。这样就从大到小排序了。十分简单。需要注意的是k值需要提出来,不要作为参数传,因为会导致数据不同步。三、代码class Solution { int max,k; public int kthLargest(TreeNode root, int k) { this.k = k; maxValue(root); return max; } void maxValue(Tree原创 2022-03-16 14:56:12 · 357 阅读 · 0 评论 -
leetcode-230. 二叉搜索树中第K小的元素-中序遍历
一、题目二、思路1、采用二叉树的中序遍历,先把所有的左子树添加进去,再开始计数到k三、代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int原创 2022-03-16 14:52:49 · 1166 阅读 · 0 评论 -
LeetCode 694. 不同岛屿的数量(DFS+set)
一、题目二、思路请你计算这个网格中共有多少个形状不同的岛屿。两个岛屿被认为是相同的,当且仅当一个岛屿可以通过平移变换(不可以旋转、翻转)和另一个岛屿重合。记录开始BFS或DFS的起点,后续点跟起点做差,存储路径到set中去重,返回 set 的大小三、代码class Solution { vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}}; int m, n; set<vector&原创 2022-03-16 09:52:32 · 310 阅读 · 0 评论 -
leetcode-剑指 Offer 32 - III. 从上到下打印二叉树 III-之字形打印二叉树
一、题目二、思路打印奇数层: 从左向右 打印,先左后右 加入下层节点;(根节点为奇数层)打印偶数层: 从右向左 打印,先右后左 加入下层节点;三、代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), righ原创 2022-03-13 19:34:44 · 1624 阅读 · 0 评论 -
LeetCode-面试题32 - I. 从上到下打印二叉树-层序遍历二叉树-从左到右
一、题目二、思路直接用层序遍历即可三、代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vecto原创 2022-03-13 18:46:34 · 510 阅读 · 0 评论 -
vector扩容时间复杂度
一、题目考虑vector每次内存扩充两倍的情况,插入n个数二、时间复杂度时间复杂度:扩容log(n)次,扩容时间复杂度2N,拷贝时间复杂度N,总的时间复杂度3N次扩充引起的元素拷贝次数为:原创 2022-03-13 12:01:13 · 1583 阅读 · 2 评论 -
leetcode-215. 数组中的第K个最大元素-topk-数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
一、题目二、思路三、代码class Solution {public: int findKthLargest(vector<int>& nums, int k) { int size=nums.size(); priority_queue<int>Que; for(int i=0;i<size;++i){ Que.push(nums[i]); } w原创 2022-03-13 11:14:13 · 596 阅读 · 0 评论 -
leetcode-347. 前 K 个高频元素-topk
一、题目二、思路1、用unordered_map容器统计个数2、将统计好的个数放入到优先队列,按个数排序3、从优先队列取出k个数到输出数组res中三、代码struct cmp{ bool operator()(pair<int,int>&a,pair<int,int>&b){ return a.first<b.first; }};class Solution {public: vector<int原创 2022-03-13 11:08:46 · 8617 阅读 · 0 评论 -
auto和decltype的配合使用
auto和decltype的配合使用template<typename T, typename U>auto add(T t, U u) -> decltype(t + u) { return t + u;}原创 2022-03-11 09:02:39 · 194 阅读 · 0 评论 -
LeetCode-27. 移除元素-原地删除数组中指定值的元素-双指针
一、题目二、思路二、思路1、双指针2、右指针不等于时,左右指针同时往右移动;相等时,移动右指针三、代码class Solution {public: int removeElement(vector<int>& nums, int val) { //双指针解法 int left=0; int size=nums.size(); for(int i=0;i<size;++i){原创 2022-03-10 19:57:35 · 197 阅读 · 0 评论 -
leetcode-225. 用队列实现栈
一、题目二、思路三、代码class MyStack {public: queue<int>s,t; MyStack() { } void push(int x) { t.push(x); while(!s.empty()){ t.push(s.front()); s.pop(); } swap(s,t); }原创 2022-03-10 17:05:15 · 7706 阅读 · 0 评论 -
leetcode-232. 用栈实现队列-peek返回队列首个元素
一、题目二、思路三、代码class MyQueue {public: stack<int>s; stack<int>t; MyQueue() { } void push(int x) { while(!t.empty()){ s.push(t.top()); t.pop(); } s.push(x); }原创 2022-03-10 16:50:34 · 7588 阅读 · 0 评论 -
单例模式(饿汉模式、懒汉模式)-设计模式
1、单例模式(饿汉模式)#include <iostream>using namespace std;class single{private: static single* p; single(){} ~single(){}public: static single* getinstance();};single* single::p = new single();single* single::getinstance(){ return p;}int原创 2022-03-09 21:21:24 · 216 阅读 · 0 评论 -
手写string类-class
class String{private: char *data;public: //可以充当默认构造函数 String(const char *p = nullptr) { if (p == nullptr) { data = nullptr; } else { data = new char[strlen(p) + 1];原创 2022-03-08 22:52:20 · 290 阅读 · 0 评论 -
strcpy、strlen()、strcat(拼接)、strcmp、strstr、memcpy()
一、strcpychar *mystrcpy(char *str1,char *str2){ if(str1==NULL || str2==NULL){ return NULL; } char *temp=str1; while(*str2!='\0'){ *str1=*str2; str1++; str2++; } *str1='\0'; return temp;}int mai原创 2022-03-08 22:35:34 · 189 阅读 · 0 评论 -
socket编程-服务端-客户端
//创建套接字int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);AF_INET:地址族,代表IPV4SOCK_STREAM:面向流IPPROTO_TCP:TCP协议//将套接字和IP、端口绑定 struct sockaddr_in serv_addr; //初始化结构体对象 memset(&serv_addr, 0, sizeof(serv_addr)); //为结构体对象赋值 se原创 2022-03-08 21:54:29 · 157 阅读 · 0 评论 -
多线程交替打印1~10数字
#include <iostream>#include <string.h>#include <string>#include <vector>#include <map>#include <stack>#include <queue>#include <algorithm>#include <unordered_map>#include <list>#include原创 2022-03-08 20:09:51 · 589 阅读 · 0 评论 -
leetcode-面试题 01.06. 字符串压缩
一、题目二、思路1、遍历一遍,ch表示字符,cht=1表示该字符的数量2、注意判断为空或者为1的情况3、注意添加最后一个字符到压缩字符串中三、代码class Solution {public: string compressString(string S) { string str=""; int len=S.length(); if(S.empty() || len==1){ return S;原创 2022-03-07 18:44:53 · 185 阅读 · 0 评论 -
leetcode-45. 跳跃游戏 II-使用最少的跳跃次数到达数组的最后一个位置。
一、题目二、思路思想就一句话:每次在上次能跳到的范围(end)内选择一个能跳的最远的位置(也就是能跳到max_far位置的点)作为下次的起跳点 !三、代码class Solution {public: int jump(vector<int>& nums) { int size=nums.size(); int step=0; int end=0;// 上次跳跃可达范围右边界(下次的最右起跳点) int原创 2022-03-07 09:41:09 · 4372 阅读 · 0 评论 -
leetcode-面试题 08.04. 幂集-幂集。编写一种方法,返回某集合的所有子集。解集不能包含重复的子集。-dfs+回溯
一、题目二、思路dfs+回溯三、代码class Solution {public: vector<vector<int>>res; vector<int>temp; vector<vector<int>> subsets(vector<int>& nums) { int size=nums.size(); dfs(nums,0,size); re原创 2022-03-06 23:45:18 · 151 阅读 · 0 评论