数据结构与算法
文章平均质量分 78
Mr.liang呀
分享知识 探讨技术
展开
-
qi_an_xin
奇安信一面:先介绍项目迭代器++it和++it哪个好?前置迭代返回一个引用 后置的返回一个对象。临时对象会导致效率降低。网络字节序TCPdump抓包IP地址转网络字节序 pton:将用字符串表示的IP地址转换成用网络字节序表示的整数IP头部中校验和校验的内容Main函数执行之前的过程(一些系统调用库函数类似的)全双工通信 和半双工通信涉及到的协议 通信速率问题网络路由协议IP协议的一个核心任务就是数据报的路由。即决定发送数据报到目标机器的路径。IP数据报应该发送至哪个下一跳路由,以及原创 2022-05-26 10:25:11 · 253 阅读 · 0 评论 -
2022 5 字节实习一面--- Pico
文章目录第一部分 自我介绍+项目第二部分 基础知识第三部分 代码题第一部分 自我介绍+项目10min自我介绍和项目介绍(项目没怎么深挖,大概了解了一下)第二部分 基础知识20min左右;面试官是根据简历上的内容有针对性的提问的,有些知识在问你之前还会先问问你掌握的怎么样,平时自己做项目接触到的多嘛。挺人性化的哈哈哈哈 不会也没啥关系具体如下:ISO七层网络模型 每一层的作用以及每一层有哪些协议;Http状态码 直接问的503 这个好像很特别 ;TCP UDP的异同;三次握手 四次挥手原创 2022-05-13 13:17:54 · 972 阅读 · 0 评论 -
基础 (2022春)
文章目录【C++内存管理】【C++内存管理】参考原创 2022-04-21 10:10:44 · 682 阅读 · 0 评论 -
2022 春 字节题(六)
文章目录leetcode 210 课程表 IIleetcode 210 课程表 II现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1] 。返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回 任意原创 2022-04-10 22:28:16 · 280 阅读 · 0 评论 -
春 字节题(五)
文章目录leetcode 55 跳跃游戏 && leetcode 45 跳跃游戏IIleetcode 55 跳跃游戏 && leetcode 45 跳跃游戏II55给定一个非负整数数组nums,你最初位于数组的第一个下标,数组中的每个元素代表你在该位置可以跳跃的最大长度;判断是否能够到达最后一个下标;例如:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。原创 2022-03-26 12:27:44 · 2815 阅读 · 0 评论 -
排序算法 &&LRU缓存算法
leetcode 912 排序数组给定一个整数数组nums,请你将该数组升序排列;方法一:优化后的快排解法//快排用三数取中进行优化class Solution{public: //三数取中进行优化 void GetMid(vector<int>& nums, int left, int right) { int mid = left + (right - left) / 2; //中间元素下标 if (nums[left原创 2022-03-25 10:59:41 · 687 阅读 · 0 评论 -
春 字节题(四)
文章目录leetcode 198 打家劫舍leetcode 414 第三大的数leetcode 198 打家劫舍leetcode 414 第三大的数原创 2022-03-17 11:28:58 · 544 阅读 · 0 评论 -
2022春刷题---字节题(三)
回文链表题目要求:给定一个链表的头节点head,请你返回是否为回文链表;例如:输入:head=[1,2,3,3,2,1]输出:trueC++实现://回文链表class Solution{public: bool isPalindrome(ListNode* head) { stack<int>s; ListNode* p = head; while (p) { s.push(p->val); p = p->next;//将所有的原创 2022-03-11 10:45:11 · 1748 阅读 · 0 评论 -
基础知识(2022 春)
文章目录【C++ string和C中的Char*】【C++ string和C中的Char*】string是c++里的,不是c里的。用string存储字符串时,不用设定字符串的长度,而char要设定,string也不必担心内存是否足够等。还有就是,string有很强很方便的功能,比如可以方便的赋值,方便的比较大小。具体内容可以看看C++ primer......原创 2022-03-08 11:13:11 · 461 阅读 · 0 评论 -
笔记本题目 复习(一)
反转链表原创 2022-03-07 13:48:25 · 729 阅读 · 0 评论 -
字节题 春(二)
文章目录剑指offer 连续子数组的最大和leetcode 2 无重复字符的最长子串leetcode 11 盛最多水的容器leetcode 160 相交链表leetcode 1884 鸡蛋掉落剑指offer 连续子数组的最大和leetcode 2 无重复字符的最长子串leetcode 11 盛最多水的容器leetcode 160 相交链表leetcode 1884 鸡蛋掉落...原创 2022-03-03 17:05:47 · 456 阅读 · 0 评论 -
2022 春 刷题(一)
文章目录leetcode 209 长度最小的子数组leetcode 209 长度最小的子数组算法要求:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。例如:输入 target=7 nums=[2.3.1.2.4.3]输出:2 [4,3]是符合要求的最短数组用滑动窗口解法:算法实现:原创 2022-02-23 10:10:09 · 926 阅读 · 0 评论 -
leetcode 8 将字符串转换成整数atoi(有限状态机解法)中等
针对本题引入自动机:字符串处理的题目往往涉及复杂的流程以及条件情况,如果直接上手写程序,一不小心就会写出极其臃肿的代码。因此,为了有条理地分析每个输入字符的处理方法,我们可以使用自动机这个概念:我们的程序在每个时刻有一个状态 s,每次从序列中输入一个字符 c,并根据字符 c 转移到下一个状态 s’。这样,我们只需要建立一个覆盖所有情况的从 s 与 c 映射到 s’ 的表格即可解决题目中的问题代码实现:#include<iostream>using namespace std;#原创 2022-01-12 12:35:52 · 2537 阅读 · 0 评论 -
链表相关(一)
大师傅敢死队风格原创 2022-01-07 11:38:51 · 310 阅读 · 0 评论 -
动态规划相关
文章目录理论基础什么是动态规划动态规划的解题步骤动态规划如何debug以斐波那契数列 (leetcode509)为例说明理论基础什么是动态规划动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品原创 2022-01-06 12:47:06 · 499 阅读 · 0 评论 -
排列组合问题
提出需求:从 n 个人里面,选出 k 个人,有多少中选法。解题思路:这个问题用递归求解,要从 n 个里面选 k 个,首先要判断,n 和 k 的关系,如果n小于k;则没有选法,如果等于,则只有一种选法;如果大于,我们可以分成,选中当前的这个和不选中当前这个来进行递归,每一次选择总量都减一;选中当前这个的话,要从剩下的 n-1 个中选择 k-1个;不选中的话,要从剩下的 n-1 中选择 k 个,如果要选择的数量变成0的话,标识着找到一种选法,返回1。代码实现:#include<iostrea原创 2022-01-05 22:59:45 · 388 阅读 · 0 评论 -
二叉树相关(一)
提出需求:用哈希实现:#include<iostream>using namespace std;#include<vector>#include<unordered_map>#include<string>#include<algorithm>class Solution{public: vector<vector<string>>groupAnagrams(vector<string&原创 2022-01-05 22:37:39 · 754 阅读 · 0 评论 -
设计模式之 外观模式 && 模板方法模式
**外观模式**为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。设计分为三个阶段:首先,设计初期,应该要有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低,其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用也都会产生很多很小的类,这本是好事,但也给外部调用他们的用户程序带来了使用上的困难原创 2022-01-05 21:38:51 · 267 阅读 · 0 评论 -
滴滴实习面经
滴滴出行 工程框架与算法 秋储实习生面试2121.6.22 一面 至今没有二面的通知 凉凉!自我介绍 没问C++基础 没问数据库聊项目(以下都是项目里的内容 大概40min 全程1h进程 线程 的区别 优缺点 TCP/IP UDP各自的优缺点 可靠传输 流量控制 拥塞控制 三次握手 四次挥手 为什么不两次握手 time_wait过多会对系统有什么影响为什么都用进程 不考虑在一个进程下开辟三个线程?网络通信模型 7层 socket通信信号量机制的原子性 信号量加 减 恢复 三个过程是如何原创 2021-12-29 16:28:18 · 508 阅读 · 0 评论 -
设计模式之 建造者模式 &&观察者模式
建造者模式:将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示;建造者模式的使用情况:主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。建造模式ide好处:使得建造代码与表示代码分离,由于建造隐藏了该产品是如何组装的,所以若需改变一个产品的内部表示,只需在定义一个具体的建造者就可以了。示例一://建造者模式// 示例一://建造胖人和瘦人。先弄一个构建人的抽象基类。//然后创建胖人和兽人类,由基类继承而来原创 2021-12-29 15:11:42 · 630 阅读 · 0 评论 -
设计模式之 装饰模式&&原型模式
一、装饰模式:1 基础理论:装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活装饰模式总结:为已有功能动态地添加更多功能的一种方式。当系统需要新功能时,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责和主要行为,但这种做法的问题是在主类中加入了新的字段、新的方法、和新的逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定条件下才会执行的特殊行为的需要。装饰模式提供了一种很好的解决方案,他把每个要装饰的功能放在单独原创 2021-12-28 14:24:52 · 268 阅读 · 0 评论 -
常见的排序算法总结【重点】
**排序算法总结(重点)**记住最常用的几个排序的时间复杂度:插入排序O(n^2) 选择排序O(n^2) 冒泡排序O(n^2)堆排序 O(nlogn) 快排 O(nlogn)稳定的排序有:基数排序 冒泡排序 直接插入排序 折半插入排序 归并排序介绍几个最常用的排序算法:1、 插入排序 稳定 O(n^2):对于一个待排序数组来说,其初始有序数组元素个数为1,然后从第二个元素,插入到有序数组中。对于每一次插入操作,从后往前遍历当前有序数组,如果当前元素大于要插入的元素,则后移一位原创 2021-12-26 21:51:56 · 1422 阅读 · 0 评论 -
C++虚函数表剖析(知乎明澈讲解)
C++虚函数机制概述:为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。类的虚表:每个包含了虚函数的类都包含一个虚表。我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚函数,换句话说,一个类继承了包含虚函数的基类,那么这个类也拥有自己的虚表。我们来看以下的代码。类A包含虚函数vfunc1,vfunc2,由于类A包含虚函数,故类A原创 2021-12-25 14:06:12 · 480 阅读 · 1 评论 -
准备的基础知识 (一)
这里是总结了20年五月份为了实习二准备的一些基础知识,之前的版本比较乱,现在趁着有时间好好整理一下。内容涵盖:计网 计原 OS 数据结构和算法 Linux基础 C++基础 设计模式等面试常考问题文章目录const 和 #define的区别【进程与线程】【C++内存】【死锁相关】【TCP机制】TCP实现可靠传输的机制TCP协议的特点【static关键字】【C++强转】【C++面向对象】封装,继承,多态重载、重写【C语言与C++的区别】【数组和指针】【指针和引用】【C++11新特性】【STL】【vect原创 2021-12-23 13:22:05 · 1220 阅读 · 0 评论 -
准备的题目(一)
Leetcode 24 两两交换链表中的节点题目背景:示例:输入:1->2->3->4输出:2->1->4->3实现代码:struct ListNode{ int val; ListNode* next; ListNode(int x) :val(x), next(NULL) {};};class Solution{public: ListNode* swapPairs(ListNode* head) { ListNode* dum原创 2021-12-23 12:00:46 · 363 阅读 · 0 评论 -
理解C中的结构体
结构体结构体的声明:“结构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量”。例如下面这俩:struct tag{ member_list;}variable_list;在这里插入代码片ttypedef struct Stu{ char name[20]; int age; char sex[5]; char id[20];}Stu;//创建一个对象Stu,同时给这个Stu的name age sex id赋值初始化 在这里插入代码片结构原创 2021-12-18 22:39:27 · 128 阅读 · 0 评论 -
实现一个医院排版系统(小item)&& 对getline()函数的深入理解
(学习)用C++实现一个小型的排班系统:话不多说 直接上代码:#include<isotream>#include<string>#include<vector>#include<stdlib.h>#include<fstream> //设置流操作符#include<istream> //getline用到#include<string>using namespace std;class ABC{p原创 2021-12-18 22:16:28 · 486 阅读 · 0 评论 -
设计模式之 工厂方法模式&&抽象工厂模式
简单工厂模式的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择动态的实例化相关类,对于客客户端来说是去除了对产品的依赖。但是就是因为这样,每次添加一个新的选择,就要修改工厂类中的switch逻辑分支,这显然违背了开放-封闭原则;工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。工厂方法实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题依然存在,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端进行,如果想要加功能。则.原创 2021-12-18 16:20:59 · 419 阅读 · 0 评论 -
系统设计循环队列
**系统设计循环队列**一 题目来源:循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出),有一定容量原则并且队尾被连接在队首之后以形成一个循环支持任意类型数据获取 第一大 第二大 avg 等操作二 代码实现#include <iostream>using namespace std;//单链表 template <class T>struct Node{ T data; //why 这里为什么不用基本类型指针呢 T* ?使原创 2021-12-17 23:09:44 · 448 阅读 · 0 评论 -
leetcode 22 括号生成
题目背景:中等给定数字n,n代表生成的括号的对数,设计函数实现生成所有可能的并且有效的额括号组合输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]输入:n=1输出:["()"]在这里插入代码片算法思想:DFS:深度搜索代码实现://深度搜索 DFS + 剪枝 //剪枝条件:左括号的数目小于右括号的数目 以及左括号和右括号的数目均大于nclass Solution{public: vector<strin原创 2021-12-16 14:48:38 · 133 阅读 · 0 评论 -
模糊概念 之 时间复杂度和空间复杂度
在leetcode做了这么多题了,总是会看到时间复杂度和空间复杂度这两个字眼,但是能把题做出来调试好已经万事大吉咯!今天恰好看到专门讲述这俩概念的文章,希望能加深理解~前言所谓算法,其实就是我们用来操作数据、解决程序问题的一组方法。针对同一个问题,我们可以采用不同的算法,然后实现相同的结果。但是针对不同的算法,对于时间和资源的消耗却有不同的差别。而为了分析不同算法的效率,我们常常从 时间 和 空间 两个方面来对比,然后从中挑出最适合我们的解决方案。本文主要从时间复杂度和空间复杂度的定义说起,然后介原创 2021-12-15 19:59:26 · 330 阅读 · 0 评论 -
四种“不使用第三方变量就可以交换两个变量值”的方法
问题引入:遇到交换变量值的问题,通常我们的做法是:定义一个新的变量,借助它完成交换。代码如下:t = a;a = b; b = t;在这里插入代码片但问题的重点是“不使用第三方变量”,那就变得“可爱”起来了。思考过后,抛出以下四种方法来解决该问题:变量本身交换数值;算术运算;指针地址操作;位运算第三种方法我有点晕!!第一种方法:变量本身交换数值b = (a + b) - (a = b);首先执行 a + b 操作,然后将 b 赋值给 a,则 b = a + b - b =原创 2021-12-15 19:12:21 · 6420 阅读 · 3 评论 -
Leetcode 20 有效的括号&&Leetcode 21合并两个有序链表(俩easy题)
Leetcode 20 有效的括号题目要求:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例:输入:s="(){}[]" ;输出:true输入:s="({[]})"输出:true直接上代码!//利用栈先进后出的特性 实现相匹配符号的增消 从而实现是不是有效//当遍历到一个字符时,将与其匹配的字符放入栈中,当在对应的位置发现字符不一样的时候,原创 2021-12-15 12:33:37 · 72 阅读 · 0 评论