代码随想录算法训练营day6(day7补) | 242.有效的字母异位词 349.两个数组的交集 202.快乐数
哈希表理论基础
哈希表的作用:一般哈希表都是用来快速判断一个元素是否出现集合里。
例如要查询一个名字是否在这所学校里。
要枚举的话时间复杂度是O(n),但如果使用哈希表的话,只需要O(1)就可以做到。
我们只需要初始化把这所学校里学生的名字都存在哈希表里,在查询的时候通过索引直接就可以知道这位同学在不在这所学校里了。
将学生姓名映射到哈希表上就涉及到了hash function,也就是哈希函数。
当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构。
数组
set(集合)
map(映射)
刷题笔记day6
242.有效的字母异位词
文章讲解:代码随想录
是否自己做出来通过全部用例:否
遇到的困难/犯的错误
直接看了题解。
自己写的代码
看了题解后写的代码:
class Solution {
public:
bool isAnagram(string s, string t) {
int counts1[26] = {0};
int counts2[26] = {0}; ...
以太网层级
车载以太网
以太网的层级结构
一般来说,以太网自下而上分为以下层级:
物理层(Physical Layer):在底部,包括物理介质(如双绞线、光纤等)和物理连接方式(如以太网插口)。
数据链路层(Data Link Layer):在物理层上方,包括以太网帧格式、帧的封装和解封装,以及物理地址(MAC地址)的管理。
网络层(Network Layer):在数据链路层上方,包括IP地址的分配和路由功能,负责将数据包从发送方传输到接收方。
传输层(Transport Layer):在网络层上方,提供端到端的可靠数据传输服务,通常使用传输控制协议(TCP)或用户数据报协议(UDP)。
应用层(Application Layer):在顶部,提供各种网络应用和服务,如HTTP(超文本传输协议)、SMTP(简单邮件传输协议)等。
除了物理层、UDP-NM、DOIP、SOME/IP、SD这五个模块为车载以太网技术协议规范之外,其余均为传统以太网技术。
名词解释:
AVB:音视频桥接。
ICMP:Internet Control Message Protocol(互联网控制报文协议),ping就 ...
代码随想录算法训练营day4 | 24.两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07.链表相交 142.环形链表II
刷题笔记day4
24.两两交换链表中的节点
文章讲解:代码随想录
是否自己做出来通过全部用例:否
遇到的困难/犯的错误
一直想着在原链表操作,发现不管怎样都无法正确改变链表内容。
设想:如果传入**类型,直接对让cur = *head就可以改变其内容。
但是题目只让传入*类型。
自己写的代码
看了题解后重写的代码:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyhead = new ListNode(0);
dummyhead->next = head;
ListNode* cur = dummyhead;
while (cur->next != NULL && cur->next->next != NULL) {
ListNode* tp = cur->next;
ListNode ...
代码随想录算法训练营day3 | 203.移除链表元素 707.设计链表 206.反转链表
链表理论基础
单链表
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域,一个是指针域(指向下一个节点),最后一个指针域指向NULL(空节点)。
双链表
单链表中的指针域只能指向节点的下一个节点。
双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。
双链表 既可以向前查询也可以向后查询。
链表的存储方式
链表不是像指针一样在内存中是连续分布的,是散落分布的,分配机制取决于操作系统的内存管理。
循环链表
循环链表,顾名思义,就是链表首尾相连。
循环链表可以用来解决约瑟夫环问题。
性能分析
插入/删除(时间复杂度
查询(时间复杂度)
适用场景
数组
O(n)
O(1)
数据量固定,频繁查找,较少增删
链表
O(1)
O(n)
数据量不定,较少查找,频繁增删
刷题笔记day3
203.移除链表元素
文章讲解:代码随想录
是否自己做出来通过全部用例:否
遇到的困难/犯的错误
while (temp != NULL && temp->val == val)
temp != NULL应该放在前面,不然 ...
代码随想录算法训练营day2 | 977. 有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II
刷题笔记day2
977. 有序数组的平方
文章讲解:代码随想录
视频讲解:哔哩哔哩
是否自己做出来通过全部用例:是
自己写的代码
只想到暴力解法,平方后再写排序算法进行排序。
遇到的困难/犯的错误
排序算法不需要自己写,直接有现成的库函数sort() 函数 可以用。
看了题解后的收获
利用了排序后的正负数平方后的特性,让自己进一步掌握了快慢指针法的思想,看了题解后自己又用快慢指针法重新写了一遍。
代码如下:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result(nums.size(), 0);
int i = 0;
int j = nums.size() - 1;
int k = nums.size() - 1;
while (i <= j) {
if (nums[j] ...
代码随想录算法训练营day1 | 704.二分查找 27.移动元素
数组理论基础
(一维)数组是存放在连续内存空间上的相同类型数据的集合。
数组下标从0开始。
数组内存地址连续。
正因如此,删除数据的时候难免要移动其他元素的位置。
注意array和vector区别:array不能删除元素,只能覆盖。
拓展
C++中二维数组的地址也是连续的。
但是在java中却是无规则的。
刷题笔记day1
704.二分查找
文章讲解:代码随想录
视频讲解:哔哩哔哩
是否自己做出来通过全部用例:是
遇到的困难/犯的错误
while (nums[midIndex] != target),导致找不到数据的时候陷入死循环。
int midIndex = leftIndex + (rightIndex - leftIndex) >> 1
注意>>优先级较低要加()。
自己的代码
用的是左闭右闭的方法来实现:
class Solution {
public:
int search(vector<int>& nums, int target) {
int leftIndex = 0;
...
网络编程
网络编程笔记
常用函数
inet_pton和inet_addr函数的区别
两者都是用于处理网络编程中地址的函数。
inet_pton:internet presentation to Network
inet_addr:internet address
头文件:<arpa/inet.h>(address and routing parameter area/internet)
函数原型:
int inet_pton(int af, const char *src, void *dst);
支持IPv4或IPv6地址表示转换为网络字节序的二进制形式,
af参数指定地址族,可以是AF_INET(address family internet,IPv4)或AF_INET6(IPv6);src参数是一个以字符串形式表示的IP地址;dist参数是一个指向存放网络地址转换结果的地址的指针。
转换成功返回1,否则返回0。
inet_addr:
头文件:<arpa/inet.h>
函数原型:in_addr_t inet_addr(const char *cp);
仅支持IPv4 ...
SOME/IP学习笔记
SOME/IP学习笔记
什么是SOME/IP?
SOME/IP概述
SOME/IP的全称是:Scalable Service-Oriented Middleware over IP。
字面理解:基于IP协议可拓展的面向服务的中间件。
概述:SOME/IP是一种汽车中间件解决方案,可用于控制消息。它为完美地适应不同尺寸和不同操作系统的设备而被设计。包括小型设备,如相机、AUTOSAR设备,以及音响主机或远程信息处理设备。它还确保SOME/IP支持信息娱乐域以及车辆中其他域的功能,允许SOME/IP用于大多数替换场景以及更传统的CAN场景。SOME/IP在以太网协议架构中位于第五层应用层,用于通信控制和服务发现。
SOME/IP缩略语
缩略语
描述
Client-Service-Instance-Entry
另一个ECU提供的服务实例的配置和所需数据在使用该服务(客户端)的ECU中应称为“客户端服务实例条目”
Field
字段代表一种状态,因此始终具有有效值,getter、setter和notfier都会对其执行操作
Finding a service instanc ...
C++八股
C++后端
熟悉C/C++,熟练使用C/C++的指针应用及内存管理,C++的封装继承多态,STL常用容器,C11常用特性(智能指针等) ,了解 Python,Gtest等。
熟悉常用设计模式(单例模式,工厂模式等)
熟悉Linux下vim开发环境,了解网络编程,IO多路复用,epoll等等。
熟悉OSI五层网络模型,熟悉TCP/IP,UDP,HTTP/HTTPS,DNS等网络协议,熟悉TCP三次握手,四次挥手,流量控制,拥塞控制等手段。
熟悉操作系统的进程通信、死锁、内存管理等知识。
熟练使用MySQL,熟悉MySQL索引、事务、存储引擎、锁机制。
熟悉常用的数据结构(链表、栈、队列、二叉树等),熟练使用排序,贪心,动态规划等算法。
熟悉Git,vscode工具使用。
C指针应用及内存管理
指针应用
指针存放某个对象的地址,其本身就是变量,本身就有地址,所以有指向指针的指针;可变,包括其指向的地址的改变和其指向的地址中所存放的数据的改变。
引用和指针的区别(拓展)
引用就就是变量的别名,从一而终,不可变,必须初始化。
不存在指向空值的引用,但是存在指向空值的指针。
内存管理
内存一 ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick Start
Create a new post
1$ hexo new "My New Post"
More info: Writing
Run server
1$ hexo server
More info: Server
Generate static files
1$ hexo generate
More info: Generating
Deploy to remote sites
1$ hexo deploy
More info: Deployment