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 ...
随机推荐
- [AIR] 读写数据
新建两个Flash AIR文档read.fla,write.fla:write.fla作为写入数据,read.fla作为读取数据,仅作为测试的例子. 在write.fla关键帧第一帧写一下代码: im ...
- git 使用技巧之采用别名,简化命令
git config --global alias.st status git config --global alias.ci commit git config --global alias.co ...
- css ie6双倍margin现象
IE6双倍margin bug 当出现连续浮动的元素,携带和浮动方向相同的margin时,队首的元素,会双倍marign. 解决方案: 1)使浮动的方向和margin的方向,相反. 所以,你就会发现, ...
- 【算法笔记】B1044 火星数字
1044 火星数字 (20 分) 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, ...
- 分享一下Ubuntu好用的源
vim /etc/apt/sources.list 然后用G跳转到最后一行,然后[ESC]切换到命令行模式,然后键入[o](表示在当前行后插入).也可以多插入几个空行.这样可以有条理的和系统默认的区分 ...
- css3 实现 tooltip
/* START TOOLTIP STYLES */ [tooltip] { position: relative; /* opinion 1 */ } /* Applies to all toolt ...
- MIUI7系统如何刷入开发版启用root超级权限
小米的手机或平板不同手机型号通常情况MIUI官方论坛都提供两个不同系统,大概可分为稳定版和开发版,稳定版没有提供root权限管理,开发版中就开启了root权限,很多情况我们需要使用的一些功能强大的AP ...
- [Java基础]-- Java GC 垃圾回收器的分类和优缺点
https://blog.csdn.net/high2011/article/details/80177473?utm_source=blogxgwz2 参考:elasticsearch实战-使用G1 ...
- 根据word模版导入word中用户填写的数据
背景 客户有个需求:从word格式文档中读项目关键信息到数据库中,如:第一个表格中的联系人,项目名之类的信息,word中的格式不是固定的,可以会有些改动. 分析 方案1:读取第一个表格,然后再读取表格 ...
- java websocket client
websocket是H5新推出的协议,一般用于前端,但是在实际项目中我们需要用java代码来获取一些设备的实时运行数据,在后台处理后推送的前台界面,为了保证实时性,我们需要用到websocket协议, ...