算法编程
py小菜鸟
这个作者很懒,什么都没留下…
展开
-
网易2018编程题之游历魔法王国
题目描述: 魔法王国一共有n个城市,编号为0~n-1号,n个城市之间的道路连接起来恰好构成一棵树。 小易现在在0号城市,每次行动小易会从当前所在的城市走到与其相邻的一个城市,小易最多能行动L次。 如果小易到达过某个城市就视为小易游历过这个城市了,小易现在要制定好的旅游计划使他能游历最多的城市,请你帮他计算一下他最多能游历过多少个城市(注意0号城市已经游历了,游历过的城市不重复计算)。输入描述:原创 2017-09-11 22:41:44 · 4221 阅读 · 0 评论 -
#牛客2017爱奇艺编程3题#
一.括号匹配深度一个合法的括号匹配序列有以下定义: 1、空串”“是一个合法的括号匹配序列 2、如果”X”和”Y”都是合法的括号匹配序列,”XY”也是一个合法的括号匹配序列 3、如果”X”是一个合法的括号匹配序列,那么”(X)”也是一个合法的括号匹配序列 4、每个合法的括号序列都可以由以上规则生成。 例如: “”,”()”,”()()”,”((()))”都是合法的括号序列 对于一个合法的括原创 2018-02-07 15:50:31 · 422 阅读 · 0 评论 -
#牛客网易编程题3道#
一.最小难度 小Q和牛博士合唱一首歌曲,这首歌曲由n个音调组成,每个音调由一个正整数表示。 对于每个音调要么由小Q演唱要么由牛博士演唱,对于一系列音调演唱的难度等于所有相邻音调变化幅度之和, 例如一个音调序列是8, 8, 13, 12, 那么它的难度等于|8 - 8| + |13 - 8| + |12 - 13| = 6(其中||表示绝对值)。 现在要对把这n个音调分配给小Q或牛博士,让他们演原创 2018-02-17 23:38:02 · 1017 阅读 · 0 评论 -
#牛客#今日头条编程题2道
一.P为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。 思路:容易看出,当一个点满足x轴或y轴任意一个坐标比以存在的原创 2018-02-18 21:45:23 · 4238 阅读 · 2 评论 -
#剑指offer#正则表达式的字符串匹配。
题目: 请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配思路:动态规划,设dp[j][i] 为pattern前j个模式是否与s前i个相匹配的真值,即p...原创 2018-03-16 15:16:18 · 260 阅读 · 0 评论 -
#剑指offer#两个链表的第一个公共结点
隐含条件:两个链表的公共结点后的结点一定相同,因为公共结点只有一个指向后面结点的指针,不可能两条链表相交后又会分叉。思路1:遍历两条链表,找到较长的一条,记为l,长度记为l1;较短的一条记为s,长度为s1;让较长的一条先走l1-s1,然后两条一起走,直到结点相同返回或链表尾时返回空。思路2:用两个栈,分别将两条链表依次入栈,再同时出栈,直到两个出栈的结点不相等,返回前一个相等的结点。思路3:哈希表,原创 2018-03-10 14:27:58 · 136 阅读 · 0 评论 -
不用+进行加法
主要是利用异或^求二进制的非进位加法,和用&和<<求进位. 迭代:def add(a,b): cxor=a^b #非进位加法 cand=(a&b)<<1 #求进位,注意需要左移1位 while cand: t=cxor cxor=cxor^cand cand=(t&cand)<<1 return cxor递归:def原创 2018-03-12 13:39:27 · 222 阅读 · 0 评论 -
#剑指Offer#顺时针打印矩阵
up, down, left, right 分别记录未打印矩阵的上下左右下标,每打印一行依次减一 -*- coding:utf-8 -*-class Solution: # matrix类型为二维列表,需要返回列表 def printMatrix(self, matrix): # write code here up, down, left, rig原创 2018-03-06 12:21:01 · 153 阅读 · 0 评论 -
#剑指offer#从上往下打印二叉树
定义一个队列,依次加入队列头的子节点,并将队列头出队列,知道队列为空# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution:原创 2018-03-06 13:30:24 · 139 阅读 · 0 评论 -
#剑指offer#二叉排序树的后序遍历序列
二叉排序树:根结点大于左子树的所有结点,小于右子树的所有节点,且以每一个以子结点为根的树也是二叉排序数。后续遍历:先遍历左子树,在遍历右子树,最后访问根结点,对左子树和右子树使用后序遍历,直到为空。其特点是后序遍历的序列根结点一定在最后。二叉排序数树后续遍历后,其根结点在最后一个数,然后遍历序列找到左子树和右子树的结点,再判断是否符合要求。对左右子树进行相同操作。# -*- coding:utf-8原创 2018-03-06 15:24:29 · 601 阅读 · 0 评论 -
#剑指offer#二叉树中和为某一值的路径
可以通过二叉树的前序遍历,用一个stack来保存当前遍历的路径,遇到叶结点时判断是否和对应的值(expectNumber-该结点前路径之和)相等。注意stack的出栈时机。# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left =原创 2018-03-06 16:34:35 · 161 阅读 · 0 评论 -
#leetcode#321.Create Maximum Number
题目描述: Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum number of length k <= m + n from digits of the two. The relative order of the digits from the same原创 2018-02-12 13:42:09 · 478 阅读 · 0 评论 -
<再来一题>数组中是否存在两数之和等于target
问题描述: 给定一个数组:a1,a2,…,an,和一个目标数值target,问数组中是否存在两个数ai和aj,使得ai+aj等于target。解题思路: 先将数组排序,时间复杂度为O(nlogn),然后分别用两个指针 i , j 指向排序后数组的头和尾,计算ai+aj,之和s,若s大于target,则说明j取值过大,所以j=j-1;若s小于target,则说明i取值过小,所以i=i+1。原创 2017-12-31 22:37:14 · 1062 阅读 · 0 评论 -
网易2017编程题之前n个数的最大奇约数之和
小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最大的奇数约数,x为正整数。 例如:f(44) = 11.现在给出一个N,需要求出 f(1) + f(2) + f(3)…….f(N)例如: N = 7f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + f(7) = 1 + 1 + 3 + 1 + 5 + 3 +原创 2017-09-10 10:00:31 · 663 阅读 · 0 评论 -
<每日一题>二分搜索
def bitsearch(a,t): start=0 end=len(a)-1 flag=-1 while(start<=end): mid=int((start+end)/2) if a[mid]>t: end=mid-1 elif a[mid]<t: start=mi原创 2017-11-10 10:37:23 · 167 阅读 · 0 评论 -
<每日一题>快速排序
def quicksort(nums): left=[] right=[] l=len(nums) if l<=1: return nums else: for i in range(1,l): if nums[i]>=nums[0]: right.append(nums[原创 2017-11-10 16:39:23 · 181 阅读 · 0 评论 -
<几天一题>插入排序
def insertSort(nums) length=len(nums) if length==1: return nums for i in range(1,length): j=i-1 key=nums[i] while j>=0 and nums[j]>key: nums[j+1]原创 2017-11-19 10:39:09 · 126 阅读 · 0 评论 -
<不定时一题>归并排序
def merge(A,p,q,r): left=A[p:q+1].append(float('inf') right=A[q+1:r+1].append(float('inf')) i=0 j=0 for x in range(p,r+1): if left[i]<=right[j]: A[x]=left[i]原创 2017-11-19 19:33:20 · 121 阅读 · 0 评论 -
<每日一题>冒泡排序
def bubbleSort(l): length=len(l) for i in range(1,length): j=length-1 while j>=i: if l[j-1]>l[j]: l[j-1],l[j]=l[j],l[j-1] j-=1原创 2017-11-22 14:28:47 · 172 阅读 · 0 评论 -
<每日一题>算法导论:最大股票收益
一.抽象: 给定一个数组,求出数组中两数之差的最大值,被减数下标大于减数 二.方法: 1.分治法: a.将数组分成左右两部分 b.分别求出两部分的最大值,最小值,以及下标大的数与下标小的数之差的最大值。 c.合并两部分的结果时间为O(nlogn)2.转化为最大子数组和问题: a.先求出数组的前一个数与后一个数之差,组成新的数组 b.求新数组的最大子数组和 (原理:假设原数组(长度为原创 2017-11-23 13:33:32 · 3245 阅读 · 0 评论 -
<每日一题>最大回文子字符串
def findBMstr(s):原创 2017-12-03 14:06:36 · 212 阅读 · 0 评论 -
<每日一题>动态规划入门:求最小硬币个数
问题描述: 给出已有的硬币面额,和需用这些硬币组成的目标金钱数目,求能够组成这个目标金钱的最少硬币个数。 问题分析: 给定面额为c=[c1,c2,…ck],给定金钱数目为s,s可以由c中任意可行面额组成,则k可以分成: s - ci + ci ,其中i<=k,且ci<=s,这样问题就转化为组成 金额为s-ci的最少硬币个数,假设为m,则组成s的最少硬币个数为m+1,同理可以继续求解s-ci。原创 2017-11-27 17:47:15 · 1986 阅读 · 0 评论 -
<n天才一题>#leetcode#最大容水量
题目描述: Given n non-negative integers a1, a2, …, an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0).原创 2017-12-31 17:38:19 · 301 阅读 · 0 评论 -
#leetcode#149. Max Points on a Line
题目描述 Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.(二维坐标下给定n个2维的点,找出在同一条直线上的点的最大个数)Example 1:Input: [[1,1],[2,2],[3,3]] Output: 3Example 2:...原创 2018-08-14 18:52:24 · 227 阅读 · 0 评论