算法
文章平均质量分 93
铭记_
如果你发现了通向成功的道路,那么请不要放弃!!
展开
-
手撸LRU算法C++实现
LRU 算法就是一种缓存淘汰策略,计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用。那么,什么样的数据,我们判定为「有用的」的数据呢?LRU 的全称是 Least Recently Used,也就是说我们认为最近使用过的数据应该是是「有用的」,很久都没用过的数据应该是无用的,内存满了就优先删那些很久没用过的数据。举个简单的例子,安卓手机都可以把软件放到后台运行,比如我先后打转载 2021-02-25 15:27:58 · 598 阅读 · 2 评论 -
Z字形矩阵打印
在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行Z字形扫描后得到长度为16的序列: 1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3问题描述:请实现一个Z字形扫描的程...原创 2020-03-19 14:43:43 · 1183 阅读 · 0 评论 -
赛马网基本算法之--马路上的路灯
题目描述城市E的马路上有很多路灯,每两个相邻路灯之间的间隔都是1公里。小赛是城市E的领导,为了使E城市更快更好的发展,需要在城市E的一段长度为M的主干道上的一些区域建地铁。这些区域要是建了地铁,就需要挪走相应的路灯。可以把长度为M的主干道看成一个数轴,一端在数轴0的位置,另一端在M的位置;数轴上的每个整数点都有一个路灯。要建地铁的这些区域可以用它们在数轴上的起始点和终止点表示,已知原创 2016-10-08 15:30:59 · 1066 阅读 · 0 评论 -
赛马网基本算法之--分苹果
题目描述果园里有堆苹果,N(1<N<9)只熊来分。第一只熊把这堆苹果平均分为N份,多了一个,它把多的一个扔了,拿走了一份。第二只熊把剩下的苹果又平均分成N份,又多了一个,它同样把多的一个扔了,拿走了一份,第三、第四直到第N只熊都是这么做的,问果园里原来最少有多少个苹果?输入输入1个整数,表示熊的个数。它的值大于原创 2016-10-08 10:40:48 · 815 阅读 · 0 评论 -
赛马网基本算法之--约德尔测试
题目描述兰博和提莫闲聊之后,回归到了他们的正题,约德尔人的未来。说起约德尔人的未来,黑默丁格曾经提出了一个约德尔测试,将约德尔人的历史的每个阶段都用一个字符表达出来。(包括可写字符,不包括空格。)。然后将这个字符串转化为一个01串。转化规则是如果这个字符如果是字母或者数字,这个字符变为1,其它变为0。然后将这个01串和黑默丁格观测星空得到的01串做比较,得到一个相似率。相似原创 2016-10-07 19:16:19 · 609 阅读 · 0 评论 -
对模拟退火算法的认识
一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜原创 2016-10-07 16:04:20 · 523 阅读 · 0 评论 -
赛马网基本算法之--上台阶
题目描述有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?注:规定从一级到一级有0种走法。输入输入数据首先包含一个整数n(1样例输入223输出对于每个测试实例,请输原创 2016-10-07 10:36:41 · 421 阅读 · 0 评论 -
赛马网基本算法之--路灯
题目描述V先生有一天工作到很晚,回家的时候要穿过一条长l的笔直的街道,这条街道上有n个路灯。假设这条街起点为0,终点为l,第i个路灯坐标为ai。路灯发光能力以正数d来衡量,其中d表示路灯能够照亮的街道上的点与路灯的最远距离,所有路灯发光能力相同。为了让V先生看清回家的路,路灯必须照亮整条街道,又为了节省电力希望找到最小的d是多少?输入原创 2016-10-07 09:36:17 · 428 阅读 · 0 评论 -
将中缀表达式转换为表达式树
参考:思路8-(3+5)*(5-6/2) 怎样把中缀表达式转为二叉树?中缀表达式的括号怎样处理?一般情况下并不能由一个中缀表达式得到一个唯一的二叉树,但是若由二叉树来表示表达式,叶子节点必须是操作数,非叶子节点是操作符,所以能够确定一个二叉树:转化过程如下:按照优先级加上括号,得到:( 8 - ( (3 + 5) * ( 5 - (6 / 2) ) ) )转载 2016-10-05 15:35:14 · 13173 阅读 · 5 评论 -
赛马网基本算法之---比大小
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的? 输入第一行有一个整数n(0<n<=10000);随后有n行,每行是一个排列;样例输入3abcdefghijklhgebkflacd原创 2016-11-15 22:24:19 · 659 阅读 · 0 评论 -
Leetcode算法79 Word Search
Given a 2D board and a word, find if the word exists in the grid.The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically原创 2016-11-01 19:42:36 · 369 阅读 · 0 评论 -
递归的思想
递归真是个奇妙的思维方式。对一些简单的递归问题,我总是惊叹于递归描述问题和编写代码的简洁。但是总感觉没能融会贯通地理解递归,有时尝试用大脑去深入“递归”,层次较深时便常产生进不去,出不来的感觉。这种状态也导致我很难灵活地运用递归解决问题。有一天,我看到一句英文:“To Iterate is Human, to Recurse, Divine.”中文译为:“人理解迭代,神理解递归。”然后,我心安转载 2016-12-10 15:40:15 · 1177 阅读 · 1 评论 -
链表逆序问题
问题:给出一个链表,将其逆序并打印出来。这是一道面试题,当时脑残没想起来,现在写一个原地逆序的方法,非常easy,代码如下:#include #include#define ERROR -1 typedef struct NODE { int data; struct NODE *next; }NODE,*LNODE; int main()原创 2016-11-19 17:58:04 · 266 阅读 · 0 评论 -
数组乘积问题
一道很有意思的算法面试题,题目要求如下:输入:一个长度为n的整数数组input;输出:一个长度为n的整数数组,满足result [ i ]=input数组中除了input [ i ]以外的数的乘积,比如输入为:input={2,3,4,5},输出为result={60,40,30,24};要求:具有线性复杂度,且不能使用除法运算符。C/C++: int *cal(int *i原创 2016-11-20 12:47:49 · 1721 阅读 · 0 评论 -
LeetCode 64 Minimum Path Sum
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.一种机智的DP解法:int minPathSum(vector>& A) {原创 2016-11-20 15:35:26 · 259 阅读 · 0 评论 -
在控制台打印一个圆
在《疯狂Java讲义》中有一道题:通过API文档查询Math类的方法,打印如下图所示的圆:请输入圆的半径(正整数):5 *** ** ** ** * **代码如下:package com.lwb;import java.util.Scanner;public class Ci...原创 2017-02-13 10:04:47 · 1513 阅读 · 0 评论 -
Leetcode 561 Array Partition I
Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1, b1), (a2, b2), ..., (an, bn) which makes sum of min(ai, bi) for all i from 1 to n as large a原创 2017-06-05 09:37:17 · 485 阅读 · 0 评论 -
堆排序,用一种清新脱俗的方式
最近用OC写算法时遇到这么一道题:问题:给定一个字符数组,判断字符数组中是否所有的字符只出现过一次,如果是,那么返回yes,否则返回no。第一种解法很简单,我们通过开辟空间创建Hash表比较即可,代码如下:BOOL detectString(char *str){ NSUInteger len = strlen(str); int hash[256] = {0};原创 2017-07-20 09:46:36 · 285 阅读 · 0 评论 -
深度拷贝复杂链表的巧妙解法
Q:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。请完成函数ComplexNode* Clone(ComplexNode* pHead),以复制一个复杂链表。A:一开始想这道题毫无思路,如果蛮来,首先创建好正常的链表,然后考虑sibling这个分量,则需要O(n^2)的时间复杂度,然后一个技巧便可以转载 2016-10-04 21:35:49 · 1808 阅读 · 0 评论 -
Q-Learning算法分析与代码实现
Q-Learning算法详解:参考博文:1、http://blog.csdn.net/pi9nc/article/details/27649323 2、http://mnemstudio.org/path-finding-q-learning-example-1.htm转载 2016-10-04 18:44:49 · 13178 阅读 · 2 评论 -
栈练习之C语言中实现中缀转后缀表达式
#include #include #include #include #include "Myatoi.c"extern int myatoi(const char *str);#define M 100//c语言中实现bool类型/*typedef enum BOOLEAN {false, true }bool;*/typedef struct node {原创 2016-06-29 20:37:05 · 5277 阅读 · 0 评论 -
C++之运算法重载详解
c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。1.一般运算符重载在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,所以运算符重载有两种方式:成员函数和友元函数。成员函数的形式比较简单,转载 2016-07-08 19:37:50 · 1405 阅读 · 0 评论 -
赛马网基本算法之--日期倒计时
题目描述在经济、科技日益发达的今天,人们对时间的把握越来越严格,对于一个一定影响力的公司的高管来说,他可能要将自己的行程提前安排到下个月。对于普通人来说,他也可能将几天之后的安排已经提前做好。请设计一个程序计算出今天距离未来的某一天还剩多少天。假设今天是2015年10月18日。输入输入一个日期格式为yyyy原创 2016-10-09 18:11:19 · 606 阅读 · 0 评论 -
Maximum Product Subarray(leetcode第152题)
Find the contiguous subarray within an array (containing at least one number) which has the largest product.For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the largest原创 2016-10-21 16:54:04 · 366 阅读 · 0 评论 -
赛马网基本算法之--约会问题
题目描述 Bob和Alice有个约会,一大早Bob就从点(0,0)出发,前往约会地点(a,b)。Bob没有一点方向感,因此他每次都随机的向上下左右四个方向走一步。简而言之,如果Bob当前在(x,y),那么下一步他有可能到达(x+1,y),(x-1,y),(x,y+1),(x,y-1)。很显然,当他到达目的地的时候,已经很晚了,Alice早已离去。第二天,Alice质问Bob原创 2016-10-11 19:37:13 · 937 阅读 · 0 评论 -
求一个字符串的最长不重复子串的最大长度
一道面试题,当时想到有一种最优的解法,可怎么也想不出来了,现在回顾了一下:函数原型如下:int getLongestSubString(string s){}就是求出一个给定字符串的最长不重复子串的最大长度值是多少。例如:给定的字符串为"abcdafg",其最长的不重复子串的长度为:6,即":bcdafg"。最优解法代码如下:#include#include原创 2016-10-11 20:22:29 · 7096 阅读 · 3 评论 -
Leetcode第303 Range Sum Query - Immutable(简单动态规划解法)
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.Example:Given nums = [-2, 0, 3, -5, 2, -1]sumRange(0, 2) -> 1sumRange(2, 5) -> -1sumRan原创 2016-11-03 15:20:06 · 339 阅读 · 0 评论 -
leetcode 198House Robber(简单动态规划解法)
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent house原创 2016-11-03 15:53:10 · 543 阅读 · 0 评论 -
赛马网基本算法之--公交车乘客
题目描述 一个公交车经过n个站点,乘客从前门上车,从后门下车。现在统计了在第i个站,下车人数a[i],以及上车人数b[i]。问公交车运行时候车上最多有多少乘客 输入第一行读入一个整数n(1接下来n行,每行两个数值,分别表示在第i个站点下车人数和上车人数样例输入4原创 2016-10-15 21:55:04 · 1374 阅读 · 1 评论 -
赛马网基本算法之--研究生考试
题目描述 欢迎大家参加奇虎360 2016校招在线招聘考试,首先预祝大家都有个好成绩!我相信参加本次在线招聘考试的有不少研究生同学。我们知道,就计算机相关专业来说,考研有4门科目,分别是政治(满分100分),英语(满分100分),数学(满分150分)和专业课(满分150分)。某校计算机专业今年录取研究生的要求是:政治、英语每门课成绩不低于60分,数学和专业课不低于90分,总成绩不原创 2016-10-15 22:14:45 · 564 阅读 · 0 评论 -
赛马网基本算法之一 (股神问题)
题目描述有股神吗?有,小赛就是!经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推。为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱?输入输入包括多组数据;每行输入一个n,1原创 2016-09-30 20:29:08 · 2974 阅读 · 0 评论 -
赛马网基本算法之--将功赎过
题目描述小赛是一名幸运的程序员。虽然他成功帮助小朋友以最快时间夺回了狼堡,但是面试官却打算和他说拜拜了。理由是——游戏天赋太高,有不务正业、走火入魔的倾向QAQ……尽管小赛很不能接受这个理由,可是却只能心灰意冷地吃下这个结果。然而,在他即将走出门的时候,面试官给了幸运的小赛一个最后的机会。原来,面试官的手机被他调皮的儿子小明用一个数字作为密码原创 2016-09-30 20:37:00 · 857 阅读 · 0 评论 -
赛马网基本算法之--翻转数组
题目描述给定一个长度为n的整数数组a,元素均不相同,问数组是否存在这样一个片段,只将该片段翻转就可以使整个数组升序排列。其中数组片段[l,r]表示序列a[l], a[l+1], ..., a[r]。原始数组为a[1], a[2], ..., a[l-2], a[l-1], a[l], a[l+1], ..., a[r-1], a[r], a[r+1], a[r+2], ..原创 2016-10-01 18:37:41 · 1268 阅读 · 0 评论 -
LeetCode OJ 第63题Unique Paths ||
Follow up for "Unique Paths":Now consider if some obstacles are added to the grids. How many unique paths would there be?An obstacle and empty space is marked as 1 and 0 respectively in the原创 2016-11-07 21:04:51 · 421 阅读 · 0 评论 -
0-1背包问题
0-1背包指的当往背包里装物品是,要么装,要么不装,而不能装物品的一部分;部分背包问题指的是可以装物品的一部分,而不必做出0-1的二分选择;贪心算法的关键所在是(贪心选择性质和最优子结构);自上而下,一个一个的做出贪心选择,不断将问题规约到更小的子问题;动态规划的关键所在是(重叠子问题和最优子结构);自下而上,每一步都要做出选择,但这些选择依赖于子问题的解;题目:总共有3件物品原创 2016-10-02 10:23:14 · 475 阅读 · 0 评论 -
leetcode第143题 ( Reorder List),快慢指针的应用
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…You must do this in-place without altering the nodes' values.For example,Given {1,2,3,4}, reorder it to原创 2016-10-27 20:14:50 · 432 阅读 · 0 评论 -
同一问题的递归与动态规划解法
问题:给定一个源串和目标串,能够对串进行入戏操作:1、在给定的位置上插入一个字符;2、替换任意字符;3、删除任意字符;写一个程序,返回最小的操作数,使得进行这些操作后源串等于目标串,假设源串和目标串的长度都小于2000;例如:修改一个字符(如把“a”替换为“b”);增加一个字符串(如把“abdd”变为“aebdd”);删除一个字符串(如把“travelling”原创 2016-10-03 14:39:13 · 444 阅读 · 0 评论 -
二分查找算法
//2分查找算法int BinarySearch(const int a[],int x,int n){ int low,mid,high; low=0; high=n-1; while(low<=high){ mid=(low+high)/2; if(a[mid]<x){ low=mid+1; }else if(a[mid]>x){ high=mid-1;原创 2016-06-02 20:10:43 · 275 阅读 · 0 评论