lincode 題目記錄5

来源:http://www.cnblogs.com/onegarden/archive/2017/06/24/7074420.html
-Advertisement-
Play Games

Course Schedule 選課方案問題,題目說的很清楚了就是bfs或者dfs,然後加個字典優化,弄了好久沒弄出來··網上查的演算法··提交的是bfs的演算法,dfs的演算法給的用例好像是遞歸太深了· python編譯器直接崩了··本地調試也是直接崩了·· bfs的核心是用一個數組記錄每個數字的深度· ...


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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近的練手項目使用的是 Maven 在管理項目,在使用 Maven 管理項目時,三層的開發時分模塊開發的,parent-dao-service-web,所有的spring+struts + Hibernate的依賴都是加在 parent 上,dao-service-web都是作為子模塊,在模塊之間的... ...
  • 進程: 1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import multiprocessing,threading,time 5 6 def run(name): 7 t=threading.Thread(ta ...
  • 一.緣起 剛剛工作兩年,技術還很挫。但是在學習Java的過程中,看到過不少好書,寫下這篇博客不僅是為了推薦,過去學習經歷的一個總結。如果時間能夠重來的話,我將按照以下書單來學習Java。 二.Java基礎篇 1. Head First Java Head First系列又名大頭書系列,這個系列的書都 ...
  • 滑鼠事件監聽機制的三個方面: 1.事件源對象: 事件源對象就是能夠產生動作的對象。在Java語言中所有的容器組件和元素組件都是事件監聽中的事件源對象。Java中根據事件的動作來區分不同的事件源對象,動作發生在哪個組件上,那麼該組件就是事件源對象 2.事件監聽方法: addMouseListener( ...
  • 我們在flask的學習中,會難免遇到多對多表的查詢,今天我也遇到了這個問題。那麼我想了好久。也沒有想到一個解決的辦法,試了幾種方法,可能是思路的限制我放棄了,後來,我就在網上百度,可是發現百度出來的結果和自己想要的還有一定的差距,那麼我根據百度上得來的思路,那麼我也對我的數據結構進行了探索, 下麵來 ...
  • java中的map遍歷有多種方法,從最早的Iterator,到java5支持的foreach,再到java8 Lambda,讓我們一起來看下具體的用法以及各自的優缺點 先初始化一個map keySet values 如果只需要map的key或者value,用map的keySet或values方法無疑 ...
  • 開發環境信息 1、基本環境信息如下: [root@localhost lib] cat /etc/os release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PR ...
  • 題目描述 博艾市將要舉行一場汽車拉力比賽。 賽場凹凸不平,所以被描述為M*N的網格來表示海拔高度(1≤ M,N ≤500),每個單元格的海拔範圍在0到10^9之間。 其中一些單元格被定義為路標。組織者希望給整個路線指定一個難度繫數D,這樣參賽選手從任一路標到達別的路標所經過的路徑上相鄰單元格的海拔高 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...