数据结构与算法
ailinyingai
DevOps 搬砖人 干饭人
展开
-
链表队列 算法
from typing import Optionalclass Node: def __init__(self, data: str, next=None): self.data = data self._next = nextclass LinkedQueue: def __init__(self): self._head: Optional[Node] = None self._tail: Optional.原创 2021-10-10 22:34:30 · 289 阅读 · 0 评论 -
链表栈算法
from typing import Optionalclass Node: def __init__(self, data: int, next=None): self._data = data self._next = next class LinkedStack: """A stack based upon singly-linked list. """ def __init__(self): s原创 2021-10-10 22:27:36 · 296 阅读 · 0 评论 -
2021-10-10链表题
""" 1) Reverse singly-linked list 2) Detect cycle in a list 3) Merge two sorted lists 4) Remove nth node from the end 5) Find middle node"""from typing import Optionalclass Node: def __init__(self, data: int, next=None):原创 2021-10-10 14:44:07 · 104 阅读 · 0 评论 -
2021-10-10数组
数组的实现连续空间## 1) Insertion, deletion and random access of array# 2) Assumes int for element typeclass MyArray: """A simple wrapper around List. You cannot have -1 in the array. """ def __init__(self, capacity: int): self._dat原创 2021-10-10 14:01:38 · 91 阅读 · 0 评论 -
最大矩形
###最大矩形####原题在一个位图中找面积最大的白色矩形:给你一个NxN的黑白位图,找一个面积最大的全白色的矩形。注意了,是一个矩形,不是任意一个白色相连的区域。你的算法能够达到的最好的时间复杂度是多少呢?####分析为了方便进行分析,我们假设黑色位置都是0,白色的位置都是1.题目的问题就转化为,找到一个最大的矩形,其中所有的元素都是1.遇到这样的题目,该如何分析呢?这是一个矩形,是二...翻译 2019-09-04 10:49:54 · 1704 阅读 · 0 评论 -
第n杯水分析
###第n杯水分析#######原题有一座金字塔,从上到下,第一层有一个杯子、第二层有两个杯子,依次类推。对杯子进行编号,有如下的形状:123456每个杯子的容量为C升,从塔顶倒下L升水,当1号杯子满了之后,会等量溢出到2号和3号杯子。当2号和3号满了,2号溢出到4号和5号,3号溢出到5号和6号,注意5号接受来自两个杯子的水。依次类推。给定C和L,请问,第n杯里有多少水。####...翻译 2019-09-04 10:45:58 · 319 阅读 · 0 评论 -
老鼠毒药分析
###老鼠毒药分析####原题 有11瓶酒,只有一瓶有毒。喝酒之后,三天会死,只有三天时间。请问至少需要多少只老鼠,可以找出9瓶没有毒的酒。####分析 题目描述很简单,可我们仍要抓住要点:11瓶,1瓶有毒喝酒之后,三天会死;只有三天时间->即使某一个老鼠没有被毒死,也不会有时间重复利用了要使用最少个数的老鼠,要找到9瓶没有毒的10瓶无毒的,为何要找到9瓶呢?老鼠开始喝酒,第一只...翻译 2019-09-04 10:33:19 · 366 阅读 · 0 评论 -
斐波那契堆的实现--python
class FibNode: def __init__(self, key): self.key = key self.degree = 0 self.p = 0 self.child = 0 self.left =0 self.right = 0 self.mark = Fa...原创 2019-09-03 17:45:48 · 512 阅读 · 0 评论 -
缺失的数字分析
###缺失的数字分析####原题 给定一个无序的整数数组,怎么找到第一个大于0,并且不在此数组的整数。比如[1,2,0] 返回 3, [3,4,-1,1] 返回 2。最好能O(1)空间和O(n)时间。 ####分析 首先数组是无序的,找到第一个大于0且不在数组中的元素,就是要找到大于0且不在数组中的最小的整数。要怎么处理呢?要找到最小的,不妨尝试从小到大排序,然后从1开始,查找是否在数组中,可以...翻译 2019-08-28 11:16:30 · 271 阅读 · 0 评论 -
括号匹配
###括号匹配####原题给定字符串,输出括号是否匹配,例如,“()” yes;“)(” no;“(abcd(e)” no;“(a)(b)” yes。要求必须用递归写,整个实现不可以出现一个循环语句。####分析 这个题目很多同学都见过了,如果没有后面的条件,会张口就说就来用栈来实现,时间复杂度O(n),空间复杂度O(n)。这个是很好的一个解答,没有问题的。但是我们在做面试题,准备...翻译 2019-08-28 10:58:36 · 353 阅读 · 0 评论 -
色子问题
###Google面试题分析:色子问题####原题n个色子,每个色子m面,每一面的值分别是1-m。你将n个色子同时抛,落地后将所有朝上面的数字加起来,记为sum。给定一个数字x,如果sum>x,则你赢。给定n,m,x,求你赢的概率。1<=n<=1001<=m<=10m<=x<n*x####分析这个题目的描述,是将具体的问题一般化了。掌握了,这...翻译 2019-09-04 14:08:01 · 522 阅读 · 0 评论 -
色子玄机
色子玄机####原题有两个色子,一个是正常的,六面分别1-6的数字;另一个六面都是空白的。现在有0-6的数字,请给出一个方案,将0-6中的任意数字涂在空白的色子上,使得当同时扔两个色子时,以相等的概率出现某一个数字。如果一个色子是1,另一个色子是2,则出现的数字是3。依次类推。####分析首先,深入理解题目。两个色子,一个色子上1到6,是正常的,可以理解为,随手一扔,每个数字出现的概率是相...翻译 2019-09-05 09:19:49 · 251 阅读 · 0 评论 -
摸牌A
第一张A的概率####原题52张牌,四张A,随机打乱后问,从左到右1张一张翻直到出现第一张A,请问平均要翻几张牌?####第一种分析摸到第一张A之前的都是其他的牌,那么,之前会有多少种可能呢? 之前可能会有0张,1张。。。。48张。考虑4张A在牌中的位置,他们把其他牌分成了5份(四个点把直线分成五段)。每一份的个数从0-48不等,完全随机的情况下,每份的平均长度为48/5=9.6,摸完这9...翻译 2019-09-05 09:22:21 · 572 阅读 · 0 评论 -
选择旅游国家
选择旅游国家####原题有一个待选国家的列表,以及国家的相对热门程度,请给出一个算法,随机选择一个国家,并且保证,越是热门的国家,随机选择它的可能性就越高。####分析每当我们遇到一个题目的时候,都要对题目进行充分的理解,有哪些条件,目标是什么。这个题目看完之后,我们能够得到两个要点:随机选择一个国家越是热门,选择的可能性、概率就越高我们怎么做到这个呢?如何充分理解这个呢?还是通过一...翻译 2019-09-06 16:55:55 · 372 阅读 · 0 评论 -
袁天罡 死亡小岛
死亡小岛####原题一个小岛,表示为一个N×N的方格,从(0,0)到(N-1, N-1),袁天罡站在岛上,位置(x, y),他可以上下左右走,一步一个格子,他选择上下左右的可能性是一样的。当他走出小岛,就意味着死亡。假设他要走n步,请问他死亡的概率有多大?请写出求解代码。####分析 遇到这样的问题,就试着走几步好了。当一个人在(x,y)的时候,假设他此时,死亡的概率为p(x,y,n),然后...翻译 2019-09-06 16:58:28 · 152 阅读 · 0 评论 -
谁多谁少
###谁多谁少####原题盒子A有10个红球,盒子B有十个绿球。进行如下的操作:随机从A中拿三个球放入B中随机从B中拿三个球放入A中问题是,在哪一个盒子中,会出现一个颜色的球比另一个颜色的球更多?该如何分析?####分析最近概率相关的面试题目出了不少,不知道大家对这类题目的感觉如何。是否已经抓住了一些路子,一些分析方法,遇到一个题目的时候,可以按部就班的解决它。这些都没有什么比较好的...翻译 2019-09-06 17:00:31 · 140 阅读 · 0 评论 -
数组的波谷
###找数组的波谷####原题一个数组A[1…n],满足A[1]>=A[2], A[n] >= A[n-1]。A[i]被成为波谷,意味着:A[i-1] >= A[i] <= A[i+1]。请给出一个算法,找到数组中的一个波谷。O(n)的方法,是很直接,有更快的方法么?####分析这个题目遍历一遍数组,显然就可以找到全部的波谷。时间复杂度O(n),空间复杂度是O(1)...翻译 2019-09-06 17:12:48 · 675 阅读 · 0 评论 -
链表快排
###QuickSort on Singly Linked List#####Rationale思路和数据的快速排序一样,都需要找到一个pivot元素、或者节点。然后将数组或者单向链表划分为两个部分,然后递归分别快排。针对数组进行快排的时候,交换交换不同位置的数值,在分而治之完成之后,数据就是排序好的。那么单向链表是什么样的情况呢?除了交换节点值之外,是否有其他更好的方法呢?可以修改指针,不...翻译 2019-09-09 17:41:00 · 235 阅读 · 0 评论 -
round e
共有N个樱桃,目前N个樱桃中有M条黑色糖线(黑色表示含糖量为1个单位),为使所有樱桃连在一起(最小生成树的感觉),可能还需红色糖线(红色含糖量为2个单位),问最终最少的含糖量。(原链接:https://codingcompetitions.withgoogle.com/kickstart/round/0000000000050edb/0000000000170721) import numpy...原创 2019-09-19 14:56:03 · 172 阅读 · 0 评论 -
回文分割
###回文分割分析####原题 对一个字符串按照回文进行分割,例如aba|b|bbabb|a|b|aba就是字符串ababbbabbababa的一个回文分割,每一个字串都是一个回文。请找到可以分割的最少的字串数。例如:ababbbabbababa最少4个字符串,分割三次:a|babbbab|b|ababa如果字符串整体是回文,则需要0次分割,最少1个字符串####分析 这个题目很多做过le...翻译 2019-08-28 10:08:22 · 855 阅读 · 0 评论 -
翻译字符串
###翻译数字串分析####原题 翻译数字串,类似于电话号码翻译:给一个数字串,比如12259,映射到字母数组,比如,1 -> a, 2-> b,… , 12 -> l ,… 26-> z。那么,12259 -> lyi 或 abbei 或 lbei 或 abyi。输入一个数字串,判断是否能转换成字符串,如果能,则打印所以有可能的转换成的字符串。动手写写吧。一般都...翻译 2019-08-28 10:05:13 · 1047 阅读 · 0 评论 -
糖果分析
###糖果分析####原题 N个孩子站成一排,每个人分给一个权重。按照如下的规则分配糖果:每个孩子至少有一个糖果所分配权重较高的孩子,会比他的邻居获得更多的糖果问题是,最少需要多少个糖果?####分析 这个题目是要求找到最少需要多少个糖果。最少的糖果是存在的,体现在哪里呢?权重较高的孩子,会比他的邻居们获得更多的糖果,那么多多少呢?可以是1个,2个,或者更多个,但显然,当多一个的时候。总...翻译 2019-08-28 09:34:13 · 240 阅读 · 0 评论 -
最少插入字符分析
###最少插入字符分析####原题 给定字符串,可以通过插入字符,使其变为回文。求最少插入字符的数量。例如:ab最少插入1个字符,变为babaa最少插入0个字符abcd最少插入3个字符,dcbabcd####分析 这个题目的分析思路,和前面两期是非常相似的:给出递归的解法,发现重复的子问题,改进为动态规划的解法,这是一个分析的过程,待同学们比较熟悉时候,可以直接给出动态规划的解决方案,就...翻译 2019-08-14 08:57:26 · 140 阅读 · 0 评论 -
最大乘积
###最大乘积分析####原题 一根绳子,长度为n米。将其切成几段,每一段的长度都是整数。请给出一种切法,使得切成的各段绳子之间的乘积是最大的。注意,最少要切一下的。 ####分析 这个题目如何一步一步的分析呢?不管切几段,总有第一段,第二段…等等。第一段的长度有哪些选择呢?可以是1、2、3…一直到n-1(至少要切一下),我们用max_prod(n)表示长度为n的绳子的切法中,乘积最大的值。那么...翻译 2019-08-13 17:55:04 · 336 阅读 · 0 评论 -
色子问题
###Google面试题分析:色子问题####原题n个色子,每个色子m面,每一面的值分别是1-m。你将n个色子同时抛,落地后将所有朝上面的数字加起来,记为sum。给定一个数字x,如果sum>x,则你赢。给定n,m,x,求你赢的概率。1<=n<=1001<=m<=10m<=x<n*x####分析这个题目的描述,是将具体的问题一般化了。掌握了...翻译 2019-08-13 17:27:42 · 455 阅读 · 0 评论 -
扔鸡蛋
试想一下,虽然第一次就缩减一半的查找量很有吸引力,仿佛很爽的样子,但是要明白,蛋碎了接下来还是一个漫长的寻找过程,那么,有木有办法可以让第一枚鸡蛋和第二枚鸡蛋的尝试次数尽可能均衡呢?(可以理解成在第一枚蛋查找的范围尽可能的大和第二枚蛋查找的范围尽可能的小之间的一个平衡。)可能会有人说这俩事是矛盾的,确实,就是这样,但是我们可以在两者之间找到一个平衡点。接下来,是关于平衡点的探索:首先,很简单的...翻译 2019-08-13 14:52:08 · 127 阅读 · 0 评论 -
零食满意度
小明在购物架买东西,每个格子放着一种物品,上面标记价格,数目和满意度,小名总共有T的钱,他希望在T以内获得最大的满意度。零食必须整数倍购买,个数有限,卖完就没了。输入:输入包含多组测试数据,每组数据:第一行输入两个整数T、N,分别代表钱数和零食种类数。接下来的N行,每行输入三个整数ai, bi, ci(1 <= i <= N) ,代表零食的价格、零食的满意度、零食的数量输出:...翻译 2019-08-13 14:38:01 · 302 阅读 · 0 评论 -
机器人大作战
是一个单源最短路径算法问题,当时看到题目就退缩了。只大概的记录一下题目,没有代码实现。N个路标从 1 到 N-1,机器人S只能沿直线从两个路标之间移动,且部分路标间不通。S从0出发,裁判随机给出一个路标,要求S以最快速度到达。每轮都从0开始。用时最短的获胜。每两个路标至少存在一条路径可以到达。写程序实现。输入:第一行 N,P,C 三个数据,分别代表 路标个数,可以移动的路标的道路的数目...翻译 2019-08-13 14:31:56 · 317 阅读 · 0 评论 -
咖啡的香气
小名要调N个bug,喝一杯咖啡可以加速一个小时中调bug的速度A倍,一个小时内重复喝无效。一天最多工作八小时。每个bug初始的所需时间是 t1,t2,t3,…tn分钟。问是否可以解完所有的bug。输入:输入包含多组测试数据。每组测试数据:第一行输入三个整数:N、A、X,分别代表需要解决的bug数量、喝咖啡之后效率提升的倍数、一天最多可以喝掉的咖啡数第二行输入N个整数,表示在不喝咖啡的情况下...翻译 2019-08-13 14:29:31 · 172 阅读 · 0 评论 -
二十四点
from collections.abc import Iterablefrom itertools import product,permutations,zip_longest,chainimport mathclass Point24(): # 定义操作符元祖 OPERATIONS = ('+','-','*','/') # 定义格式化字符窜的格式 ...原创 2019-08-08 16:07:23 · 147 阅读 · 0 评论 -
蜜蜂采蜜
有一只小蜜蜂从蜂巢去五片花田采蜜,采完回家,假设以蜂巢为坐标原点(0,0),花田位置为A(50,0)、B(50,5)、C(50,20)、D(50,30)、E(50,50),规划小蜜蜂采蜜路线,求解蜜蜂飞行最短距离(输出为整数)pythonpathsum=[]def array(coord,begin,end): global pathsum l=len(coord) if beg...原创 2019-08-07 11:22:23 · 853 阅读 · 0 评论 -
LIS问题
###LIS问题分析####原题 这个LIS问题,可不是Longest Increasing Subsequence,而是Largest Independent Set,含义如下:给定一棵二叉树,找到满足如下条件的最大节点集合:集合中的任意两个节点之间,都没有边。如下图: treeLIS大小为5,为{10,40,60,70,80}.####分析 这个题目与前几期的题目颇有类似,而且,一个二叉...翻译 2019-08-14 09:08:53 · 517 阅读 · 0 评论 -
拷贝链表
###拷贝链表分析####原题 有一个链表,每一个节点除了next指针指向一下节点以外,又多出了一个指针random,指向链表中的任何一个节点,包括null。请给出方法完成链表的深拷贝。####分析 这个问题的关键就在于random指针如何完成拷贝,next指针一次遍历就完成了,random指针拷贝的关键在于,如何找到random指向的节点对应的新的节点。一般来讲,大家会想到用map来保存旧的...翻译 2019-08-14 16:28:07 · 993 阅读 · 0 评论 -
加油站分析
###加油站分析####原题 城市的环形路有n个加油站,第i个加油站的油量用gas[i]来表示,你有如下的一辆车:它的油缸是无限量的,初始是空的它从第i个加油站到第i+1个加油站消耗油量为cost[i]现在你可以从任意加油站开始,路过加油站可以不断的加油,问是否能够走完环形路。如果可以返回开始加油站的编号,如果不可以返回-1。注意,解决方案保证是唯一的。####分析 这个题目其实比较简单...翻译 2019-08-14 11:19:03 · 141 阅读 · 0 评论 -
分词问题
####分词问题####原题 给定字符串,以及一个字典,判断字符串是否能够拆分为字段中的单词。例如,字段为{hello,world},字符串为hellohelloworld,则可以拆分为hello,hello,world,都是字典中的单词。####分析 这个题目唤作“分词问题”,略显宽泛。只是想提及这个问题,这是在自然语言处理,搜索引擎等等领域中,非常基础的一个问题,解决的方法也比较多,相对比...翻译 2019-08-14 09:43:22 · 199 阅读 · 0 评论 -
数对
###数对数目分析####原题 给定两个数组X和Y,元素都是正数。请找出满足如下条件的数对的数目:x^y > y^x,即x的y次方>y的x次方x来自X数组,y来自Y数组####分析 假设数组X的长度为m,数组Y的长度为n,最直接的暴力法,时间复杂度为O(m*n),但这样的话,并不需要都是正数这个条件的。那么,我们该如何优化呢?xy>yx,对于x和y来讲,有什么规律呢?该...翻译 2019-08-14 09:26:15 · 310 阅读 · 0 评论 -
角谷定理
#include<iostream>using namespace std;//递归int Kakutani(int number) { int step=0; //定义并初始化整型变量,运算步数 int s; //定义一个临时变量,用于存放中间过程的运算步数 cout<<number<<" "; step++; //递归出口,总会得到...原创 2019-08-07 13:54:50 · 508 阅读 · 0 评论 -
赶鸭子
#include<iostream>using namespace std;//递归int calculate1(int duck,int village){ duck=(duck+1)*2; int sell=duck/2+1; cout<<"经过第"<<village<<"个村子卖出"<<sell<<"只鸭...原创 2019-08-07 13:52:59 · 274 阅读 · 0 评论 -
字符串翻转
# -*- coding:utf8 -*-n = int(input())strs = input()for i in range(n): s = strs[9*i:9*i+9] # 9个一组得读取 if s[0] == '0': s = s[1:] s = s[::-1] # 逆序 else: s = s[1:]...原创 2019-08-07 13:36:37 · 111 阅读 · 0 评论 -
切水果
#include <iostream>using namespace std;int main() { int mesh[40][50]; int tempx, tempy; int row = 0; int point = 0; int pointTemp[4];//h,s,p,n int time=0; memset(mesh, 0, sizeof(mesh))...原创 2019-08-07 13:34:18 · 449 阅读 · 0 评论