编程
奋斗的小炎
设计推荐算法,接触过自然语言处理,对于人工智能领域的学习永无止境
展开
-
(转载)为什么不能从static方法调用非static的方法或变量?
http://blog.csdn.net/zhouwubin123/article/details/6623308Java开发人员一定遇到过,在eclipse开发环境中,在包括main方法在内的static方法中调用某非静态变量,会编译出错。public class StaticDemo { int x; void fun() { System.out.println("this is f...转载 2018-06-05 11:21:45 · 6245 阅读 · 1 评论 -
贪心算法总结示例与钞票问题的求解
贪心算法通常也会结合其他知识点一并考察(如排序、栈、堆排序等)(预备知识)贪心法求解钞票问题这里有几种不同面额的钞票,1元、5元、10元、20元、100元、200元的钞票无穷多张,现在使用这些钞票去支付X元的面额,问最少需要多少张?例如X=628,我们通常会尝试从面额最大的钞票(200元)开始尝试,此时发现200元的钞票只能使用3张,此时剩余的面额是628-3*200=28元,再依次查...原创 2018-07-19 11:31:23 · 2002 阅读 · 1 评论 -
(算法总结)求两个单链表的交点问题(leetcode160)
求两个链表的交点问题也是面试算法常常考到的点,这里提供两种方法实现。问题描述:给定两个单链表的头指针ha和hb,若两个链表存在交点,就返回该交点的指针地址,若不存在交点,则返回NULL。这里先定义一下单链表数据结构struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(NULL) {}};方法一:使用...原创 2018-07-12 18:56:58 · 804 阅读 · 0 评论 -
(算法总结)单链表的中间段逆序(leetcode92)
链表的就地逆置我们讲解过了,接下来,关于单链表的中间段逆置,是一个稍有难度的问题。问题描述如下:给定start和end,逆置从start到end的所有节点。思路:这里需要定位逆置段开始节点,逆置段前驱结点,逆置段结束节点,以及逆置段结束节点后继...原创 2018-07-12 17:55:05 · 496 阅读 · 0 评论 -
(算法总结)堆排序的应用:寻找中位数
设计一个数据结构,可动态地维护一组数据,且支持如下操作:(1)添加元素:void addNum(int num)(2)返回这组数据中的中位数 double findMedian()【思考】如何获取一组元素的中位数(1)首先,我们马上想到的方法,最直观的方法就是:添加元素的同时进行排序操作(直插sort)addNum的复杂度是O(n),findMedian的复杂度则是O(1);(...原创 2018-07-18 16:32:53 · 7291 阅读 · 1 评论 -
(算法总结)单链表的就地逆置(leetcode 206)
单链表是大家非常熟悉的数据结构,单链表的就地逆置是面试算法中常考的问题。“就地”逆置就是要求算法不引入额外的存储空间,即算法的空间复杂度为O(1),换句话讲,算法要求我们只使用指针的移动和变换,来实现逆置的功能。我们这里使用一种典型的方法“头插法”。先定义一个单链表的数据节点:struct ListNode{ int val; ListNode *next; ListNode(int x)...原创 2018-07-12 16:20:25 · 4089 阅读 · 0 评论 -
(算法总结)堆排序的应用:求数组中第k大的元素
(一)预备知识:堆与堆排序二叉堆是一种非线性的数据结构,是一种完全二叉树的结构,分为大顶堆和小顶堆两种,其中大顶堆是指树中各父节点的值总是大于等于任何一个子节点的值;而小顶堆则是定义为树中各父节点的值总是小于等于任何一子节点的值。一般用二叉堆实现优先级队列,其内部调整的时间复杂度为O(logN),C++的标准STL库的优先级队列包括以下5种操作:(1)取堆顶操作:H.top()(2...原创 2018-07-18 14:30:19 · 3802 阅读 · 0 评论 -
(算法总结)寻找组合数,求出从整数1到n中和为m的所有组合
采用背包问题原理,仅考虑具有最大的数字n是否存在与结果集合中,考虑以下两种情形:(1)n在集合中,剩下的n-1个数字需要组成一个和为n-m的组合;(2)n不在集合中,剩下的n-1个数字仍需要组成和为m的组合;由于需要给出所有的组合可能,因此是一个回溯的过程。算法设计思路:由于是个回溯递归的过程,因此需要首先给出递归终止条件:当需要求和的数字小于等于0或所有数字都用完了的时候,就是程序终止的时候。用...原创 2018-07-12 12:44:15 · 6416 阅读 · 0 评论 -
(算法总结)求最大公共子串
要求:求两个字符串的最长公共子串,如“abcdefg”和“adefgwgeweg”的最长公共子串为“defg”,但是要求子串必须是连续的。思路:动态规划法求解定义二维数组dp[i][j],其中i用于遍历字符串s1的下标,j用于遍历s2的下标,于是dp[i][j]就用于记录当s1和s2分别遍历到i和j下标时,以s1[i]和s2[j]为结尾的最大公共子串长度,而要求最终的最大公共子串,需要用一个max...原创 2018-07-12 11:35:14 · 2237 阅读 · 0 评论 -
(算法总结)判断一个序列是否为合理的出栈顺序
合理的出栈顺序也是面试算法经常考察的一部分,堆栈(stack)的后进先出性质我们都了解。如果给定了一个入栈的序列,判断一个序列是否为合理的出栈顺序该如何进行呢。例如,我们给定了入栈顺序为 1,2,3,4,5那么【序列1】3,2,5,4,1 是合理的; 【序列2】3,1,2,4,5 就是不合理的出栈顺序我们这里思考几个问题:(1)错误的出栈顺序不会出现的原因;(...原创 2018-07-17 00:03:22 · 7540 阅读 · 2 评论 -
(算法总结)二叉排序树的节点删除(leetcode 450)
二叉排序树的节点插入和查找已经在本人的上一篇博文中讲解过了,大家可以参考:https://blog.csdn.net/little_fire/article/details/80798663本篇博文将为大家重点讲解一下二叉排序树的节点删除操作,对应的是leetcode的第108题目,希望为大家带来帮助。首先,根据二叉排序树的性质可知,二叉排序树的待删除节点,可能存在以下三种情况:(1)既包含左子树...原创 2018-06-25 21:13:18 · 6565 阅读 · 4 评论 -
(算法整理)排序数组转平行二叉树(leetcode 108)
leetcode 108 排序数组转平行二叉树算法描述:已知一个排序数组,现需要将其转化为一个高度平衡的二叉查找树。(平衡二叉树的定义:二叉树中,任意两个节点的高度差小于等于1)思考:将排序数组转化为高度平衡的二叉查找树,关键在于数据元素插入的二叉树的顺序结论:每次选取数组的“中间元素”插入二叉树,完成选择后,再将数组划分为左右两个数组(类似于二分查找),再递归地处理这两个子数组,继续选择中间元素...原创 2018-06-25 15:00:08 · 652 阅读 · 0 评论 -
MapReduce的通俗理解与入门
看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop 与MapReduce的整体有所了解了。【前言】Hadoop是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce、分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也很丰富,包括ZooKeeper,Pig,Chukwa,Hive,Hbase,Mahout,flume等...原创 2018-06-07 11:10:20 · 35838 阅读 · 12 评论 -
面试算法combine sum专题讲解二(动态规划法)
这一部分,我们将讲解DP问题求解combine sum的最优解问题。涉及的代码题目是leetcode 377、322leetcode 377问题描述:整数数组,无重复元素,但每个数字可以被重复使用,给出组合的总数,无须给出所有排列。算法设计思路:创建dp数组,dp[i]表示target为i时,无重复元素组合的总数。算法实现:class Solution(object): def combi...原创 2018-05-30 09:52:26 · 504 阅读 · 0 评论 -
面试算法combine sum专题讲解一(回溯法)
combine sum是面试算法中最常考的一类题型,其主要思想是应用背包问题的延伸。主要描述为:在一组数字中,寻找子数组,使子数组的元素和为target的所有组合,求罗列所有组合,或求解组合总数,或求解最少使用的组合中元素个数(找零钱问题leetcode322)这里我们就几道经典leetcode题目来做一下综述和讲解。本节的三个题目39、40、216都是回溯法解题。关于回溯法的介绍,可以查看以下博...原创 2018-05-30 08:59:03 · 807 阅读 · 0 评论 -
python中lambda函数的理解与使用
Lambda函数,即Lambda 表达式(lambda expression),是一个匿名函数(不存在函数名的函数),Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction)。入门Python的朋友会问,函数没有名字也可以吗?当然可以。有些函数如果只是临时一用,而且它的业务逻辑也很简单(比如做个简单加法、取绝对值、简单过滤等)时,就没必要非...原创 2018-05-29 17:32:07 · 38102 阅读 · 2 评论 -
静态成员和非静态成员的区别
Java工程师经常会遇到变量声明的问题,遇到一个变量,经常不知道是否将其声明为static变量或普通变量。这里转载一篇blog,希望为大家带来一些指导性建议。【Generalization】static是一个修饰符,用于修饰成员(成员变量、成员方法)。在类A中被static修饰的变量是一种被A类对象所共享的数据,不仅可以被A类对象调用,也可以通过类名A直接调用。【static 的特点】(1)sta...原创 2018-06-05 11:58:03 · 1492 阅读 · 0 评论 -
(算法总结)单链表求环问题:检验单链表是否存在环以及存在环的初始节点
单链表的求环问题也是面试算法中常常考察的问题,链表的求环的问题可通过以下两种方法解决先定义单链表的数据结构:struct ListNode{ int val; struct ListNode* next; ListNode(int x):val(x){}};方法一:使用集合set单链表是否存在环可以转化成一个通过遍历各个节点时是否遇到相同的结点地址的问题,如果遇到,就返回改地址,遍历结束...原创 2018-07-14 00:31:03 · 474 阅读 · 0 评论