笔记
记录在学习过程中的一些总结与心得技巧
wszhou1997
为世界之光
展开
-
冒泡排序
冒泡排序:冒泡排序重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。算法分析:时间复杂度:最好情况:O(n)最坏情况:O(n^2)平均情况:O(n^2)算法稳定性:稳定排序算法代码实现:cl原创 2020-05-27 20:50:55 · 138 阅读 · 0 评论 -
回文串
回文串:一个正读和反读都一样的字符串,如"level"判断一个字符串是否是回文串的方法:双指针,i指向字符串s头部,j指向字符串s尾部若s[i] == s[j],则i++,j–,直到i >= j则为回文串若s[i] != s[j],则不为回文串class Solution {public: bool isPalindrome(string str) { while (i < j) { if(str[i] != str[j]) {原创 2020-05-27 20:33:47 · 692 阅读 · 1 评论 -
拓扑排序
拓扑排序对一个有向无环图(DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。leetcode实例:207.课程表方法一:BFS示例:n = 6, 先决条件表:[ [3, 0], [3, 1], [4, 1], [4, 2原创 2020-05-18 22:53:48 · 281 阅读 · 0 评论 -
随机打乱算法-Fisher–Yates shuffle 洗牌算法
Fisher–Yates shuffle 洗牌算法:是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。这个算法生成的随机排列是等概率的,同时这个算法非常高效。算法步骤:1.写下从 1 到 N 的数字2.取一个从 1 到剩下的数字(包括这个数字)的随机数 k3.从低位开始,得到第 k 个数字(这个数字还没有被取出),把它写在独立的一个列表的最后一位4.重复第 2 步,直到所有的数字都被取出5.第 3 步写出的这个序列,现在就是原始数字的随机排列迭代思路:每次迭代时交换这个被取出原创 2020-05-16 12:09:06 · 2143 阅读 · 0 评论 -
前缀和笔记
前缀和:前缀和是一个数组的某项下标之前(包括此项元素)的所有数组元素的和。一维前缀和:sum[i] = sum[i-1] + a[i],这样就可以得到前i个数的和根据上述表达式我们可以以O(1)求出区间[i,j]的区间和sum[i,j] = b[j] - b[i-1]二维前缀和:二维前缀和数组里每一个位置都表示原数组当前index左上方的数字的和。leetcode前缀和题目:560. 和为K的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例原创 2020-05-15 10:53:15 · 197 阅读 · 0 评论 -
必学科目与必会数据结构与算法
必学科目:1.C++ primer2.数据结构与算法3.计算机网络4.计算机操作系统5.计算机组成原理6.计算机编译原理必掌握数据结构与算法:数据结构:1.线性表(1)数组 – 动态数组(2)栈(3)队列 – 普通队列 阻塞队列 并发队列 双端队列(4)链表 – 单链表 双向循环链表 双向链表 循环链表2.散列表(1)散列函数(2)冲突算法 – 链表法 开放寻址 其他(3)位图(4)动态扩容3.树(1)二叉树 – 二叉查找树 平衡二叉树 平衡二叉原创 2020-05-14 22:47:10 · 299 阅读 · 0 评论