算法
星尘如我
技术+表达,坚定自己的职业道路。
展开
-
单调递减栈
根据每日气温列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用0来代替。例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。提示:气温列表长度的范围是[1, 30000]。每个气温的...原创 2019-10-31 08:22:58 · 1370 阅读 · 0 评论 -
字母异位词分组
LeetCode的一个题目,记录一个巧妙的解法,刚看到是感觉脑洞大开。以vector<string>作为value值这是我没有想到的。 unordered_map<string, vector<string>> dicts; vector<vector<string>> ret; for (auto str : strs)...原创 2019-10-17 16:38:07 · 136 阅读 · 0 评论 -
STL各种数据结构及其底层实现
STL各种数据结构及其底层实现vector:底层数据结构为数组 ,支持快速随机访问 。扩容规则为:当我们新建一个vector的时候,会首先分配给他一片连续的内存空间,如std::vector<int> vec,当通过push_back向其中增加元素时,如果初始分配空间已满,就会引起vector扩容,其扩容规则在gcc下以2倍方式完成:首先重新申请一个2倍大的内存空间;然后将原空间的...转载 2019-10-12 15:41:49 · 337 阅读 · 0 评论 -
广度优先搜索算法解迷宫问题
前面有使用深度优先算法来解迷宫问题,思路是使用递归的方法,先进行深度的尝试,找到或者无法抵达时返回上一级函数继续执行。本文使用广度优先算法,思路如下:如图在(1,1)的位置开始,广度优先算法的步骤是搜索一步能够抵达的所有位置作为第一层,然后在上一层的基础上再走一步,并且不走重复的格子,作为下一层,这样一层一层的搜索,达到终点再停止。下面程序用广度搜索算法解决迷宫的问题,数据结构十分巧妙...原创 2019-02-19 21:14:36 · 1400 阅读 · 0 评论 -
9*9数独问题——深度搜索算法
转自:http://blog.csdn.net/qq_31558353/article/details/50615760作者原来的程序有问题,会改变到已有的数值。我在原有的基础上加了book标记,修改后验证OK。数独是经典的逻辑问题,也可以使用DFS算法求解,下面短短几十行代码,就解决了数独的问题。计算机真是个好东西啊!#include "pch.h"#include<s...转载 2019-03-01 22:06:26 · 5352 阅读 · 1 评论 -
深度搜索算法查找最短路径
如图,百度地图上有5个地点,各个地点间是单向的路径,试求出从1到5的最短路径。从图中可以得到一个5*5的二维矩阵,利用深度搜索算法,求出最短路径。从最后的运行结果,可以直观的看出搜索的过程代码实现如下:#include "pch.h"#include <stdio.h>#include <stdlib.h>#include <vector&g...原创 2019-02-27 11:05:04 · 4567 阅读 · 0 评论 -
优美的删除链表节点实现
今天在LeetCode上看到一段非常优美的删除链表节点代码struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode *removeElements(ListNode *head, int val){ if (!head) return he...原创 2019-03-30 21:38:20 · 145 阅读 · 0 评论 -
两数之和
给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]这是数据结...原创 2019-09-19 09:17:54 · 89 阅读 · 0 评论 -
递归和迭代的区别、联系、优缺点及实例对比
1.概念区分递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合.使用递归要注意的有两点:1)递归就是在过程或函数里面调用自身;2)在使用递归时,必须有一个明确的递归结束条件...转载 2019-09-26 10:34:37 · 1575 阅读 · 0 评论 -
栈
前面学习了队列,队列是“先进先出”的数据结构。现在我们学习“后进先出”的数据结构,也就是栈。利用栈的特性,可以很方便的判断一串字符串是不是回文字符串。#include <stdio.h>using namespace std;int main(){ /* 题目:利用栈判断输入的字符串是不是回文 */ char str[128] = "12345654321...原创 2019-02-13 12:12:00 · 107 阅读 · 0 评论 -
队列
队列是一种特殊的线性结构。它只允许在队列的首部(head)进行删除操作,称为“出队”,而在队列的尾部(tail)进行插入操作,称为“入队”。当队列中没有元素时(即head==tail),称为空队列。在我们的日常生活中,有很多情况都符合队列的特性。比如买票,每个排队买票的窗口就是一个队列。在这个队列当中,新来的人总是站在队列的最后面,来得越早的人越靠前,也就越早能买到票,就是先来的人先服务,我们...原创 2019-02-13 11:27:19 · 133 阅读 · 0 评论 -
快速排序
冒泡排序解决了桶排序浪费空间的问题,但算法效率却浪费了很多。有没有效率又高,又不浪费空间的算法呢?答案就是“快速排序”。简单说,快速排序就是使用“二分法”,以待排序数组第一个数为基准数,安排两个“哨兵”,左哨兵从左到右寻找第一个大于基准数的数,右哨兵从右到左寻找第一个小于基准数的数,找到则交换。当两个哨兵相遇时,再对相遇点两边的两个数组进行递归排序。#include<stdio....原创 2019-02-12 23:17:18 · 84 阅读 · 0 评论 -
炸弹人
对于80后来说,小霸王是抹不去的记忆,还记得当年有一个炸弹人游戏吗?看看下面这一关应该放置在什么地方才能炸到最多的敌人,炸弹能炸到最远距离,碰到墙就停止。以下程序就是求解上面问题的:#include "stdio.h"#include <windows.h>using namespace std;char iGameMap[13][13] = { '#'...原创 2019-02-15 01:12:37 · 718 阅读 · 0 评论 -
深度优先搜索算法求解排队问题
排队问题是一个非常常见的问题,可以简化为N个不同的数放在不同的位置,每个数在每个位置上只出现一次。深度优先搜索算法关键在于解决“当下应该怎么做”,至于“下一步应该怎么做”是与“当下应该怎么做”是一样的。#include <stdio.h>const int CNT = 4;//4个数的排列//存放数值int a[CNT] = { 0 };//标记CNT个数是否已经放置...原创 2019-02-15 12:31:57 · 623 阅读 · 1 评论 -
深度优先搜索算法解ABC + DEF = GHI问题
用深度优先搜索算法解排队问题的时候,你一定发现这跟前面枚举的题目很像,只是打印的条件不一样而已。稍微改改即可完成求解。#include <stdio.h>const int CNT = 9;//9个数的排列//存放数值int a[CNT] = { 0 };//标记CNT个数是否已经放置bool book[CNT] = { false };int iSum = 0;...原创 2019-02-15 13:12:34 · 1578 阅读 · 0 评论 -
图的遍历——深度优先搜索
如图,怎么用数据结构来表示这个图呢?最常用是用一个二维矩阵来存储。如下图所示,0表示自己到自己,1表示两点直接有连线,∞表示没有连接。这种表示法称为图的邻接矩阵表示法可以看到得到的二维矩阵是对称的,这是因为图是没有方向的。下面程序实现深度优先搜索算法遍历图#include "pch.h"#include<stdio.h>#include<stdlib.h...原创 2019-02-21 15:12:03 · 579 阅读 · 0 评论 -
图的遍历——广度优先搜索
按照图的广度优先搜索算法,那么可以很直观的看出上一篇文章中图的遍历顺序如下程序实现如下:#include "pch.h"#include<stdio.h>#include<stdlib.h>using namespace std;const int P_Num = 5;#define N 10000const int iTreeMap[P_Num...原创 2019-02-21 15:47:29 · 279 阅读 · 0 评论 -
深度优先搜索算法解迷宫问题
如图是一个矩形迷宫,需要从起点(1,1)走到终点(4,3),那么需要7步。下面程序完成从起点(0,1)到终点(0,3)的最短距离,结果为12.#include <stdio.h>using namespace std;struct Position{ Position(int row, int col) { x = row; y = col; ...原创 2019-02-15 18:07:37 · 2207 阅读 · 1 评论 -
桶插法
int main(){ /* 问题:假设班上有n个同学,考试了,考试的满分是10分,最低是0分。他们的分数是iScore数组里的值,现在将他们的分数打印输出。 */ //分数集合 int iScore[] = { 1,8,3,6,2,8,8,6 }; //分数个数 int iCnt = sizeof(iScore) / sizeof(iScore[0]); //桶个数 con...原创 2019-02-12 20:23:55 · 244 阅读 · 0 评论 -
冒泡排序
int main(){ /* 问题:假设班上有n个同学,考试了,满分是100分。他们的分数是iScore数组里的值,现将他们的分数打印输出。 */ //分数集合 int iScore[] = { 12,35,99,18,76}; //分数个数 int iCnt = sizeof(iScore) / sizeof(iScore[0]); //冒泡排序 //从大到小 for (...原创 2019-02-12 21:26:55 · 135 阅读 · 0 评论 -
枚举法——很黄很暴力
下面是一条小学奥数题,用枚举法求解,真的很黄很暴力。这么个控制台程序在我自己的电脑上运行了10+秒。#include "stdio.h"using namespace std;/*题目:ABC + DEF = GHI,其中式子中的字母代表了数字1~9,请打印出所有可能的式子并计算出可能的式子的数量*/int main(){ int a[9] = { 0 };//代表每个...原创 2019-02-14 20:45:38 · 1251 阅读 · 0 评论