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 ...
随机推荐
- dotnet --info
[root@bogon ~]# dotnet --info.NET Command Line Tools (2.1.4) Product Information: Version: 2.1.4 Com ...
- angular的一些思考
来公司做的第一个产品就是用angularjs来写的 我对整体这个产品架构的理解: 这套系统做的做的目的是实现所有的功能可配置化,使用MVC模型,有model层,view层,和controller层,m ...
- Saiku2.6 保存查询后,重新打开报 Error Loading Query错误。
发现Saiku2.6的查询保存后重新打开就会报如下错误,同等的Schema文件和数据库环境在3.15环境里面打开是一切正常的. 后面对比了一下2.6和3.15的启动环境,发现有些差异的地方. 2.6启 ...
- 关于window.open在不同浏览器的不同点
菜鸟教程: http://www.runoob.com/jsref/met-win-open.html 一.基本语法:window.open(URL,name,specs,replace)其中:URL ...
- rm: cannot remove `xxx’: Operation not permitted问题的处理方案
第一步:22.txt lsattr 22.txt 查看文件属性 看到的情况 -----a------- 第二步:去除a的属性 chattr -a 22.txt 第三步:在此执行删除 rm 22.txt
- c++ 两个set合并
set<int> a,b; //合并到a a.insert(b.begin(),b.end());
- Oracle SQL Developer 查询时间格式
工具->首选项->数据库->NLS->日期格式: DD-MON-RR 修改为: YYYY-MM-DD HH24:MI:SS
- D-Link DIR-645 信息泄露漏洞
D-Link DIR-645 getcfg.php 文件由于过滤不严格导致信息泄露漏洞. $SERVICE_COUNT = cut_count($_POST["SERVICES"] ...
- range() 和 np.arange()区别
range() 和 np.arange()区别 range(start,stop,step) 三个参数都必须是整数 np.arange()没有此类约束
- (转)合格linux运维人员必会的30道shell编程面试题及讲解
超深度讲解shell高级编程实战,截至目前shell编程课程国内培训机构最细的课程,不信请看学员表现的水平. 课程牛不牛,不是看老师.课表,而是看培养的的学生水平,目前全免费中伙伴们赶紧看啊. htt ...