自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(240)
  • 收藏
  • 关注

原创 CAP 理论:分布式场景下我们真的只能三选二吗?

今天让我们来聚焦于分布式系统架构中的重要理论——CAP理论。在分布式系统中,可用性和数据一致性是两个至关重要的因素,而CAP理论就是在这两者之间提供了一种权衡的原则,帮助我们在设计分布式系统时进行决策。同时,CAP理论的出现也深刻影响着分布式系统的发展和设计。但是在当今这个时间点,业界对于CAP理论的理解和应用也在不断地发生变化,我们一起探讨下这些新的思考和认识

2024-03-16 13:26:01 1109 1

原创 二维数组数组名的使用

#include <iostream>using namespace std;#include<stdio.h>int test(){ int a[2][4]={{3,6,9,12},{15,18,21,24}}; cout<<*(*(a+1)+2)<<endl;//21 return a[1][1]+*(a[1]+2)+*(*(a+1)+2);//18+21+21}int main(){ /*测试一:

2021-10-17 18:30:16 765

原创 合并排序的数组

从后向前三指针时间复杂度:O(m + n)空间复杂度:O(1)class Solution {public: void merge(vector<int>& A, int m, vector<int>& B, int n) { int a=m-1;//A数组索引 int b=n-1;//B数组索引 int l=m+n-1;//结果数组索引 while(a>=0&&b&gt.

2021-09-27 15:47:25 341

原创 字符串相乘(大数相乘)

1、思路(字符串模拟) O(n*m)一、普通竖式以num1 = 123 , num2 = 456为例:我们遍历 num2 每一位与 num1 进行相乘,将每一步的结果进行累加,在这个过程如果相乘或者相加的结果大于等于10 ,我们都要去满10进位,如下图所示:这样模拟普通竖式计算的方法较为复杂,我们可以考虑优化版的竖式计算。二、优化竖式其实在相乘或者相加计算过程的每一位,我们可以考虑先不去满10进位,等到计算完所有的相乘结果以后,最终将其加到一块,再去满10进位 ,最后的结果和普通竖式 一样,但.

2021-09-26 17:36:38 521

原创 不修改数组找出重复的数字

在长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。思路:一、把1~n的数字从中间的数字m分成两部分,前面一半为1 ~m,后面一半为m+1 ~ n;二、若1 ~ m的数字的数目超过m,那么这一半的区间里一定包含重复的数字;否则另 一半m+1 ~n的区间里一定包含重复的数字。三、继续把包含重复数字的区间一分为二,直到找到一个重复的数字。时间复杂度:O(nlog(n))空间复杂度:O(.

2021-09-25 17:08:35 252

原创 数组中重复的数字

思路一:用unordered_map保存即可bool duplicate(int nums[],int len,int* duplication){ if(nums==nullptr||len<=0) return false; for(int ii=0;ii<len;ii++){ if(nums[ii]<0||nums[ii]>=len) return false; } unordered_map<int,int.

2021-09-24 22:02:51 149

原创 去除字符串空格

#include <iostream>#include <cstring>using namespace std;//遍历元字符串,删除空格char *remove_blank(char *str){ int index = 0; for(int ii=0;ii<strlen(str);ii++){ if(str[ii] != ' '){ str[index++] = str[ii]; }

2021-09-23 18:28:37 112

原创 拆分字符串使唯一子字符串的数目最大

思路:方法一:回溯拆分给定的字符串,要求拆分后的每个子字符串唯一,求子字符串的最大数目,可以通过回溯算法实现。对于长度为 n的字符串,有n−1个拆分点。从左到右遍历字符串,对于每个拆分点,如果在此拆分之后,新得到的一个非空子字符串(即拆分点左侧的最后一个被拆分出的非空子字符串)与之前拆分出的非空子字符串都不相同,则当前的拆分点可以进行拆分,然后继续对剩下的部分(即拆分点右侧的部分)进行拆分。判断拆分出的非空子字符串是否有重复时,可以使用哈希表。当整个字符串拆分完毕时,计算拆分得到的非空子字符串的.

2021-09-20 16:19:55 401

原创 返回“最大数”

思路:自定义排序 A+B >B+Aclass Solution {public: /* static bool cmp(string& a,string& b){ string c=a+b; string d=b+a; return c>d; } */ string largestNumber(vector<int>&.

2021-09-18 16:53:55 142

原创 4键键盘(Leetcode651)

思路:动态规划题目中提到的有四个按键,但实际上,我们可以压缩为2个选择,因为对于最优解,Ctrl+V一定在Ctrl+A-Ctrl+C两个按键后【dp数组含义】:按键i次后屏幕显示dp[i]个A【状态】:剩余可按键数量N【选择】:①按A;②按Ctrl+V(需通过额外变量j来确定Ctrl+C的位置,从而确定剪贴板中A的个数dp[j - 2])【状态转移方程】:dp[i] = max(dp[i - 1] + 1, dp[j - 2] * (i - j + 1));#includ.

2021-09-17 10:09:29 509

原创 螺旋矩阵II

关键点:定义边界模拟输出class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { if(matrix.size()==0) return {}; vector<int> res; //定义上下左右边界,注意图和实际是相反的 int up=0; int down=.

2021-09-13 17:34:32 115

原创 最大连续1的个数

解法一:暴力遍历class Solution {public: int findMaxConsecutiveOnes(vector<int>& nums) { int res=0,temp=0; auto it=nums.begin(); while(it!=nums.end()){ if(*(it++)==1) ++temp;//一直累积1的数量 else { .

2021-09-10 11:31:05 143

转载 为什么UDP有时比TCP更有优势?

随着网络技术飞速发展,网速已不再是传输的瓶颈,UDP协议以其简单、传输快的优势,在越来越多场景下取代了TCP。1、网速的提升给UDP稳定性提供可靠网络保障网络环境变好,网络传输的延迟、稳定性也随之改善,UDP的丢包率低于5%,如果再使用应用层重传,能够完全确保传输的可靠性。2、对比测试结果UDP性能优于TCP为了提升浏览速度,Google基于TCP提出了SPDY协议以及HTTP/2。Google在Chrome上实验基于UDP的QUIC协议,传输速率减少到100ms以内。Google采用

2021-09-07 08:47:28 920

原创 前K个高频单词

思路:和前K个高频元素那道题目只有构建小顶堆时有一丢丢差别class mycompare{public: //唯一差别 //构建小顶堆时,优先按照频率大小排序,在频率一样的情况下按照字典序大小排列 bool operator()(const pair<string,int>& lhs,const pair<string,int>& rhs){ return lhs.second>rhs.second ||(lhs.s.

2021-09-04 14:37:49 117

原创 最小路径和

class Solution {public: int minPathSum(vector<vector<int>>& grid) { vector<vector<int>> dp(grid.size(),vector<int>(grid[0].size(),0)); for(int ii=0;ii<grid.size();ii++){ if(ii==0) dp[ii.

2021-08-26 09:46:14 105

原创 两数相加-2

思路:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), nex.

2021-08-25 15:32:56 101

原创 数组中只出现一次的数字+第一个只出现一次的字符

//哈希法:mapclass Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { unordered_map<int,int> map; for(int ii=0;ii<data.size();ii++){ map[data[ii]]++; } au.

2021-08-24 15:55:16 146

原创 402.移掉K位数字,使得剩下数字最小

思路这道题让我们从一个字符串数字中删除 k 个数字,使得剩下的数最小。也就说,我们要保持原来的数字的相对位置不变。以题目中的 num = 1432219, k = 3 为例,我们需要返回一个长度为 4 的字符串,问题在于: 我们怎么才能求出这四个位置依次是什么呢?这里有一个前置知识:对于两个数 123a456 和 123b456,如果 a > b, 那么数字 123a456 大于 数字 123b456,否则数字 123a456 小于等于数字 123b456。也就说,两个相同位数的数字大小关系.

2021-08-23 17:38:50 1413 1

原创 最小覆盖子串_滑动窗口

解题思路class Solution {public: string minWindow(string s, string t) { vector<int> need(128,0);//用need数组记录我们所需要的元素 for(char c : t){ need[c]++; } int needcount=t.size(); int ii=0,jj=0;//定义滑动窗口 s.

2021-08-21 14:10:40 114

原创 无重复字符的最长子串_滑动窗口

思路:这道题主要用到思路是:滑动窗口。其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!如何移动?我们只要把队列的左边的元素移出就行了(不断地缩小左边窗口),直到窗口中不存在与要入队的字符重复的字符为止。一直维持这样的队列,找出队列出现最长的长度时候,求出解!时间复杂度:O(n)// 滑动窗口// 每一时刻,窗口都表示一个无重复字符的子串class Soluti.

2021-08-21 11:54:03 117

原创 输出序列和

描述给出一个正整数N和长度L,找出一段长度大于等于L的连续非负整数,他们的和恰好为N。答案可能有多个,我们需要找出长度最小的那个。例如 N = 18 L = 2:5 + 6 + 7 = 183 + 4 + 5 + 6 = 18都是满足要求的,但是我们输出更短的 5 6 7输入描述:输入数据包括一行: 两个正整数N(1 ≤ N ≤ 1000000000),L(2 ≤ L ≤ 100)输出描述:从小到大输出这段连续非负整数,以空格分隔,行末无空格。如果没有这样的序列或者找出的序列长度大于100

2021-08-16 17:56:51 264

原创 合并两个有序数组

解法一:class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int index=m; for(int ii=0;ii<n;ii++){ nums1[index++]=nums2[ii]; } sort(nums1.begin(),.

2021-08-12 12:02:44 104

原创 判断链表是否有环

1、简单判断链表是否有环class Solution {public: bool hasCycle(ListNode *head) { ListNode* slow=head; ListNode* fast=head; while(fast!=nullptr&&fast->next!=nullptr){ fast=fast->next->next;

2021-08-08 15:22:07 94

原创 手动实现智能指针shared_ptr

#include <iostream>using namespace std;template<typename T>class sharedPtr{public: //默认构造、拷贝构造 sharedPtr(T* ptr=nullptr):_ptr(ptr),_pcount(new int(1)){cout<<"1"<<endl;}//每次创建类的新对象时初始化指针并将引用计数置为1 sharedPtr(const

2021-08-08 11:38:35 203

原创 桶排序(C++版)

#include <iostream>#include <vector>using namespace std;void print(vector<int>& nums){ for(auto a: nums){ cout<<a<<" "; } cout<<endl;}void bubbleSort(vector<int>& nums,int size){

2021-08-07 14:16:29 229

原创 归并排序(C++版)

//归并排序->先使子序列有序,再使子序列段间有序//时间复杂度都是nlogn 空间复杂度是O(n)#include <iostream>#include <vector>using namespace std;void print(vector<int>& nums){ for(auto a: nums){ cout<<a<<" "; } cout<<endl;}

2021-08-07 10:49:26 78

原创 堆排序(C++版)

//堆排序->完全二叉树//时间复杂度都是nlogn 空间复杂度是O(n)#include <iostream>#include <vector>using namespace std;void print(vector<int>& nums){ for(auto a: nums){ cout<<a<<" "; } cout<<endl;}//对每个节点做heap

2021-08-07 10:03:09 120

原创 快速排序(C++版)

#include <iostream>#include <vector>using namespace std;void quickSort(vector<int>& nums,int begin,int end){ if(begin>=end) return; int left=begin,right=end; int temp=nums[left];//注意!!! while(left<right)

2021-08-07 09:49:45 65

原创 希尔排序(C++版)

#include <iostream>#include <vector>using namespace std;void print(vector<int>& nums){ for(auto a: nums){ cout<<a<<" "; } cout<<endl;}//希尔排序的思想是采用插入排序的方法,//先让数组中任意间隔为 h 的元素有序,刚开始 h 的大小可以是

2021-08-06 23:54:03 158 1

原创 选择排序(C++版)

#include <iostream>#include <vector>using namespace std;void print(vector<int>& nums){ for(auto a: nums){ cout<<a<<" "; } cout<<endl;}//算法思想:在未排序序列中找到最小的元素,放到起始位置void selectSort(vector<i

2021-08-06 23:12:56 65

原创 插入排序(C++版)

#include <iostream>#include <vector>using namespace std;void print(vector<int>& nums){ for(auto a: nums){ cout<<a<<" "; } cout<<endl;}void insertSort(vector<int>& nums){ int size

2021-08-06 22:54:30 79

原创 冒泡排序(C++版)

#include <iostream>#include <vector>using namespace std;void print(vector<int>& nums){ for(auto a: nums){ cout<<a<<" "; } cout<<endl;}void bubbleSort(vector<int>& nums){ int size

2021-08-06 22:32:22 156

原创 重排链表!

思路1、首先利用快慢指针,将链表分成两段。2、将slow指针对应的后半段链表进行反转(反转链表操作)3、利用归并排序的思想,合并两个链表。(tips:利用dummy节点可以提高效率)/* * @lc app=leetcode.cn id=143 lang=cpp * * [143] 重排链表 */// @lc code=start/** * Definition for singly-linked list. * struct ListNode { * int val;.

2021-08-03 12:15:17 135

原创 LRU缓存机制

struct Doublelist{ int key,val; Doublelist* pre,*next; Doublelist(int key,int value):key(key),val(value),pre(nullptr),next(nullptr){}};class LRUCache {public: LRUCache(int _capacity) { this->capacity=_capacity; head=..

2021-08-03 10:15:20 68

原创 vscode 上刷leetcode算法题(含配置)

为什么选择在vscode 上刷leetcode减少leetcode网页提交次数提高“提交通过率” 轻量级的,易于debug的IDE语法高亮美观 方便跑多个测试用例调试链表,二叉树等题目更直观代码,题解,同步到Git,更好地云管理废话少说,直接配置一、在linux下安装node.js(我安装的是10.9版本的)注:版本大家自行选择,尽量选择高版本1、wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz

2021-07-21 15:17:53 1654 1

原创 爱计时的沙漏

方法一:6,8同时开始,6结束开始计时,8继续,完了8倒过来,2+8=10方法二:6,8同时开始后开始计时,6结束时,8还剩2分钟,此时倒置6分钟沙漏,待8分钟沙漏剩余的2分钟漏完,再次倒置6分钟沙漏,待6分钟沙漏漏完正好10分钟。...

2021-06-20 17:06:36 432

原创 一块钱买一瓶水,两个空瓶换一瓶水,三个瓶盖换一瓶水,现在有20块钱,一共可以喝多少瓶水?

/* ************************************************************************> File Name: water.cpp> Author: 想名字多费事> 微信公众号: xxxxxxx> Created Time: Sun 20 Jun 2021 04:33:32 PM CST> Description: **************************

2021-06-20 16:50:15 526

原创 最长回文子序列

回文子串是要连续的,回文子序列不是连续的!思路差不多,但本题要比求回文子串简单一点,因为情况少了一点。确定dp数组(dp table)以及下标的含义dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]。确定递推公式在判断回文子串的题目中,关键逻辑就是看s[i]与s[j]是否相同。如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2;如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[..

2021-06-19 10:59:32 285

原创 回文子串个数

1. 确定dp数组(dp table)以及下标的含义布尔类型的dp[i][j]:表示区间范围[i,j](注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。2. 确定递推公式在确定递推公式时,整体上有两种情况,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。当s[i]与s[j]不相等,dp[i][j]一定是false。当s[i]与s[j]相等时,又分为如下三种情况情况一:下标i 与 j相同,同一个字符例如a,当然是回文子串情况二:下标i.

2021-06-19 10:50:54 1616

原创 绝杀编辑距离

确定dp数组(dp table)以及下标的含义dp[i][j] 表示以下标i-1为结尾的字符串word1,和以下标j-1为结尾的字符串word2,最近编辑距离为dp[i][j]。确定递推公式在确定递推公式的时候,首先要考虑清楚编辑的几种操作,整理如下:if (word1[i - 1] == word2[j - 1]) 不操作if (word1[i - 1] != word2[j - 1]) 增 | 删 | 换也就是如上四种情况。if (word1[i - 1] == word.

2021-06-18 12:11:42 102

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除