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 ...
随机推荐
- KEY
typedef struct st_key { uint key_length; /* Tot length of key */ ulong flags; /* dupp key and pack f ...
- 使用Avd 调试慢的解决方案
AVD 太慢了,不仅启动,而且运行慢.以致于要用手机去调.你觉得这样方便吗? 如果没有一个简单快速的开发调试环境,把时间都浪费在启动,调试及等待上,那是对生命的浪费. 必要条件: ...
- 为什么sudo执行命令还是会提示权限不够
安装openstack 的过程中需要执行以下命令,虽然使用了sudo,但是依然提示权限不够 $ sudo echo "deb http://ubuntu-cloud.archive.cano ...
- ubuntu->桌面版-常用设置
1.目前使用unity桌面 ,使用Gnome,未来将会采用 Qt/QML 语言写的桌面 2.汉化 系统: 在 设置(setting)->语言支持(language support)->选择 ...
- 991 AlvinZH的奇幻猜想----整数乘积plus(背包DP大作战P)
914 AlvinZH的奇幻猜想----整数乘积puls 思路 难题.动态规划. 将数字串按字符串输入,处理起来更方便些. dp[i][j]:表示str[0~i]中插入j个乘号时的乘积最大值.状态转移 ...
- JQ的ready()方法与window.onload()的区别与联系
JQ的ready()与window.onload()方法都是在文档加载完毕之后才会被触发的方法,但它们之间的区别也是很明显的. 1.区别与联系: $(document).ready() windo ...
- vim编辑器基本操作及文件权限,sudo命令等介绍
一:vim 操作命令,在命令模式下操作 pageup 往上翻页 pagedown 往下翻页 H 移动到屏幕首行 gg 移动光标到文档的首行 前面加数字n表示移动到n行内容 G 移动到文档最后一行/查找 ...
- json操作相关记录
json是javascript衍生的数据表示法,现在许多数据的处理都使用json. 平时用到的与json结构相似的有很多,如mongodb数据库,python的字典等.核心思想就是键值对. json的 ...
- 解决VS在高DPI下设计出的Winform程序界面变形问题
在目前高分屏流行的情况下,windows缩放与布局仍然设置为100%就显得太小(特别是笔记本),通常会调整为125%或150%, VS在缩放与布局设置为非100%的时候,就会自动启动DPI感知模式,以 ...
- Android微信支付流程及返回码-1之坑
http://www.51testing.com/html/36/n-3724336.html 之前做微信支付的时候,直接是以库形式引入项目的,虽然一直觉得微信支付的开发文档不太理想,但是印象中也没有 ...