自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《剑指offer》算法题二刷整理

123

2020-07-26 09:48:50 140

原创 数组指针、指针数组的一点心得

int main(){ double(*a)[3][6]; //a----------double(*)[3][6] 数组指针(指向一个二维数组) //*a---------double[3][6] double(*)[6] 数组指针(行指针,指向一个一维数组) //**a--------double[6] 元素指针 //***a-------double cout << sizeof(a) << endl;//4 cout << size

2020-07-08 10:09:54 87

原创 刷题-《程序员面试金典》

class Solution {public: bool isUnique(string astr) { if(astr.size()==0)return true; unordered_set<char>myset={astr[0]}; for(int i=1;i<astr.size();i++) { if(myset.find(astr[i])!=myset.end()) .

2020-06-27 17:26:57 178

原创 最近最久未被使用(LRU)缓存机制(哈希链表)

LRU 缓存算法的核心数据结构就是哈希链表,双向链表和哈希表的结合体。这个数据结构长这样:其实很简单:哈希表(unordered_map)中的二元组为unordered_map<int, list<pair<int, int>>::iterator>;双向链表(list)中的二元组为list<pair<int, int>>。分析上面的操作过程,要让 put 和 get 方法的时间复杂度为O(1),我们可以总结出 cache 这个数据结构必要.

2020-05-25 16:25:11 95

原创 奇偶链表(双指针交替作业)

思路如图:必须奇偶结点交替作业这道题找到while的条件是关键!class Solution {public: ListNode* oddEvenList(ListNode* head) { if (head == NULL || head->next == NULL)return head; //双指针(多指针) ListNode*odd_head = head;/...

2020-04-08 17:13:43 68

原创 C++11 final关键字

1.禁用继承C++11中允许将类标记为final,方法时直接在类名称后面使用关键字final,如此,意味着继承该类会导致编译错误。实例如下:class A final {};class B :public A{};//error2.禁用重写C++中还允许将方法标记为final,这意味着无法再子类中重写该方法。这时final关键字至于方法参数列表后面,如下:class A{public: virtual void fun() final {};};class A{pu

2020-09-09 21:21:20 43

原创 当当网笔试

#include<iostream>#include<string>#include<vector>using namespace std;int main(){ string temp; vector<string>v; vector<string>v2; vector<string>res; while (cin >> temp) { v.push_back(temp); } for ..

2020-08-30 15:43:23 82

原创 string的find函数返回值和string::npos

先看一种很多人日常使用错误方式string str(“hello world”);int pos=str.find_first_of(“h”);if(pos!=string::npos) // 或者 if(pos!=-1){……// 查找到了} //不存在是find返回-1这样的使用,结果是正常的,但并没有很好的理解string find函数的返回类型和string::npos真正的值。string::find这类型的函数,返回值类型都是string::size_type, 而string

2020-08-11 16:30:21 59

原创 0808面试

这次猿辅导的面试很糟糕,代码写的很差。这题就是奇偶链表了。#include<iostream>#include<vector>using namespace std;typedef struct ListNode{ int val; ListNode*next; ListNode(int val) :val(val), next(NULL) {}}ListNode;ListNode*fun(ListNode*head){ if (head->nex

2020-08-09 09:59:39 119

原创 安排机器——18TX

我的思路是先对任务排序(按工作时长优先,降序排列)然后对于每个任务(贪心,先选工作时间最长的任务),把时间满足要求且等级满足要求的机器全挑出来,再从中选出等级最低的那一台。#include<iostream>#include<vector>#include<algorithm>using namespace std;const int maxn = 1e5 + 10;struct node { int time, grade; bool isUsed .

2020-08-05 20:26:04 59

原创 huawei练习卷2

这份卷子很简单,三道题全部AC#include<iostream>using namespace std;int main() { int n; while (cin >> n) { if (n == 0) break; //正常的解法 int res = 0; int a, b; while (n >= 3) { a = n / 3;//换的新瓶 b = n % 3;//剩的空瓶 res += a; n = a + b

2020-08-05 15:27:16 65

原创 2016hw卷练习

小结:除了数独这道题写的出了bug,交卷才发现并改正,剩下两题都很轻松。#include<iostream>#include<vector>using namespace std;bool rows[9][10] = { false };//rows[i][j]为true表示第i行的数字j已经被使用了bool cols[9][10] = { false };//cols[i][j]为true表示第i列的数字j已经被使用了bool blocks[9][10] = { fa

2020-08-05 14:28:32 58

原创 pdd笔试题

拼多多的笔试没有报名,但昨天听伙伴们说很难,所以一共4道题,挑了2道会的,自己编了一下。#include<iostream>#include<vector>#include<algorithm>using namespace std;int main(){ int K, N; cin >> K; cin >> N; vector<int>a(N); for (int i = 0; i < N; i++)

2020-08-03 10:21:10 510

原创 0801笔试

求最大的重叠区间个数#include<iostream>#include<vector>#include<algorithm>using namespace std;class Node{public: int value; int flag; Node(int value, int flag) :value(value), flag(flag) {} bool operator<(const Node&node) { if ..

2020-08-01 21:42:31 100

原创 0731科大讯飞笔试

贪心,AC#include<iostream>#include<algorithm>using namespace std;int main(){ int money_count[5]; int value[5] = { 1,5,10,50,100 }; int input; for (int i = 0; i<5; i++) { cin >> money_count[i]; } int k; cin >> k; /..

2020-07-31 21:11:56 130

原创 0729面试题

这几个都不难int main(){ /*char aa[10]; cout << strlen(aa) << endl;*/ //char aa[10] = {0}; //cout << strlen(aa) << endl; /*int a[5] = { 1,2,3,4,5 }; int*ptr = (int*)(&a + 1); cout << *(a + 1) << endl; cout <&

2020-07-29 19:20:10 68

原创 std::move分析

move函数的作用就是把传入的参数t的类型转换为右值引用,至于后续的所有权转交问题,是由移动构造函数或移动赋值函数完成的,不要搞混了!/*源代码*/template <typename T>typename remove_reference<T>::type&& move(T&& t){ return static_cast<typename remove_reference<T>::type&&>(t

2020-07-28 15:33:25 73

原创 另一个树的子树&树的子结构(双递归)

class Solution { //双递归!public: bool isSubStructure(TreeNode* A, TreeNode* B)//遍历A树的每一个结点,每个结点都当一次根结点 { if (A==NULL||B==NULL) return false; return DFS(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B); .

2020-07-24 16:23:48 64

原创 旋转数组的最小数字(好题目!)

这题思维要考虑全面,否则很容易出错!!!class Solution {public: int minArray(vector<int>& numbers) { //二分法 if(numbers.size()==0) return -1; int low=0,high=numbers.size()-1; while(low<high) { .

2020-07-23 16:35:45 48

原创 笔试题0722

我当时的思路和编码:map#include<iostream>#include<vector>#include<map>using namespace std;int main(){ int num; int a; map<int, int>mp; cin >> num; vector<int>input(num); for (int i = 0; i < num; i++) { cin &gt..

2020-07-22 21:29:20 44

原创 C++11——variadic template

例1://例1:void print()//递归出口{ cout << "递归出口" << endl;}template<typename T, typename... Types>//版本1void print(const T&firstArg, const Types&...args){ cout << firstArg << endl; print(args...);}template<ty

2020-07-22 11:17:51 52

原创 C++11——lambda表达式

将vector中的某些元素删除使用functor#include<iostream>#include<vector>#include<bitset>#include<algorithm>using namespace std;class my_functor{public: my_functor(int aa, int bb) :a(aa), b(bb) {} bool operator()(int n)const { retu

2020-07-21 21:51:32 68

原创 C++11——多个参数的显式构造函数

直接上两段小代码,对比着看就明白了。class P{public: P(int a, int b) { cout << "P(int a, int b)" << endl; } explicit P(int a, int b, int c) { cout << "explicit P(int a, int b,int c)" << endl; }};void fp(const P&) {}int main(){ P p4

2020-07-21 09:47:13 118

原创 将一个整型数的奇偶位互换(位运算)

这题涉及到一个很重要的基础知识点。运算时的转换:当运算涉及两种类型时,较小的类型将会被转换为较大的类型,也就是表达力低的类型会被转换为表达力高的类型。各类型表达能力从低到高排列为:int–>unsigned int–>long–>unsigned long–>float–>double–>long double//运算时的转换//当运算涉及两种类型时,较小的类型将会被转换为较大的类型,也就是表达力低的类型会被转换为表达力高的类型。//各类型表达能力从低到高.

2020-07-20 11:15:54 63

原创 翻转数位(思路挺好)

我觉得这道题挺好。class Solution {public: int reverseBits(int num) { int res=0; int cur=0,prev=0; //从低位开始 while(num) { if(num&1) { cur++; } else//当前bi.

2020-07-19 21:27:34 56

原创 山形数组按序不重复输出(双指针)

#include<iostream>#include<vector>using namespace std;int main(){ vector<int>v; int a; while (cin >> a) { v.push_back(a); } int i = 0, j = v.size() - 1; while (i <= j) { if (v[i] < v[j]) { cout <&lt.

2020-07-18 20:01:19 157

原创 移动零&移除元素&删除排序树组中的重复项(快慢指针)

我最初的思路:class Solution {public: void moveZeroes(vector<int>& nums) { for(int i=0;i<nums.size();i++) { if(nums[i]==0) { for(int j=i+1;j<nums.size();j++) { .

2020-07-16 09:00:40 55

原创 三角形最小路径和(自底向上的dp)

dp[i][j]为(i,j)到底边的最小路径和,那么得到递推关系式为dp[i][j]=min(dp[i+1][j],dp[i+1][j+1]);那么很容易写出代码如下:class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { int n=triangle.size(); vector<vector<int>>dp(n.

2020-07-14 09:26:44 95

原创 两个数组的交集(哈希)

//哈希表class Solution {public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { if(nums1.size()<nums2.size()) { return intersect(nums2,nums1); } unordered_map<i.

2020-07-13 16:22:00 132

原创 面试题-数组实现栈(动态扩容)

师兄和我说的一道面试题,自己动手写了一下,不难,重点在于动态扩容。typedef struct mystack{ int top; int*data; int size;}mystack;void init(mystack*s){ s->top = -1; s->data = new int[5]; s->size = 5;}void push(mystack*s, int elem){ if (s->top + 1 < s->size)

2020-07-09 10:50:51 175

原创 合并k个排序数组(优先级队列(小顶堆)或归并)

和合并K个排序链表思路完全相同。法1:归并法2:优先级队列(小顶堆)class Solution { //归并public: int kthSmallest(vector<vector<int>>& matrix, int k) { vector<int>res = merge(matrix, 0, matrix.size()-1); return res[k - 1]; } vector<int>merge(vecto.

2020-07-02 15:14:20 219

原创 最长重复子数组(后缀序列+dp)

这题的dp不是很好想到,dp[i][j]表示长度为i,以A[i-1]为末尾的序列 和 长度为j,以B[j-1]为末尾的序列,二者的最大公共后缀序列长度我觉得关键是要想到:比较的是后缀序列!class Solution {public://dp[i][j]表示长度为i,以A[i-1]为末尾的序列 和 长度为j,以B[j-1]为末尾的序列,二者的最大公共后缀序列长度 int findLength(vector<int>& A, vector<int>&.

2020-07-01 21:17:50 93

原创 长度最小的子数组(双指针)

class Solution {public: //典型的双指针(还有点贪心算法的味道) int minSubArrayLen(int s, vector<int>& nums) { int start=0,end=0; int n=nums.size(); if(n==0)return 0; int res=INT_MAX; int sum=0; while(end&lt.

2020-06-28 15:31:23 91

原创 C++的substr、append、erase、to_string函数(很简单,但容易忘)

C++中string erase函数的使用erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos ); //注意,返回的是对象的引用(2)iterator erase ( iterator position );(3)iterator erase ( iterator first, iterator last );也就是说有三种用法:(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0

2020-06-27 15:49:11 122

原创 移除链表的重复节点(简单题)

哈希+双指针,很轻松的小题。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* removeDuplicateNodes(ListNode* head) { .

2020-06-26 23:27:09 71

原创 linux socket IPC(本地套接字domain)

socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。UNIX Domain Sock

2020-06-26 21:50:40 137

原创 linux UDP实现广播和组播

广播广播很简单,原理不解释了,这里实现的重点在于:1.对服务器端的套接字使用setsockopt函数开放广播权限2.指定要发送的IP(广播地址)+端口号3.客户端必须显式绑定端口号(和2的端口号要一样)例子:server.c#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/socket.h>#include <string.h>#inc

2020-06-26 16:11:56 221

原创 linux UDP的C/S模型

相较于TCP而言,UDP通信的形式更像是发短信。不需要在数据传输之前建立、维护连接。只专心获取数据就好。省去了三次握手的过程,通信速度可以大大提高,但与之伴随的通信的稳定性和正确率便得不到保证。因此,我们称UDP为“无连接的不可靠报文传递”。TCP面向字节流,UDP面向报文。那么与我们熟知的TCP相比,UDP有哪些优点和不足呢?由于无需创建连接,所以UDP开销较小,数据传输速度快,实时性较强。多用于对实时性要求较高的通信场合,如视频会议、电话会议等。但随之也伴随着数据传输不可靠,传输数据的正确率、传输顺

2020-06-25 22:36:30 77

原创 linux epoll反应堆模型

epoll反应堆模型的流程:epoll_create(); // 创建监听红黑树epoll_ctl(); // 向书上添加监听fdepoll_wait(); // 监听有客户端连接上来--->lfd调用acceptconn()--->将新创建的通信套接字的文件描述符cfd挂载到红黑树上监听读事件--->epoll_wait()返回--->cfd回调recvdata()--->将cfd摘下来监听写事件--->epoll_wait()返回--->cfd回调s

2020-06-25 15:23:36 91

原创 linux 基于网络C/S非阻塞模型的epoll ET触发模式(最常用的模型)

事件模型EPOLL事件有两种模型:Edge Triggered (ET) 边缘触发只有数据到来才触发,不管缓存区中是否还有数据。Level Triggered (LT) 水平触发只要缓存区中有数据都会触发。思考如下步骤:1.假定我们已经把一个用来从管道中读取数据的文件描述符(RFD)添加到epoll描述符。2.管道的另一端写入了2KB的数据3.调用epoll_wait,并且它会返回RFD,说明它已经准备好读取操作4.读取1KB的数据5.调用epoll_wait……在这个过程中,有两种工作

2020-06-24 16:59:31 100

epoll反应堆.zip

epoll反应堆.zip

2020-06-25

空空如也

空空如也

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

TA关注的人 TA的粉丝

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