go編碼

go編碼練習(xí)

func replaceSpace(s string) string{
    return strings.Replace(s," ","%200",-1)
}
func maxArea(height []int) int {
    left, right := 0, len(height)-1
    ans := 0
    for left < right {
        if height[left] < height[right] {
            ans = max(ans, height[left]*(right-left))
            left++
        } else {
            ans = max(ans, height[right]*(right-left))
            right--
        }
    }
    return ans
}
func hasCycle(head *ListNode) bool {
    slow, fast := head, head
    for fast != nil && fast.Next != nil {
        slow = slow.Next
        fast = fast.Next.Next
        if slow == fast {
            return true
        }
    }
    return false
}

func main() {
    var head *ListNode
    // create a cycle listNode
    // head -> 2 -> 3 -> 4 -> 5 -> head
    head = &ListNode{Val: 2}
    node2 := &ListNode{Val: 3}
    node3 := &ListNode{Val: 4}
    node4 := &ListNode{Val: 5}
    head.Next = node2
    node2.Next = node3
    node3.Next = node4
    node4.Next = node2
    fmt.Println(hasCycle(head))
}
func canJamp(arr []int) bool {
    mx := 0
    for i := 0; i < len(arr); i++ {
        if i > mx {
            return false
        }
        mx = max(mx, i+arr[i])
    }
    return true
}
// mergeTwoLists 函數(shù)用于將兩個有序鏈表合并為一個新的有序鏈表。
// 參數(shù) l1 和 l2 分別為兩個有序鏈表的頭節(jié)點。
// 返回值為合并后新鏈表的頭節(jié)點。
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
    // 創(chuàng)建一個虛擬頭節(jié)點,用于簡化邊界條件的處理,最終返回 dummy.Next 作為合并后鏈表的頭節(jié)點
    dummy := &ListNode{}
    // 如果鏈表 l1 為空,直接返回鏈表 l2
    if l1 == nil {
        return l2
    }
    // 如果鏈表 l2 為空,直接返回鏈表 l1
    if l2 == nil {
        return l1
    }
    // cur 指針用于遍歷并構(gòu)建合并后的鏈表,初始指向虛擬頭節(jié)點
    cur := dummy
    // 當 l1 和 l2 都不為空時,比較它們當前節(jié)點的值
    for l1 != nil && l2 != nil {
        if l1.Val < l2.Val {
            // 如果 l1 當前節(jié)點的值小于 l2 當前節(jié)點的值,將 l1 當前節(jié)點接入合并后的鏈表
            cur.Next = l1
            // l1 指針后移一位
            l1 = l1.Next
        } else {
            // 否則,將 l2 當前節(jié)點接入合并后的鏈表
            cur.Next = l2
            // l2 指針后移一位
            l2 = l2.Next
        }
        // cur 指針后移一位,準備接入下一個節(jié)點
        cur = cur.Next
    }
    // 如果 l1 還有剩余節(jié)點,將 l1 剩余部分直接接入合并后的鏈表
    if l1 != nil {
        cur.Next = l1
    } else {
        // 否則,將 l2 剩余部分直接接入合并后的鏈表
        cur.Next = l2
    }
    // 返回虛擬頭節(jié)點的下一個節(jié)點,即合并后鏈表的頭節(jié)點
    return dummy.Next
}
func longestPalindrome(s string) string {
    n := len(s)
    //  dp[left][right]為true表示"從left到right的子串為回文串",false表示不是回文串
    dp := make([][]bool, n)
    for i := range dp {
        dp[i] = make([]bool, n)
    }
    start, end := 0, 0
    for i := 0; i < len(s); i++ {
        // 初始化二維數(shù)組,單個字符為回文串,所以定義dp[i][i] = true
        dp[i][i] = true
    }
    for right := 1; right < len(s); right++ {
        for left := 0; left < right; left++ {
            // dp[left][right] =
            //(s[right]==s[left] && (right-left==1 || dp[left+1][right-1])) ? true : false
            // s[right]==s[left] && (right-left==1)       情況一:bb 這種
            // s[right]==s[left] && dp[left+1][right-1]   情況二:bab
            // 如果我們已經(jīng)知道 “bab” 是回文,那么很明顯,“ababa” 一定是回文,因為它的左首字母和右尾字母是相同的。
            if s[right] == s[left] && (right-left == 1 || dp[left+1][right-1]) {
                dp[left][right] = true
                if right-left > end-start {
                    start = left
                    end = right
                }
            } else {
                dp[left][right] = false
            }
        }
    }
    return s[start : end-start+1]
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容