算法笔记
经纬的无疆
嵌入式
展开
-
算法基础例一冒泡、选择、插入
概述因为快要找工作了,最近在看左神的算法视频课程,打算用博客的方式记录一下课程中的所有例程。如果有侵权请告知,立即删。冒泡排序冒泡排序简单的理解就是:相邻元素依次比较,小的数放前面,大的数放后面。例如 输入数据6 1 7 5 4 6和1进行比较,6大(1小),则顺序变成1 6 7 5 4同理6和7比较,7大(6小),则顺序不变还是1 6 7 5 47和5比较,5小(7大),则顺序为1 6...原创 2019-06-04 22:32:08 · 160 阅读 · 0 评论 -
算法基础练习题《剑指offer》三
用两个栈实现队列题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路:用两个栈,一个Data栈,用来放Push数据,另外一个Temp栈,用来复制Data栈里面的内容。进入Data栈里面的数据是先入后出,再从Data出来压入Temp栈里面也是先入后出,两次的先入后出就变成了队列。当然需要注意数据压入Temp栈需要条件:1、Temp栈为空的时候,否则会...原创 2019-07-21 22:03:01 · 216 阅读 · 0 评论 -
算法基础练习题《剑指offer》二
替换空格题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路:如果直接是遇到空格就替换,因为替换的数量是三,而空格的数量是一,这样替换后面的字符串都得移动,效率比较低,不如从后往前来做替换。C++程序class Solution {public: void re...原创 2019-07-21 19:52:47 · 156 阅读 · 0 评论 -
算法基础练习题《剑指offer》一
二维数组中的查找题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:数组既然都排好序了,可以从最左下角开始找,若要找的数大于元素,则列增加,向右走一步;若要找的数小于元素,则行增加,向上走一步。C++程序class Solution {...原创 2019-07-21 19:39:02 · 268 阅读 · 0 评论 -
算法基础例八数组实现栈和队列
数组实现一定大小的栈结构 用数组实现一定大小的栈,栈是先进后出的结构,这个实现起来比较简单。直接看程序即可。#include <iostream>using namespace std;#define NUM 5 //栈大小 //声明一个类 class Mystack{ private: //私有变量 int...原创 2019-07-17 16:21:48 · 148 阅读 · 0 评论 -
算法基础例七桶排序
桶排序 桶排序是一种非基于比较的排序,和之前说的排序方法不同,这种排序方法和被排序的样本的实际数据状况很有关系,在实际中并不常见。时间复杂度为O(N),额外空间复杂度O(N)。是一种稳定的排序。 下面以一道例题来看。给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用...原创 2019-07-07 11:24:22 · 199 阅读 · 0 评论 -
算法基础例六堆排序
堆排序 堆排序涉及到数据结构中的内容,但也是各种笔试面试常考的,所以有必要做一下笔记来记录一下。堆排是将一个数组想象成一个完全二叉树,完全二叉树是由满二叉树或者从左往右依次补齐的二叉树组成。 已知完全二叉树的一个节点下标为i 则它的左子节点下标为2*i+1 它的右子节点为下标为2*i+2,...原创 2019-07-06 10:34:50 · 210 阅读 · 0 评论 -
算法基础例五快速排序
快速排序原创 2019-06-17 20:28:48 · 168 阅读 · 0 评论 -
算法基础例四荷兰国旗问题
荷兰国旗问题荷兰国旗问题: 给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求 额外空间复杂度O(1),时间复杂度O(N)解题思路:假设把数组分成三部分,小于num的区域,等于num的区域,大于num的区域。小于num的区域右边的前一个下标记为Less,等于num的区域最右边的下标记为cur,大于num的区域...原创 2019-06-11 22:04:42 · 243 阅读 · 0 评论 -
算法基础例三小和问题和逆序对问题
小和问题在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。举个简单的例子:给一个数组1 3 4 2 61左边比1小的数,没有;3左边比3小的数,1;4左边比4小的数,1、3;2左边比2小的数,1;6左边比6小的数,1 、3、 4、 2;所以小和为1+1+3+1+1+3+4+2 = 16;解题思路:一种可以用暴力排序的方法,从第一个元素开始,...原创 2019-06-10 22:34:40 · 158 阅读 · 0 评论 -
算法基础例二归并排序
归并排序归并排序用到了递归的思想,相比较冒泡排序、选择排序和插入排序(时间复杂度为 O(NN),时间复杂度为O(NlogN),当样本量N很大的时候,要比这三种排序方法要好很多。归并排序的思想是这样的:先将需要排序的数组分成左半部分和右半部分(当N很大时候不需要考虑N到底是奇数还是偶数),对左半部分和右半部分分别进行排序,两部分排好序后再进行整体排序。在对左半部分排序时,同样对左半部分分成两部分...原创 2019-06-08 17:07:26 · 103 阅读 · 0 评论 -
算法基础练习题《剑指offer》四
顺时针打印矩阵题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路:这个数据列出来是个矩形,也就是四条边的打印,完成四条边的打印之后左上角和右下角的坐标向里靠近一位...原创 2019-07-21 22:17:08 · 173 阅读 · 0 评论