lincode 题目记录5
Course Schedule 安排课表 Frog Jump 最长回文字符串长度
Course Schedule
选课方案问题,题目说的很清楚了就是bfs或者dfs,然后加个字典优化,弄了好久没弄出来··网上查的算法··提交的是bfs的算法,dfs的算法给的用例好像是递归太深了· python编译器直接崩了··本地调试也是直接崩了··
bfs的核心是用一个数组记录每个数字的深度··就是要上这个课之前你得上多少门课,把是0的都加到队列里边,后边遍历的时候遍历到这个点的时候 减一,直到减完,遍历完了如果还有点的入度不为0 ,就不能完成
网站上的python不知道是啥版本·· 队列是大写的Q ,我本地的是python3.5 是小写的 ··dfs的递归好像通不过
class Solution:
# @param {int} numCourses a total of n courses
# @param {int[][]} prerequisites a list of prerequisite pairs
# @return {boolean} true if can finish all courses or false
def canFinish(self, numCourses, prerequisites):
import Queue
import sys
sys.setrecursionlimit(1000000)
if len(prerequisites)<2:return True
dicp={}
inlist=[0]*numCourses
for p in prerequisites:
dicp.setdefault(p[1],[])
dicp[p[1]].append(p[0])
inlist[p[0]] += 1
q=Queue.Queue()
for i in range(numCourses):
if inlist[i] == 0:q.put(i) while not q.empty():
cur=q.get()
if cur not in dicp:continue
for i in dicp[cur]:
inlist[i] -=1
if inlist[i]==0:q.put(i) for i in inlist:
if i !=0 :return False return True
''' DFS
visit=[0]*numCourses
def canfinishdfs(visit,i):
if visit[i]==-1:return False
if visit[i]==1:return True
visit[i]=-1
if i in dicp:
for cur in dicp[i]:
if not canfinishdfs(visit,cur):return False
visit[i]=1
return True for i in range(numCourses):
if not canfinishdfs(visit,i):
return False return True
'''
安排课程问题,跟上边一样·· 加一个数组输出就行了·最后可以选课就是输出,不能就是输出空数组
class Solution:
# @param {int} numCourses a total of n courses
# @param {int[][]} prerequisites a list of prerequisite pairs
# @return {int[]} the course order
def findOrder(self, numCourses, prerequisites):
# Write your code here
import Queue
dicp={}
inlist=[0]*numCourses
for p in prerequisites:
dicp.setdefault(p[1],[])
dicp[p[1]].append(p[0])
inlist[p[0]] += 1
q=Queue.Queue()
res=[]
for i in range(numCourses):
if inlist[i] == 0:
q.put(i)
res.append(i) while not q.empty():
cur=q.get()
if cur not in dicp:continue
for i in dicp[cur]:
inlist[i] -=1
if inlist[i]==0:
q.put(i)
res.append(i) for i in inlist:
if i !=0 :
return []
return res
Frog Jump
跳青蛙问题,从后往前遍历,从倒数第3个开始计算是否能到达该点,DFS算法,第一个递归的一个循环的··,关键在那个失败的缓存节点,
if len(stones)==1:return True
# memo=set()
# target=stones[-1]
# stones=set(stones) # def bt(cur,k):
# if (cur,k) in memo:
# return False
# if cur==target:
# return True
# if cur>target or cur<0 or k<=0 or cur not in stones:
# return False
# dirs=[k-1,k,k+1]
# for c in dirs:
# if (cur+c)in stones:
# if bt(cur+c,c):
# return True
# memo.add((cur,k))
# return False
# return bt(0,0) stone_set, fail = set(stones), set()
stack = [(0, 0)]
while stack:
stone, jump = stack.pop()
for j in (jump-1, jump, jump+1):
s = stone + j
if j > 0 and s in stone_set and (s, j) not in fail:
if s == stones[-1]:
return True
stack.append((s, j))
fail.add((stone, jump))
return False
最长回文字符串长度·直接分组遍历就行了:
class Solution:
# @param {string} s a string which consists of lowercase or uppercase letters
# @return {int} the length of the longest palindromes that can be built
def longestPalindrome(self, s):
# Write your code here
dics={}
for i in s:
dics.setdefault(i,[])
dics[i].append(i)
sum=0
flag=False
for di in dics:
n=len(dics[di])
if n>1:
if n%2 !=0:
sum+=n-1
flag=True
else:
sum+=n
else:
flag=True
if flag:sum+=1
return sum
lincode 题目记录5的更多相关文章
- lincode 题目记录6
the Duplicate Number 132 PatternFind 找重复的数字··直接暴力枚举是不行的···又超时提示·· 暴力枚举的写法· res=0 def findDuplicate( ...
- 牛客OI周赛9-提高组题目记录
牛客OI周赛9-提高组题目记录 昨天晚上做了这一套比赛,觉得题目质量挺高,而且有一些非常有趣而且非常清奇的脑回路在里边,于是记录在此. T1: 扫雷 题目链接 设 \(f_i\) 表示扫到第 \(i\ ...
- 2019-中小型公司PHP面试题目记录(附带答案)
博主是三线省会城市的苦逼技术开发,主攻PHP方向,平时前后端语言也都有涉及,因为都是自学,上手就是框架,工作五年来基础补的不稳,换工作的时候苦不堪言,感觉一上来就问Ngnix的运行机制,php的被编译 ...
- 剑指offer题目记录
1.如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); CMyStri ...
- lintcode题目记录4
Russian Doll Envelopes Largest Divisible Subset Two Sum - Input array is sorted Russian Doll ...
- lintcode 题目记录3
Expression Expand Word Break II Partition Equal Subset Sum Expression Expand 字符串展开问题,按照[]前的数字展开字符 ...
- iOS技能 - 最新美团、百度、腾讯、头条、阿里 面试题目记录
关于面试题,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家指教.主要记录一下准备过程,和面试的一些总结,希望能帮助到正在面试或者将要面试的同学吧. 美团 一面 1.简历上写的项目问了一遍,然 ...
- lintcode 题目记录2
判断字符串是否是互为置换,类似 替换字符串之类的遍历就行了.. class Solution: # @param {string} A a string # @param {string} B a s ...
- for循环题目记录
1.求1000以内的完数 /** * 一个数如果恰好等于它的因子之和,这个数就是完数,找出1000内的所有完数 * @author 努力Coding * @version * @data */ pub ...
随机推荐
- ArchLinux下十八岁的感悟
这次不写技术文章,谈谈自己.现在我们之间没有博主和来访者的关系,我们就是简单聊聊天.你若愿意,就听我说一说. 或者你可以按下crtl+w退出该页面,博主有其他的技术文章.但我希望你能看看最好可以给我留 ...
- top 常用命令
参考文档: http://www.cnblogs.com/allen8807/archive/2010/11/10/1874001.html [root@linux ~]# top [-d] | to ...
- React-Native 工程添加推送功能 (iOS 篇)
推送已经是是手机应用的基本功能,如果自己实现一套推送系统费时费力,所有一般我们会使用第三方的推送服务,这里我使用「极光推送」作为集成推送的例子,因为有现成的 react native 插件 jpush ...
- es查询,聚合、平均值、值范围、cardinality去重查询
原文:https://blog.csdn.net/sxf_123456/article/details/78195829 普通查询 GET ana-apk/_search { "query& ...
- 解析XMl文档和字符串
//解析xml字符串 txt="<bookstore><book>"; txt=txt+"<title>Everyday Italia ...
- 世界最大BT服务器本周死了三回 海盗湾要凉凉?
想當初,我是受到BT網站海盜灣的啟發,開發了一個DHT下載網站:http://www.ibmid.com,有一段時間通宵編程,理解此個協議. 海盗湾(The Pirate Bay)是世界上最大的 BT ...
- POJ - 3585 树上最大流 换根法
题意:给出一棵树,边上有容量限制,求以任一点作为根和源点,叶子作为汇点的最大流的最大值 首先上网络流等于找死 树形DP可以\(O(n)\)求出以某点\(u\)为根的最大流,只需设\(f[u]=\sum ...
- [转] shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别
[From] https://www.cnblogs.com/tony1314/p/8315666.html 1. 关于文件和目录 -f 判断某普通文件是否存在 -d 判断某目录是否存在 -b ...
- [转] crontab命令
[From] http://man.linuxde.net/crontab 当前位置:首页 » 系统管理 » crontab crontab命令 crontab命令被用来提交和管理用户的需要周期性 ...
- 浅解bootstrap 下拉框插件
最近的业务需求是把后台数据渲染到前端,其中有一个是复选框数组,前端选择渲染的方式是bootstrap的下拉插件 渲染完成之后,此时会在原有select同级上面生成buton,dropdown-menu ...