数据结构和算法
文章平均质量分 74
aFakeProgramer
Adaptive AUTOSAR的技术专家,AUTOSAR中国官方培训讲师,具备深厚的汽车行业知识和以太网通信技能。SOME/IP、IPC、DDS、DoIP、UDS、TSN和SOA架构,MQTT,加密,操作系统,v2x,以及c++和Python编程语言。改写成个人简介
展开
-
QNX的调度算法
作为一个硬实时操作系统,QNX是一个基于优先级抢占的系统。这也导致其基本调度算法相对比较简单。因为不需要像别的通用操作系统考虑一些复杂的“公平性”,只需要保证“优先级最高的线程最优先得到 CPU”就可以了。转载 2022-10-24 08:59:03 · 1219 阅读 · 0 评论 -
爬楼梯的算法面试题
一个小孩爬楼梯,每次可以爬1个、2个或3个台阶,编程求出这个小孩爬完10个台阶的楼梯一共有多少种走法。def main(): k = 0 # 构建函数1*x+2*y+3*z = 10 # 确定x取值范围 for x in range(0,11): # 确定y取值范围 for y in range(0,6): # 确定z取值范围 for z in range(0, 4):原创 2021-01-18 13:54:09 · 1165 阅读 · 3 评论 -
二叉树DFS/BFS实现(C++)
二叉树DFS/BFS实现(C语言)深度优先搜索算法(Depth First Search)DFS是搜索算法的一种。它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。如上图所示的二叉树:A 是第一个访问的,然后顺序是 B、D,然后是 E。接着...原创 2020-06-29 15:47:24 · 1907 阅读 · 0 评论 -
你真的了解二分查找吗?
传统的二分查找算法提到二分查找,相信很多人都不陌生,大学学数据结构的时候老师都讲过,它是一种效率较高的查找方法,基于顺序存储结构的线性表,且要求表中元素按关键字有序排列。假设元素非递减排列,则常见的二分查找过程如下:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功; 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表; 否则进一步查找后一子表。 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查转载 2020-06-24 17:44:31 · 157 阅读 · 0 评论 -
STL中的set详解
1.关于setC++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储转载 2020-06-24 16:14:40 · 875 阅读 · 0 评论 -
厄拉多塞筛法 快速求质数 /回文子串
西元前250年,希腊数学家厄拉多塞(Eeatosthese)想到了一个非常美妙的质数筛法,减少了逐一检查每个数的的步骤,可以比较简单的从一大堆数字之中,筛选出质数来,这方法被称作厄拉多塞筛法(Sieve of Eeatosthese)。具体操作:先将 2~n 的各个数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数 是5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于 n 的各数原创 2020-06-19 22:41:24 · 531 阅读 · 0 评论 -
深度优先及广度优先算法
深度优先搜索算法DFS广度优先搜索算法BFS在猪呢个算法知识点中占比非常大,应用最多的地方是对图进行遍历(树以为是图的一种)深度优先搜索算法DFSDFS解决的 是连通性的问题,及给定两个起始点(或某种起始状态)和一个终点(某种最终状态),判断是否有一条路径能从起点连接到终点。很多情况下,联通的路径很多条,只需要找出一条即可,DFS只关心路径存在与否,不在乎其长短。算法的思想:从起点出发,选择一个可选方向不断向前,直到无法继续为止。然后尝试另外一种方向,直到最后走到终点。.原创 2020-06-17 18:29:14 · 219 阅读 · 0 评论 -
leetcode刷题6.16 树的层序遍历,树的序列化
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]/** * Definition for a binary tree node. * struct TreeNode { * int val; * Tree...原创 2020-06-16 16:55:38 · 135 阅读 · 0 评论 -
求解两个字符串的最长公共子序列
一,问题描述给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA二,算法求解这是一个动态规划的题目。对于可用动态规划求解的问题,一般有两个特征:①最优子结构;②重叠子问题①最优子结构设 X=(x1,x2,.....xn) 和 Y={y1,y2,.....ym} 是两个序列,将 X 和 Y 的最长公共子序列记为LCS(X,转载 2020-06-16 09:38:22 · 8940 阅读 · 0 评论 -
二分搜索binary search和贪婪算法
二分搜索binary search定义:二分搜索也称折半搜索,是一种在有序数组中查找某一特定元素的搜索算法。运用前提:必须是排好序的。输入并不一定是数组,也可能是给定一个区间和终止的位置。优点:、二分搜索也叫对数搜索,其时间复杂度为O(log n),是一种非常高效的搜索。缺点:要求待查找的数组或者区间是排好序的 如果要求对数组进行动态删除和插入操作,并完成查找,平均复杂度会变为O(n)采取自平衡二叉查找树 可在O(nlogn)的时间内用给定的数据构建出一颗二叉查找树。 可在原创 2020-06-11 14:44:53 · 1437 阅读 · 0 评论 -
6月8 力扣 回文数和验证回文串
9. 回文数难度简单1057收藏分享切换为英文关注反馈判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶:你能不将整数转为字符串来解决这.原创 2020-06-08 10:18:18 · 200 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点。
输入一个链表,输出该链表中倒数第k个结点。思路1:一次循环得到节点的个数,然后使用节点的个数减去倒数的k,就得到了正数的第count-k个,返回这个节点就可以了。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class...原创 2019-11-04 09:11:30 · 294 阅读 · 0 评论 -
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution ...原创 2019-11-03 23:11:08 · 126 阅读 · 0 评论 -
数据结构 二叉树的建立与遍历
https://blog.csdn.net/qq_37043100/article/details/80171535转载 2019-11-03 18:40:34 · 102 阅读 · 0 评论 -
输入一个英文句子,翻转句子中的单词,要求单词内的字符顺序不变。 如:I am a student. 转换成 student. a am I
输入一个英文句子,翻转句子中的单词,要求单词内的字符顺序不变。如:I am a student. 转换成 student. a am I 算法分析:1、通过ReverseString(s,0,5)交换字符串第0位和第5位的字符,将I am a student. 转换成a am I student.2、然后将字符向左移动一位变成 am I student.a3、...原创 2018-08-06 14:01:41 · 2270 阅读 · 0 评论 -
数据结构学习笔记1
程序设计=数据结构+算法谈谈算法 数据结构与算法是“好基友”,如果单独谈数据结构,或者单独谈算法是没什么意义的。来一个牛叉的算法吧!计算1+2+3+4+.........100,程序怎么写?以前我还很傻B地用for循环来写这个小程序,傻B小程序如下:int i, sum=0,n=100;for(i=1;i<=n;i++){ sum=sum+i;}printf("%d",sum);这个程...转载 2018-08-15 22:21:23 · 140 阅读 · 0 评论 -
数据结构之栈篇
栈:后进先出话不多说先上代码:头文件MyStack.h#ifndef MYSTACK_H#define MYSTACK_Hclass MyStack{public: MyStack(int size);//分配内存初始化栈空间,设定栈容量,栈顶 ~MyStack();//回收栈空间内存 bool stackEmpty();//判断栈是否为空,空返回ture,非空返回fa...翻译 2018-09-05 14:16:23 · 138 阅读 · 0 评论 -
直接插入排序算法实现学习
#include <iostream>using namespace std;void show(int *a,int n){ for(int i=0;i<n;i++) { cout<<a[i]<<"\t"; } cout<<endl;}void InsertSort(int *k,...原创 2018-11-27 11:14:02 · 178 阅读 · 0 评论 -
二分查找法和使用二分法查找的注意事项
使用二分法查找的必要条件:1、数组有序2、注意数据类型是有范围的,不要溢出。3、采用L+(R-L)/2表达式更合适4、注意:start = mid +1 和 end=mid -1,防止死循环5、数据量不可过大1024个人,有一个人有艾滋病。需要血液检测。如何快速找出这个人。所有人血液都采取过来。把512个人血液混合起来512 512 1次淘汰512个人...翻译 2018-11-28 14:29:32 · 2383 阅读 · 0 评论 -
使用程序写出求出1!+2!+...+64!的运算结果。考虑溢出的问题
求10的阶乘的和int n=10;int num1=1;int num2=1;for(int i=1;i<=n;i++){ num1=1; for(int j=2;j<=i;j++) { num1*=j; } sum+=num1;}/*写一个数组,数组每一位存一位数,就可以保存一个很大的数当要处理很大的数的乘法的时候,超出了数据的保存范...原创 2018-12-05 14:12:49 · 262 阅读 · 0 评论 -
常用数据结构:树的几种遍历方式整理
https://blog.csdn.net/noob_cliam/article/details/82800353一、定义:1,树型结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,直观看来,树是以分支关系定义的层次结构。2,树(Tree) 是 n (n >= 0)个 结点的有限集。在任意一棵非空树中。(1)有且仅有一个特定的称为根(root)的结点;(2)当(n ...转载 2019-06-17 15:07:09 · 897 阅读 · 0 评论 -
为什么要序列化,如何序列化和反序列化?
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。说的再直接点,序列化的目的就是为了跨进程传递格式化数据一个原因是将对象的状态保持在存储媒体中,...转载 2019-07-11 18:00:47 · 3041 阅读 · 0 评论 -
算法复杂度时间的体现举例
-1 1 -1 1 -1 ....-1^n 这个样的数列相加,不同的算法的复杂度对比可以学习时间怎么用。#include <iostream>#include <cmath>#include <ctime>using namespace std;const int n=1e7;int sum1(int n){ int sum=0;...原创 2019-09-11 21:39:43 · 227 阅读 · 0 评论 -
选择排序和冒泡排序
void select_sort(int a[],int n)//选择排序{ //选择排序,每次选择最小的放在第一个位置,然后下次从第二个位置开始 for(i=0;i<n-1;++i) { j=i;//给下标放在一开始的位置 for(k=i+1;k<n;++k) { if(a[k]&l...翻译 2018-08-01 15:34:38 · 151 阅读 · 0 评论