算法
老司机的诗和远方
非1即0!
展开
-
RuntimeError: cuda runtime error (30)解决
程序出错如上,而且总是伴随着黑屏,一开始以为是cuda跑出问题,而且该问题必须重启才能解决,但是一直很好奇我的电脑Ubuntu18.04设置了黑白屏从不,还是出现该错误,最后为了复现该错误就强制锁屏,果然错误复现。找到原因之后就可以比较好解决,该死的Ubuntu18.04锁屏是在挂起里面设置,不是空白屏幕这里设置。重新设置了从不挂起解决问题。主要是锁屏之后显卡也进入休眠模式,导致出错!!!!!!!!!1...原创 2022-03-06 17:59:36 · 1386 阅读 · 0 评论 -
剑指offer-二叉树镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5解法:其实观察可以发现从上往下...原创 2018-03-01 16:30:38 · 247 阅读 · 0 评论 -
剑指offer-寻找树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解法:只有节点相同才有可能需要遍历到底有没有其子结构没有就要往左节点走,以及右孩子走!二叉树的操作都会比较抽象,抽象主要体现在程序运行执行过程struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; Tr...原创 2018-03-01 16:20:13 · 284 阅读 · 0 评论 -
反转链表输出
题目:输入一个链表,从尾到头打印链表每个节点的值。解题:使用容器的头插入,或者自己再建一个链表,头插入!而且链表在做的时候要咨询是否可以改变其结构!以及头结点是否有存储有用数据(因为这个因需求设计而异)总结:关于链表知识,头指针、头结点、第一个节点区别!头指针指向头结点,一般头结点不算第一个节点,头结点的存在使得链表可以是空表,也使得链表的插入查询等操作保持一致性!这一点非常有用,当然也有链表的头...原创 2018-02-22 16:54:39 · 308 阅读 · 0 评论 -
C/C++结构体初始化
C语言结构体初始化,可以如下四种:#include <stdio.h>int main(int argc, const char * argv[]) { //定义结构体类型 struct Person { char *name; int age; double heigth; }; ...原创 2018-02-22 16:50:03 · 678 阅读 · 0 评论 -
合并两个有序的链表新的链表也要有序
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解法:两个指针指向两个链表,依次判断,谁小就接谁,谁也就获得前进(竞争前进)代码如下:struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }}; ListNo...原创 2018-03-01 15:02:11 · 268 阅读 · 0 评论 -
编程不可不知的内存构造
一、内存基本构成 可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。(比较远速度就比较慢) 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内...原创 2018-02-21 20:39:47 · 396 阅读 · 0 评论 -
剑指offer-反转链表输出
题目:输入一个链表,反转链表后,输出链表的所有元素。解法:头插法,新建一个链表,千万不能是指向之前链表的头结点!自己新建一个头结点! ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL) return NULL; ListNode* p=pHead,newHead(0); ...原创 2018-02-28 22:06:55 · 243 阅读 · 0 评论 -
输出链表倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。 解题:A常规做法是计算出链表长度然后计算出倒数点位置O(n);B另外做法是用两个指针,一开始一个指针先走k-1步到达第k个节点(要是遇到null直接返回NULL,说明k大于链表长度不合法),然后两个指着再同步往下走,走完即可。(核心是两个指针保持一定长度)。A常规实现代码:ListNode* FindKthToTail(ListNode* pLis...原创 2018-02-28 21:37:08 · 514 阅读 · 0 评论 -
调整数组使得奇偶分离
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变解法:1、要想快速就得牺牲空间,但是最好注意输入数组的大小,要是大型的话,这里牺牲空间就非常不可取,暂用内存多!临时开辟一个完全一样的数组,然后遍历两次就可以实现奇偶数分离。时间O(n)2、第二种方式是采用向前推的方式,这...转载 2018-02-28 20:55:09 · 976 阅读 · 0 评论 -
剑指offer—实现二维数组元素查找的拓展
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。(题目来自剑指offer第3题)解:得到的信息如下,行列非递减,但不保证后一行元素一定比前一行所有元素大!实现:思路是定行,再在列上使用二分查找,即可!关键是怎么锁定某一行,如果是从左上角扫描,是没办法实现高效的算法,二维数组的...原创 2018-02-20 17:17:18 · 336 阅读 · 0 评论 -
python及其相关面试
Table of ContentsPython语言特性1 Python的函数参数传递2 Python中的元类(metaclass)3 @staticmethod和@classmethod4 类变量和实例变量5 Python自省6 字典推导式7 Python中单下划线和双下划线8 字符串格式化:\x和.format9 迭代器和生成器10 *args and **kwargs11 面向切面编程AOP和...转载 2018-02-20 10:17:12 · 637 阅读 · 0 评论 -
剑指offer—寻找数组最小的k个数
题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。分析:传统的做法可以是o(nlog(n)),就是先排序然后从前面中取出k个值。高效的做法可以实现o(nlogk),借助一个容器,容量k,将数组的读入k个数存放在容器中,然后继续访问数组后面的数,将其后每个数和容器中最大值比较,比最大值小则剔除容器中最大值,同时将该数放入容...原创 2018-02-19 21:25:48 · 336 阅读 · 0 评论 -
剑指offer-两个栈实现队列
/*用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解思路:1、一个栈作为输入接收2、一个作为输出缓冲或者1、一个作为输出2、一个作为输入数据处理缓冲*/#include<iostream>#include<vector>#include<stdio.h>#include<stack>using namespace...原创 2018-02-23 16:06:53 · 247 阅读 · 0 评论 -
剑指offer-实现栈最小值获取
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。解法:其实这道题不难,只需要借助一个辅助的栈用来保存每新压加一个值入栈,就保存当前当前最小值在另外一个辅助栈中,然后出栈的时候就要检测当前出栈元素在辅助栈中栈顶是否有,如果有也要同步出栈!代码如下: stack<int> stack,min_stack; void push(int value)...原创 2018-03-02 21:26:48 · 376 阅读 · 0 评论 -
剑指offer-根据入栈顺序判断出栈顺序是否正确
bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.empty()) return false; stack<int> temp; for(int i=0,j=0;i<pushV.size();i++)...原创 2018-03-02 22:50:26 · 873 阅读 · 1 评论 -
旋转矩阵,四元素,欧拉角
旋转变换旋转变换最为直观的表示方法是“轴-角”:绕着某一个过原点轴,旋转某一角度。 轴可以用一个单位长度的点[w1,w2,w3][w1,w2,w3]表示:原点到该点的射线即为此轴。 使用右手坐标系,拇指指向轴方向,四指方向即为旋转的方向。 一个旋转变换可以用用欧拉角、四元数或者旋转矩阵表示。以下讨论不同表示方法之间的关系,以及旋转变换的合成、取逆等操作。旋转矩阵旋转可以看做一种特...转载 2018-11-01 21:25:51 · 3453 阅读 · 0 评论 -
四元素转欧拉角
在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点。本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系: ...转载 2018-10-23 14:00:18 · 4318 阅读 · 1 评论 -
校招算法题大汇总
题1、小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数) 给定四个整数A,B,C,D,请返回所求结果。给定四个整数A,B,C,D,请返回所求结果。测试样例:100,90,80,70返回:1020刚开始做这个题收到了...原创 2018-09-09 16:57:59 · 1014 阅读 · 0 评论 -
十六进制转换成整型和浮点型
1、十六进制hex转换为整型思路:这个比较简单,只需要进行移位即可,整型在计算机本质的存储是二进制//int is 4 char,need the input is array with four hex; int char4_int(unsigned char* pData){ int t = 0; for (int i = 0; i < 4; i++){ ...原创 2018-09-02 11:15:14 · 5426 阅读 · 0 评论 -
删除字符串空格
#include<iostream>using namespace std;string deleteVoid(string input){ int i = 0, j = 0; for (; input[i]; i++){ if (input[i] == ' '){ j++;//计算空格个数 continue; } if (j){ input[i...原创 2018-05-07 20:30:13 · 222 阅读 · 0 评论 -
线性时空实现数组各个元素除该位置外连乘
一个长度为n的数组a[0],a[1],...,a[n-1]。现在更新数组的名个元素,即a[0]变为a[1]到a[n-1]的积,a[1]变为a[0]和a[2]到a[n-1]的积,...,a[n-1]为a[0]到a[n-2]的积(就是除掉当前元素,其他所有元素的积)。程序要求:具有线性复杂度,且不能使用除法运算符。分析:根据要求线性且不能用除法,那么就得需要分段线性策略,这道题如果能用除法的话就会非常...原创 2018-04-16 10:14:20 · 325 阅读 · 0 评论 -
哈夫曼编码
技术之瞳 阿里巴巴技术笔试心得习题2.71: 字符串”alibaba”的二进制哈夫曼编码有(C)位。 A、11 B、12 C、13 D、14 分析: 这题是考察哈夫曼的编码方式,它是根据字符出现频率构建的带权重二叉树确定每个字符编码的。首先我们统计“alibaba”各个字符出现频率:a-3,b-2,l-1,i-1。由出现的频率我们有以下哈夫曼二叉树: 对应每个字符编码为...转载 2018-03-29 22:31:26 · 659 阅读 · 0 评论 -
LR逻辑斯回归分析(优缺点)
本文是在学习完李航老师的《统计学习方法》后,在网上又学习了几篇关于LR的博客,算是对LR各个基础方面的一个回顾和总结。一 简述 逻辑斯蒂回归是一种对数线性模型。经典的逻辑斯蒂回归模型(LR)可以用来解决二分类问题,但是它输出的并不是确切类别,而是一个概率。 在分析LR原理之前,先分析一下线性回归。线性回归能将输入数据通过对各个维度的特征分配不同的权重来进行表征,使得所有特征协同作出最...转载 2018-02-25 20:58:03 · 21106 阅读 · 0 评论 -
基于sklearn库常用的分类库
传统的机器学习的监督学习分类分类和回归,分类是争对离散的数据,而回归是争对连续的数据,在数据预处理好的基础上要对数据进行预测,通常采用CV交叉验证来进行模型评价和选择。这篇文章通过连续的数据结合sklearn库对各种回归器做一比较:1.linear regression缺点:顾名思义,linear regression是假设数据服从线性分布的,这一假设前提也限制了该模型的准确率,因为现实中由于噪声...转载 2018-02-25 20:33:26 · 1073 阅读 · 0 评论 -
剑指offer-重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题:仔细观察重建二叉树,前序遍历和中序遍历规律,前序遍历是存放根节点,中序就是以此节点做切分左右子树!递归是树本质,递归这个时候写出来的代码特美!struc...原创 2018-02-24 11:15:00 · 242 阅读 · 0 评论 -
剑指offer-二叉搜索树后序输出正确判断
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解法:这里注意!!是二叉搜索树!!二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树...原创 2018-03-03 15:50:25 · 256 阅读 · 0 评论 -
剑指offer-由上而下由左到右输出二叉树节点值
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解法:关键点是当前层打印输出之后,下一层节点我应该要保存,也就是边打印边输出的时候也要边保存下一层节点,这样的数据结构队列最适合!具体的代码如下 vector<int> PrintFromTopToBottom(TreeNode* root) { if(root==NULL) r...原创 2018-03-03 14:53:25 · 595 阅读 · 0 评论 -
C++之set和multiset红黑树
set和multiset 会根据特定的排序准则,自动将元素排序。两者不同之处,在于multiset允许元素重复,而set不允许重复,如图1所示。图1 set和multiset在使用set和multiset之前,需要包含头头文件<set>,Set 和multiset的原型如下:namespace std{ template < class T, class Compa...转载 2018-02-19 20:18:15 · 1688 阅读 · 0 评论 -
剑指offer——打印数组拼接最小数
题目:输入一个正整数数组,把数组里面所有的数字拼接排成一个数,打印能拼接出的所有数字中的一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.这个题目最直接的做法应该是先求出这个数组中的所有数字的全排列,然后把每个排列拼接起来,最后求出排列起来的数字的最小值。求数组的排列和面试题28非常相似。根据排列组合的只是,n个数字总共有n!排列,我们再来看一下更快的算法。这...转载 2018-02-19 15:46:09 · 539 阅读 · 0 评论 -
剑指offer——寻找字符串中只出现一次的第一个字符位置
题目:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置解:像这类题都可以归结为计算字符在字符串中的个数问题,高效的方法是使用哈希,将字符映射为数字(可以利用ASCII映射);具体步骤如下A、开辟一个数组长度256,因为字符也就是8个位B、循环字符串一次,就可以得到每个字符出现次数,那么如果才能知道那个只出现一次的字符是第一次出现...原创 2018-02-19 13:24:11 · 269 阅读 · 0 评论 -
汉诺塔游戏算法研究
问题背景:有这样的游戏,我们称之为汉诺塔游戏,这个游戏的规则是,有n个不同大小的盘子和3根木桩A,B,C。一开始时候,所有的盘子都在第一个木桩,并按照最大的盘子在底部,最小的盘子在顶部。最后要求是把所有的盘子都一到C木桩上面,这个过程可以借助B木桩,但是整个过程都要按照大盘子在底下,小盘子在上的规则,不能出现大盘子在小盘子上面。减治法分析:由n=1的时候可以直接从A木桩搬到C木桩,故我们可以利用减治原创 2016-10-06 23:31:50 · 1538 阅读 · 0 评论 -
解凸包问题5种算法
转载原文:http://blog.csdn.net/bone_ace/article/details/46239187前言:首先,什么是凸包? 定义:对于平面上的一个点集合(有限或无限),如果以集合中任意两点P和Q为端点的线段都属于该集合,我们说这个集合是凸的!可以直接说任意两点直接是在改几何图形内部或者边界上则称为凸包。假设平面上有p0~p12共13个点,过某些点作一个多边形转载 2016-10-05 16:40:08 · 3720 阅读 · 0 评论 -
计算斐波那契数列
计算斐波那契数列算法的研究斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)原创 2016-10-04 23:32:24 · 1024 阅读 · 0 评论 -
求一个十进制正整数在二进制表示中的二进制数字个数
要求:算法求一个十进制正整数在二进制表示中的二进制数字个数实现有两种方式,一种是常规的做法,另外一种是利用递归。常规的做法,利用十进制转换为二进制的算法是K除法(k表示十进制要化成多少进制)int countBinary(int n){int Count = 1;while(n > 1){Count += 1;n = n/2;}return C原创 2016-10-03 23:25:28 · 3157 阅读 · 0 评论 -
ACM图论算法—邮递员投递问题
题目描述著名图论问题之一。邮递员从邮局出发送信,要求对辖区内每条街,都至少通过一次,再回邮局。在此条件下,怎样选择一条最短路线?此问题由中国数学家管梅谷于1960年首先研究并给出算法,故名。 中国邮递员问题——可以叙述为在一个有奇点的图中,通过增加一些重复边,使新图不含奇点,并且重复边的总权为最小问题!快递员从V1出发给V2、V3、V4、V5、 V6、V7、V8、V9派发快递,求派完所有回到原出原创 2016-10-21 22:31:14 · 19477 阅读 · 6 评论 -
ACM图论算法—UNIX插头问题
问题描述你负责为联合国互联网执行组织(UNIX)的周年会议布置会议室。该组织的主旨是使互联网上的信息和思想的自由交流变得尽可能笨重和官僚(^_^)。 因为会议室被审计为招待来自世界各地的记者的场所,它装备了一些电气插座以匹配各个国家使用的电器的不同插头形状和电压。当然,这些插座的规格是以这个会议室建成时世界各国的规格作为标准的。不幸的是,由于这座会议室年代久远,它建成时,记者还只是使原创 2016-10-21 21:17:05 · 816 阅读 · 0 评论 -
ACM图论算法-------安全网路问题
题目描述在一个网络中,我们称服务器S是关键服务器,如果至少有另外两部不同的服务器A和B,而A和B之间的所有联络都通过S。即若S奔溃,则A和B之间不能进行通讯。如果一个网络不包含关键服务器,则称它是安全的。服务器间所有的联络都是双向的,且一个服务器不允许直接与它自身相联,网络中可以存在单机和子网。如下图B就是一个关键服务器,只要B服务器一奔溃就会导致A,C出现问题。题目要求写一算法找出如下给定网络的分原创 2016-10-11 20:20:06 · 1085 阅读 · 0 评论 -
判断素数(质数)
题目要求:对于输入一个整型的数判断是否为素数程序思路:判断一个数为素数的本质是除了自己和1之外没有整除数的话就是素数。最差的做法就是从小于这个数和大于2这个范围内的所有整数都扫一遍。蛮横法表现出来的效率就是太低,为了寻找更好的效率,经过不断的总结规律,人们发现,判断一个数是否为素数不用比较太多,只需要跟他的开根号内的数来判断是否有该数的因子。算法还对1和2做了修补,使得算法的适应性更强,效率更原创 2016-08-10 13:47:31 · 753 阅读 · 0 评论 -
最大公约数的3种算法
前言:关于最大公倍数,其本质是辗转相除法,又名欧几里德算法设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得a÷b=q......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用b除以r1,得b÷r1=q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除以r2,……如此下去,直到能整除为止。其最后一个为被除数的余数的除数即为(a, b)。例如:a=25,b=15,a/b=1......10,b/10=1......5原创 2016-07-07 13:13:21 · 1213 阅读 · 0 评论