自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (1)
  • 收藏
  • 关注

原创 如何设计一个点赞系统

首先我们定义出一个点赞系统需要对外提供哪些接口:1.用户对特定的消息进行点赞;2.用户查看自己发布的某条消息点赞数量以及被哪些人赞过;3.用户查看自己给哪些消息点赞过;这里假设每条消息都有一个message_id, 每一个用户都有一个user_id, 从以上三个接口我们可以大概想到需要在存储层保存哪些数据:1.消息点赞表, 形式如, 需要具备根据指定message_id 查找所有点赞人及点赞数量的能力;2.用户点赞表,形式如,需要具备根据user_id查找其所有点赞过的消息列表;3.点赞计数表,形

2024-06-20 22:03:38 1488 6

原创 家庭电脑私网如何访问阿里云服务器的指定端口

2.阿里云服务器控制台设置防火墙,如下图所示,直接添加一条规则即可,端口号填写需要开放的端口如6379,IP填写上一步获取的地址如1.2.3.4。最后特别申明一点,第二部中拿到的IP地址可能会变化,这取决与使用的NAT有关,如下图所示,一旦IP变化可能就需要重新进行如上步骤添加一个IP。当然,这里也可以对外开放全部IP和端口号,如下图所示,但是这样做会使的服务器完全暴露,又被攻击的风险。3.设置服务器防火墙,登录云服务器,用如下命令开放指定的端口号。

2024-06-09 19:31:36 257

原创 初级版linux中 ls 命令实现

linux

2022-09-10 15:35:12 483 1

原创 设置进程工作目录、进程终止处理程序

设置进程工作目录和终止处理程序

2022-09-09 18:23:03 180

原创 剑指offer20 表示数字的字符串

