剑指offer面试题12:矩阵中的路径(回溯法的应用)【C++版本】

题目: 设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵任意一格开始,每一步可以在矩阵中向上、下、左、右移动一格。如果一条路径经过了矩阵中的某一格,那么该路径不能再次进入该格子。 解题思路: 可以用回溯法来解决的典型问题。 用回溯法解决问题的所有选项都可以形象的用树状结构表示。 在某一步有n个可能的选项,那么该步骤可以看做是树状结构中的一个节点,每个选项看成树中节点连接线,经过这些连接线到达该节点的n个子节点。树的叶子节点对应着终结状态。如果树的叶节点满
分类: 其他 发布时间: 03-11 23:22 阅读次数: 0

Leetcode 559. N叉树的最大深度(DFS和BFS解法)

给定一个 N 叉树,找到其最大深度。 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。 例如,给定一个 3叉树 : 返回其最大深度,3。 说明: 树的深度不会超过 1000。 树的节点总不会超过 5000。 【DFS解法】 /* // Definition for a Node. class Node { public: int val; vector<Node*> children; Node() {} Node(int _val, vecto
分类: 其他 发布时间: 03-11 23:22 阅读次数: 0

leetcode 130 被围绕的区域

给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。 示例: X X X X X O O X X X O X X O X X 运行你的函数后,矩阵变为: X X X X X X X X X X X X X O X X 解释: 被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两
分类: 其他 发布时间: 03-11 23:21 阅读次数: 0

IO模型和IO复用

一、IO模型 一个输入操作通常包括两个阶段: 等待数据准备好 从内核向进程复制数据 对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待数据到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用进程缓冲区。 Unix 有五种 I/O 模型: 阻塞式 I/O 非阻塞式 I/O I/O 复用(select 和 poll) 信号驱动式 I/O(SIGIO) 异步 I/O(AIO) 阻塞式 I/O 应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返
分类: 其他 发布时间: 03-11 23:21 阅读次数: 0

vim中的查找和替换

查找 在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。 Vim查找支持正则表达式,例如/vim$匹配行尾的"vim"。 需要查找特殊字符需要转义,例如/vim\$匹配"vim$"。 注意查找回车应当用\n,而替换为回车应当用\r(相当于<CR>)。 大小写敏感查找 在查找模式中加入\c表示大小写不敏感查找,\C表示大小写敏感查找。例如: /foo\c 将会查找所有的"foo","FOO","Foo"等
分类: 其他 发布时间: 03-11 23:21 阅读次数: 0

makefile的简单使用(一)

1.什么是makefile? 作为一个professional的程序员,makefile还是要懂。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 因为makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为mak
分类: 其他 发布时间: 03-11 23:21 阅读次数: 0

操作系统基础复习

一、基本特征 1. 并发 并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。 并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。 操作系统通过引入进程和线程,使得程序能够并发运行。 2. 共享 共享是指系统中的资源可以被多个并发进程共同使用。 有两种共享方式:互斥共享和同时共享。 互斥共享的资源称为临界资源,例如打印机等,在同一时间只允许一个进程访问,需要用同步机制来实现对临界资源的访问。 3. 虚拟 虚拟技术把一个物理实体转换为多个逻辑实体。 主要有两
分类: 其他 发布时间: 03-11 23:20 阅读次数: 0

操作系统的中断、异常和系统调用

在下列事件中,进程可能把控制权交给操作系统: - 系统调用:应用程序主动向操作系统发出的服务请求 - 异常:非法指令或者其他原因导致当前指令执行失败后的处理请求 - 中断:来自硬件设备的处理请求 1.为什么需要中断、异常和系统调用 在计算机系统中,内核是被信任的第三方,可以在里面做对计算机系统里的任何内容的控制,而且可以执行它的特权指令。这种信任并不是指内核和外界隔离,它还需要为上面的应用程序提供服务。也就是说它必须对外界提供某种访问的接口或者打交道的通道。 2. 中断和异常解决的问
分类: 其他 发布时间: 03-11 23:20 阅读次数: 0

操作系统实现IO的三种方式

IO设备是除CPU和存储器之外的另一大需要操作系统管理的资源,它和操作系统有密切的联系。 IO设备一般包括:设备控制器和设备本身。设备控制器是插在电路板上的一块芯片或一组芯片,由这块电路板物理地控制设备。它从操作系统接受命令,例如,从设备读数据,并且完成数据的处理。 每一类设备控制器都是不同的,所以需要不同的软件进行控制。这些专门用来和设备控制器对话,发出命令并接受响应的软件,成为设备驱动程序。为了使用这些驱动程序,必须把设备驱动程序装入到操作系统中,这样它才能在核心态运行。 每个设备控制器都
分类: 其他 发布时间: 03-11 23:20 阅读次数: 0

LeetCode 581 需要排序的最短子数组

给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 你找到的子数组应是最短的,请输出它的长度。 示例 1: 输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。 说明 : 输入的数组长度范围在 [1, 10,000]。 输入的数组可能包含重复元素 ,所以升序的意思是<=。 【思路】 1.先从左向右遍历,找到最右边界。更新边界
分类: 其他 发布时间: 03-11 23:19 阅读次数: 0

归并排序的迭代实现

之前在另一篇文章中C++ 归并排序与快速排序详细分析了归并排序的递归实现,但是会占用大量的时间和空间,算法的效率低下;使用迭代的方式代替递归的方式虽然比较难想,但是会增大效率。 如何写迭代? 根据上面的图,我们可以先把数组划分为n组,刚开始每组只有一个值。然后相邻的小组不断进行两两合并,最终合并成为一个组。 可以用一个变量来枚举步长1,2,4,……,对由每个步长分开的区间,都合并一下。 比如,一开始数组为[8 7 6 5 4 3 2 1]。 第一遍,步长为1,将相邻的两个区间合并: 7 8 6
分类: 其他 发布时间: 03-11 23:19 阅读次数: 0

C++堆排序实现

整个堆排序过程中, 我们只需重复做两件事: 建堆(初始化+调整堆, 时间复杂度为O(n)); 拿堆的根节点和最后一个节点交换(siftdown, 时间复杂度为O(n*log n) ). 因而堆排序整体的时间复杂度为O(n*log n). 下面通过一组数据说明堆排序的方法: 9, 79, 46, 30, 58, 49 1: 先将待排序的数视作完全二叉树(按层次遍历顺序进行编号, 从0开始),如下图: 2:完全二叉树的最后一个非叶子节点,也就是最后一个节点的父节点。最后一个节点的索引为数组长度le
分类: 其他 发布时间: 03-11 23:19 阅读次数: 0

解决AttributeError: 'UserFavorite' object has no attribute

Django项目报错如下: 翻译如下: 然后就定位:Edit>>find>>find in path 接着,改为正确的就可以了。
分类: 其他 发布时间: 03-11 23:18 阅读次数: 0

html中的标签缩写的英文含义: dt dl dd

ul是unordered lists的缩写 (无序列表) li是list item的缩写 (列表项目) ol是ordered lists的缩写(有序列表) dl是definition lists的英文缩写 (自定义列表) dt是definition term的缩写 (自定义列表组) dd是definition description的缩写(自定义列表描述) nl是navigation lists的英文缩写 (导航列表) tr是table row的缩写 (表格中的一行) th是table hea
分类: 其他 发布时间: 03-11 23:18 阅读次数: 0

去掉百度热点(Chrome,Firefox)

Firefox: 右上角---附加组件---搜索【stylish】---安装 百度搜索或打开Baidu Themes & Skins- ---点击左边的百度---选择喜欢的风格即可 Chrome: 方法也很简单,我提供个链接 Chrome Stylish插件怎么用?
分类: 其他 发布时间: 03-11 23:18 阅读次数: 0

.Net RabbitMQ之环境搭建 Nginx学习系列一搭建环境

关于RabbitMQ的背景不想多说什么,网上能找到很多,自行百度,RabbitMQ是基于AMQP协议的消息队列组件,无关语言和平台,是开源界非常流行的消息队列组件.本系列基于WMWare+Linux Center OS7+.Net环境完成RabbitMQ的基本功能的实现. 官方安装教程如下:https://www.rabbitmq.com/install-rpm.html 1、Linux环境搭建 参考Nginx学习系列一搭建环境 ok,环境搭建完成 2、安装RabbitMQ的相关组件 (1)、
分类: 其他 发布时间: 03-11 23:18 阅读次数: 0

永遇乐·京口北固亭怀古

千古江山,英雄无觅,孙仲谋处。 舞榭歌台,风流总被,雨打风吹去。 斜阳草树,寻常巷陌,人道寄奴曾住。 想当年,金戈铁马,气吞万里如虎。 元嘉草草,封狼居胥,赢得仓皇北顾。 四十三年,望中犹记,烽火扬州路。 可堪回首,佛狸祠下,一片神鸦社鼓。 凭谁问:廉颇老矣,尚能饭否?
分类: 其他 发布时间: 03-11 23:18 阅读次数: 0

图灵机器人“请按规定的要求进行加密”

分类: 其他 发布时间: 03-11 23:18 阅读次数: 0

编程练习(时间序列)

"""将数据列表转换成一些词频count,字典dictionary def build_dataset(words, n_words): """Process raw inputs into a dataset.""" count = [['UNK', -1]] count.extend(collections.Counter(words).most_common(n_words - 1)) dictionary = dict() for w
分类: 其他 发布时间: 03-11 23:18 阅读次数: 0

宝明第四季 30课

时间_到文本 () 读配置项 (, , , ) 写配置项 (, , , ) #换行符 编辑框.加入文本
分类: 其他 发布时间: 03-11 23:18 阅读次数: 0