剑指offer20之前做的时候思路比较乱,重新总结一波;按题目要求,字符串表示为数字有以下几个规则:1.首尾的空格必须去掉,不影响结果;2.+或者- 必须出现在第一位,或者e/E的后面一位;3.e和. 只能出现一次;4.e/E 后面必须有数字;5. .面不能有e/E;不满足以上条件的就是非法数字,直接返回false;class Solution {public: bool isNumber(string s) { if(s.size()==0)return false;

2020-08-10 13:32:53 141

原创 memcpy()/memmove()函数实现

两个函数都是将源地址开始的若干个字节复制到目的地址,区别在于memcpy()无法处理区间重叠;这里处理区间的处理方式位,当目的地址大于源地址就反向拷贝,反之就正向拷贝;void* mymemcpy(void* src,void* dst,int n){ char* psrc=(char*)src; char* pdst=(char*)dst; if(psrc==0||pdst==0)return (void*)0; if(pdst>psrc) {

2020-08-07 20:23:25 140 1

原创 手写一波常见排序

好久没看排序相关的了,为了应付面试,复习一下;简单的写一下 冒泡排序,选择排序,快速排序;//冒泡排序void sort(vector<int>&v,int l,int r){ for(int i=r;i>=l;--i) { int ind=0; for(int j=0;j<=i;++j) { if(v[ind]<v[j]){ind=j;}; }

2020-08-01 13:32:30 129

原创 玩具版C++ 智能指针 unique_ptr的实现

#include<algorithm>#include<iostream>#include<vector>template<class T>void defaultfunc(T* p){ if (p) delete(p);}template<class T,class D=decltype(defaultfunc<T>)*>class myunique_ptr{public: explicit myun

2020-07-19 14:07:38 132

原创 两个线程交替打印字符和数字

用信号量来实现两个线程之间的同步;线程1打印数字;线程2打印字母;#include<semaphore.h>#include<string>#include<thread>#include<iostream>sem_t sm1,sm2;string s1="123456789";string s2="abcdefghi";int i=0,j=0;void func1(){ while(i<s1.size())

2020-07-18 21:27:01 425

原创 IO复用---select()函数

参数1:要监听的描述符的个数,一般取需要监听的描述符中最大值加1;参数2~4:三个数组,分别表示可读,可写,和异常事件对应的描述符集合,数组大小也限制了所能监听的最大描述符个数,一般为1024个;以下四个函数用来操作这三个数组;参数5:超时时间,不需要可以设置为NULL,表示如果没有活动的事件产生,将一直阻塞(不考虑信号);服务端利用select()监听客户端套接字上可读事件:#include <sys/types.h>#include <sys/socket.h>.

2020-07-11 16:28:27 126

原创 writev 函数使用

其中fd为一个文件描述符,vector为一个数组,数组中每个元素都包含了一个地址和一个偏移量,count表示数组的个数;以下代码:服务端利用writev()从一个stadus_line数组和另外一个本地文件读取文件,并发送到客户端;#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <assert.h>#include <stdio.h&.

2020-07-10 15:43:51 1796

原创 dup函数

1.服务端,关闭标准输出(文件描述符为1),执行dup(confd),其中confd为客户端套接字;这样服务器端输出到标准输出的内容就会发送到客户端;#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <assert.h>#include <stdio.h>#include <unistd.h>#include <

2020-07-09 21:47:50 385

原创 剑指 Offer 60. n个骰子的点数

剑指 Offer 60. n个骰子的点数class Solution {public: vector<double> twoSum(int n) { vector<vector<int>>dp(n+1,vector<int>(6*n+1,0)); vector<double>ans; for(int i=1;i<7;++i) dp[1][i]=1; for(int i=2;i

2020-07-03 19:47:46 88

原创 C++11 实现线程池

头文件,threadpoll类定义;#ifndef THREADDPOOL#define THREADDPOOL#include <vector>#include <utility>#include <queue>#include <thread>#include <functional>#include <mutex>#include<condition_variable>using namespac

2020-07-03 13:06:35 183

原创 单例模式C++实现

1. 饿汉模式class Singleton{ private: static Singleton instance; Singleton(){std::cout<<"construct "<<std::endl;} Singleton(const Singleton&); public: ~Singleton(){std::cout<<"destroy"<<std::endl;}; s

2020-07-02 20:14:57 127

原创 LEETCODE 378 有序矩阵中第K小的元素

378. 有序矩阵中第K小的元素1.二分法class Solution {public: int kthSmallest(vector<vector<int>>& matrix, int k) { auto n=matrix.size(); int l=matrix[0][0],r=matrix[n-1][n-1]; while(l<r) { int mi=l+(r-l

2020-07-02 15:21:45 114

原创 Leetcode 560和为K的子数组

题目方法一:构造一个前缀和数组,然后在两重循环暴力搜索所有的可能;时间复杂度O(n^2);最后一个测试用例无法通过。class Solution {public: int subarraySum(vector<int>& nums, int k) { vector<long long>sum{0}; long long ans=0,res=0; for(auto c:nums) {

2020-05-15 09:21:15 193

原创 最大子序和

leetcode 53这道题刷了一遍还是不太熟练,总结一下几种解法;方法一:动态规划dp[i]表示以数组第i个元素结尾的最大子序列,很容易写出递推公式如下:dp[i]=dp[i-1]>0?dp[i-1]+nums[i]:nums[i];实现代码如下,比较简单的动态规划,空间复杂度可以优化为O(1);class Solution {public: int maxSubAr...

2020-05-03 10:06:01 152 1

原创 STL中next_permutation()和prev_permutation()函数实现

next_permutation()和permutation()是STL提供的用来计算下一个排列和上一个排列的算法;刷题中经常用到,比较有用。next_permutation()实现:template <class iterator>bool next_permutation(iterator first,iterator last){ if(first==last)r...

2020-04-25 09:01:37 216

翻译 leach

xm=100;%设置区域为100*100ym=100;sink.x=0.5*xm;%sink(汇聚)节点坐标sink.y=1.75*ym;n=100 %区域内的节点数目p=0.05;% 节点成为簇头的概率 Eo=0.5;%节点初始能量ETX=50*0.000000001;%发射单位报文损耗能量 ERX=50*0.000000001;%接收单位报文损耗能量Efs=10*0.00...

2020-04-19 14:34:13 272

原创 多源BFS

多源bfs方法可以解决leetcode 上的一类题,一般来说我们使用BFS都是单源的,如二叉树层次遍历等leetcode 上的很多题目,我们起始阶段只需要将某一个元素加入队列。多源顾名思义就是开始阶段加入多个元素入队列,我们也可以将其理解为存在一个超级源点。如下994题腐败的橘子,网格中存在若干个腐败橘子,我们需要求出所有新鲜橘子被腐烂的时间。如果按单源的bfs,从一个腐烂橘子开始遍历,那么...

2020-04-15 11:10:48 2272

原创 matlab上实现Dijkstra算法找两点最短路径代码

Dijkstra算法就不多解释了,这个代码我是在论文实验里用到了,主要是用来找两个路由节点之间的最短路径。代码写的比较随意。。。function [ans] = djk(adj,start,des)%% adj 所有节点构成的一个邻接矩阵%% start 源节点序列号%% des 目的节点序列号%% ans 源节点到目的节点的路径长度U=1:length(adj); ...

2020-04-14 14:56:07 4005 4

原创 计算机网络-应用层

1.

2020-04-13 18:04:27 126

原创 操作系统-进程管理

1.

2020-04-13 18:03:30 135

原创 K个一组翻转链表

LEETCODE 25链表相关题目看起来思路容易找,但是细节和边界条件较多,很容易出错。就这道题来说,k将链表分为若干个组,我们要考虑的问题有:组内的反转,可以参考前面的链表反转;组之间的连接;如过最后一个组数目不足k的处理;大多数链表和二叉树相关的题目可以优先考虑递归的方法来做,虽然本题要求常数的空间复杂度,但还是可以试试。class Solution {public: ...

2020-04-07 11:43:15 128

原创 快速排序

快速排序size_t setPivot(vector<int>&v,int l,int r) { int pivot=v[l],index=l; while(l<r) { while(l<r&&v[r]>=pivot) --r; ...

2020-04-07 11:23:05 64

原创 计算机网络-传输层

1.TCP连接建立 (三次握手)第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同...

2020-04-06 14:10:00 201

原创 LEETCODE 72 编辑距离

leetcode72 这是一道比较典型的动态规划题目,状态转移方程比较容易给出,题目给出的三种操作插入,删除,替换三种操作,分别对应三种转移方程。1.如果两个字符串最后字符相同,情况比较简单dp[i][j]=dp[i-1][j-1]2.如果两个字符不相同dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+11.动态规划,O(mn)空间...

2020-04-06 10:42:27 83

原创 LEETCODE 460 实现LFU缓存

leetcode 460方法一:双哈希表法题目要求需要在常数时间完成插入和查找算法,联系之前的LRU算法,很容易想到用哈希表。具体做法如下:第一个哈希表存储 使用频率freq 和一个这样一堆映射...

2020-04-06 10:25:58 127

原创 leetcode 42接雨水

leetcode 42题目思路:我们要找到每一个位置雨水的高度,这个高度等于该位置左右两边最大值中的小者减去当前位置的高度。所以解决这个问题关键就变成了给定一个位置,如何找到其左右两边的最大值;方法一:用两个循环分别找到左边最大值和右边最大值,但是时间复杂度为O(n^2),无法通过测试。int trap(vector<int>& height){ int ...

2020-04-04 11:36:10 128

原创 leetcode 06 Z字形变换

leetcode 06这道题有点找规律的意思,参考官方解答有两种方法;方法一:一行一行的排下去,直到字符串结束;class Solution {public: string convert(string s, int numRows) { if(numRows==1)return s; //numRows为1,可以直接返回 int ...

2020-04-03 10:16:00 236

原创 前缀树

又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。代码实现如下:主要的成员函数有两个:search()判断某个字符串是否存在;insert()插入一个字符串;class n...

2020-03-28 14:00:46 138

原创 多数元素

给定一个数组,求出其中出现次数大于n/2的数字;暴力方法:先排序,直接返回第i+n/2个元素;由于排序的时间复杂度为O(n*logn),这种方法不是最优的;方法一:暴力法中对所有的元素进行排序,其实这是没有必要的,我们只需要保证最中间的那个元素...

2020-03-13 19:03:01 120

原创 字符串的最大公因子 /最小的k个数

第一题:一个性质:如果 str1 和 str2 拼接后等于 str2和 str1 拼接起来的字符串(注意拼接顺序不同),那么一定存在上述条件的字符串 X;证明过程还有一个性质:如果X是str1和str2公共因子,那么X的长度就是str1 和str2长度的公约数,证明过程如上链接;对于求公约数有如下经典算法:欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有...

2020-03-12 11:48:36 408 1

原创 三数之和 四数之和相关题目

leetcode 15 三数之和leetcode16 最接近的三数之和leetcode 18 四数之和这三道题目都是一个类型,主要就是利用有序数组与双指针的一些技巧;首先给出一个基本模板,如何在一个有序数组中找到两数之和为一目标值target; int l=0,r=nums.size()-1; while(l<r) { i...

2020-03-10 17:07:25 175

原创 数据流的中位数

方法一:双堆法(最大堆+最小堆)当前两个堆中数据个数为偶数时:如果新插入数据小于或等于大堆的堆顶,则说明新数据应该插入大堆;此时我们先将大堆堆顶插入小堆中,然后再将新数据插入大堆。**否则**直接将新数据插入小堆。总而言之,为偶数时必须将小堆增加一个数,具体如何加取决于以上逻辑;当前两个堆中数据个数为偶数时,有类似的处理方法;以上操作确保两个堆的数据个数相差不超过1,以便于我们...

2020-03-07 12:38:57 163

原创 shared_ptr循环引用

简单的测试一下出现循环引用的情况,这会导致程序内泄露。#include <iostream>class child;class parent{ public: shared_ptr<child>p1; ~parent() { cout<<"parent destroy"<<endl;...

2020-03-07 09:56:33 231

原创 LeetCode滑动窗口

之前刷了不少和滑动窗口相关的题目,但是一直没有好好地去总结,最近刚好看到LeetCode上一位大佬labuladong写的一篇滑动窗口的模板,觉得很有意义。下面结合我自己的理解重新的总结和归纳一下,部分内容参考labuladong的文章。首先应该明白 滑动窗口一般是用来解决这样一类问题:给定一个字符串或者数字序列,找到这个序列中符合特定要求的子序列,比如LeetCode3 (无重复字符的...

2020-01-15 19:59:36 258

原创 并查集

最近刷题了解到了并查集这种数据结构,特意去学习了一下,并查集的写法大概有几种,但是关键点只有如下两点:1.合并的方式(按高度或者按节点数);2.路径压缩写了几个模板1.按高度合并同时进行路径压缩class Union{ public: Union(int a):n(a) { cnt=n; for(int i=0;i<n;++...

2020-01-15 19:48:23 103

原创 任务调度器算法(leetcode621)

题目描述如下:思路:要想完成任务的时间最短,那么必须优先处理出现次数最多的任务(如果将次数多的任务留到最后,必然在每次任务之间留出大量的等待时间),因此我们可以以n+1个任务为一轮(保证同一种任务不出现在同一轮),每一轮按出现次数顺序从大到小执行,每完成一轮就重新排序依次,直到所有任务完成;例如:AAABBBBC n=2首先统计任务次数,然后排序得到 4 3 1初始time=0每...

2020-01-08 12:58:10 915

空空如也

空空如也

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

TA关注的人

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