華為算法題 go語言或者ptython

1

給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,并返回它們的數組下標。

你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。

你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

輸入:nums = [3,2,4], target = 6
輸出:[1,2]
示例 3:

輸入:nums = [3,3], target = 6
輸出:[0,1]

package mainimport "fmt"func twoSum(nums []int, target int) []int {numMap := make(map[int]int) // 前一個是鍵,后一個int是值,map是映射// 遍歷數組 nums,i 是當前元素的索引,num 是當前元素的值for i, num := range nums {complement := target - num// j:這是從 numMap 中獲取的與 complement 對應的值if j, ok := numMap[complement]; ok {// []int{j, i} 是一個整數切片的初始化.返回一個包含兩個整數的切片,第一個整數是 j,第二個整數是 ireturn []int{j, i}}numMap[num] = i}return nil
}func main() {nums1 := []int{2, 7, 11, 15}target1 := 9result1 := twoSum(nums1, target1)fmt.Println(result1)nums2 := []int{3, 2, 4}target2 := 6result2 := twoSum(nums2, target2)fmt.Println(result2)
}

2

給你兩個 非空 的鏈表,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式存儲的,并且每個節點只能存儲 一位 數字。
請你將兩個數相加,并以相同形式返回一個表示和的鏈表。
你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
在這里插入圖片描述

package mainimport "fmt"// 表示鏈表節點的數據結構
type ListNode struct {Val  intNext *ListNode
}// 接受兩個非空鏈表,表示兩個非負整數,返回它們的和的鏈表
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {// create 一個虛擬頭節點dummyHead := &ListNode{}// create 一個指針current := dummyHead// 進位標志carry := 0// 遍歷兩個鏈表,直到兩個鏈表都遍歷完并且沒有進位為止for l1 != nil || l2 != nil || carry > 0 {// 計算當前位的數字總和sum := carryif l1 != nil {sum += l1.Vall1 = l1.Next}if l2 != nil {sum += l2.Vall2 = l2.Next}// 更新進位  ,注意這里如果小于10carry就是0,否則為1carry = sum / 10// 創建新節點存儲當前位的數字current.Next = &ListNode{Val: sum % 10}// 將指針移動到下一個節點current = current.Next}// 返回結果鏈表的頭節點的下一個節點(跳過虛擬頭節點)return dummyHead.Next
}// 用于打印鏈表的值,方便查看結果
func printLinkedList(node *ListNode) {for node != nil {fmt.Print(node.Val)if node.Next != nil {fmt.Print("->")}node = node.Next}fmt.Println()
}func main() {// 實例1l1 := &ListNode{Val: 2, Next: &ListNode{Val: 4, Next: &ListNode{Val: 3}}}l2 := &ListNode{Val: 5, Next: &ListNode{Val: 6, Next: &ListNode{Val: 4}}}result := addTwoNumbers(l1, l2)printLinkedList(result)
}

3

給定一個字符串 s ,請你找出其中不含有重復字符的 最長子串 的長度。
示例 1:

輸入: s = “abcabcbb”
輸出: 3
解釋: 因為無重復字符的最長子串是 “abc”,所以其長度為 3。
示例 2:

輸入: s = “bbbbb”
輸出: 1
解釋: 因為無重復字符的最長子串是 “b”,所以其長度為 1。
示例 3:

輸入: s = “pwwkew”
輸出: 3
解釋: 因為無重復字符的最長子串是 “wke”,所以其長度為 3。
請注意,你的答案必須是 子串 的長度,“pwke” 是一個子序列,不是子串。

假設我們有一個字符串:s = "abcabcbb"

我們開始遍歷這個字符串,使用一個“盒子”來存儲不重復的字符。

  1. 我們從字符串的開頭開始,第一個字符是 ‘a’,我們放入盒子中,盒子內有:[a],目前盒子的長度為1。
  2. 接著是 ‘b’,我們放入盒子中,盒子內有:[a, b],目前盒子的長度為2。
  3. 然后是 ‘c’,我們放入盒子中,盒子內有:[a, b, c],目前盒子的長度為3。
  4. 然后又是 ‘a’,在這里我們發現盒子內已經有了 ‘a’,所以我們需要重新開始計算盒子。我們將 ‘a’ 上一次出現的位置后面的字符都去掉,得到新的盒子內容為 [b, c, a],目前盒子的長度為3。
  5. 然后是 ‘b’,我們放入盒子中,盒子內有:[b, c, a],目前盒子的長度為3。
  6. 接著是 ‘c’,我們發現 ‘c’ 已經在盒子中了,所以我們需要重新開始計算盒子。我們將 ‘c’ 上一次出現的位置后面的字符都去掉,得到新的盒子內容為 [a, b, c],目前盒子的長度為3。
  7. 最后是 ‘b’,我們放入盒子中,盒子內有:[a, b, c],目前盒子的長度為3。

我們遍歷完整個字符串后,最長的不含重復字符的子串就是 “abc”,它的長度為 3。

package mainimport "fmt"
// start 和 i 分別表示當前不含重復字符的子串的起始位置和結束位置。lastI 表示字符上一次出現的位置。func lengthOfLongestSubstring(s string) int {// 使用 map 存儲字符最后出現的位置lastOccurred := make(map[byte]int)start, maxLength := 0, 0// 遍歷字符串for i, ch := range []byte(s) {// 如果字符已經出現過,并且出現位置在當前子串中if lastI, ok := lastOccurred[ch]; ok && lastI >= start {start = lastI + 1 // 更新子串起始位置}// 更新字符最后出現的位置lastOccurred[ch] = i// 更新最大子串長度if i-start+1 > maxLength {maxLength = i - start + 1}}return maxLength
}func main() {s1 := "abcabcbb"fmt.Println(lengthOfLongestSubstring(s1))
}

4

給定兩個大小分別為 m 和 n 的正序(從小到大)數組 nums1 和 nums2。請你找出并返回這兩個正序數組的 中位數 。

算法的時間復雜度應該為 O(log (m+n)) 。
示例 1:

輸入:nums1 = [1,3], nums2 = [2]
輸出:2.00000
解釋:合并數組 = [1,2,3] ,中位數 2
示例 2:

輸入:nums1 = [1,2], nums2 = [3,4]
輸出:2.50000
解釋:合并數組 = [1,2,3,4] ,中位數 (2 + 3) / 2 = 2.5

# 雙斜杠 // 表示整數除法,它會將結果向下取整為最接近的整數
class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]  # 接受的第一個有序數組:type nums2: List[int]  # 接受的第二個有序數組:rtype: float           # 返回值為中位數的浮點數"""m = len(nums1)  # 第一個數組的長度n = len(nums2)  # 第二個數組的長度for num in nums2:nums1.append(num)  # 將 nums2 中的所有元素添加到 nums1 中nums1.sort()  # 將合并后的 nums1 數組進行排序i = len(nums1)  # 合并后數組的長度if i % 2 == 0:  # 如果數組長度為偶數a = nums1[i // 2]  # 取中間兩個數中的后一個數b = nums1[i // 2 - 1]  # 取中間兩個數中的前一個數k = (float(a) + b) / 2  # 計算中位數else:  # 如果數組長度為奇數k = nums1[(i) // 2]  # 取中間的那個數作為中位數return k  # 返回中位數

5

給你一個字符串 s,找到 s 中最長的回文子串。
如果字符串的反序與原始字符串相同,則該字符串稱為回文字符串。
示例 1:

輸入:s = “babad”
輸出:“bab”
解釋:“aba” 同樣是符合題意的答案。
示例 2:

輸入:s = “cbbd”
輸出:“bb”

class Solution:def longestPalindrome(self, s: str) -> str:n = len(s)  # 字符串長度if n < 2:  # 如果字符串長度小于2,直接返回字符串本身return s# 創建一個包含 n 行的列表,每行包含 n 個元素,每個元素都是 Falsedp = [[False] * n for _ in range(n)]  # 創建一個二維數組,用于存儲子串是否為回文串的狀態start, max_len = 0, 1  # 記錄最長回文子串的起始位置和長度,默認為第一個字符和長度為1# 初始化長度為1和2的回文子串for i in range(n):dp[i][i] = Trueif i < n - 1 and s[i] == s[i + 1]:dp[i][i + 1] = Truestart = imax_len = 2# 從長度為3開始遍歷,更新狀態數組dpfor length in range(3, n + 1):for i in range(n - length + 1):j = i + length - 1  # 子串的結束位置if s[i] == s[j] and dp[i + 1][j - 1]:  # 如果子串兩端字符相等且去掉兩端字符后仍為回文串dp[i][j] = Truestart = i  # 更新最長回文子串的起始位置max_len = length  # 更新最長回文子串的長度# start 是子串的起始索引。
# start + max_len 是子串的結束索引(不包括該索引對應的字符)。
# 因此,s[start:start + max_len] 表示從字符串 s 中提取子串,起始索引為 start,結束索引為 start + max_len - 1,
# 即提取了從 start 開始到 start + max_len - 1(包括起始索引,不包括結束索引)的子串。return s[start:start + max_len]  # 返回最長回文子串

6

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697492.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697492.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697492.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何進行高性能架構的設計

一、前端優化 減少請求次數頁面靜態化邊緣計算 增加緩存控制&#xff1a;請求頭 減少圖像請求次數&#xff1a;多張圖片變成 一張。 減少腳本的請求次數&#xff1a;css和js壓縮&#xff0c;將多個文件壓縮成一個文件。 二、頁面靜態化 三、邊緣計算 后端優化 從三個方面進…

adb-monkey命令

目錄 adb shell monkey -p/-v 包名 次數 1、指定一個包 2、指定多個包 3、不指定包 Event percentages&#xff08;事件百分比&#xff09; 常見參數 --throttle 延遲時間 單位毫秒 --pct-touch 設定觸屏事件生成的百分比 --pct-motion 設定滑動事件生成…

面試前端性能優化八股文十問十答第二期

面試前端性能優化八股文十問十答第二期 作者&#xff1a;程序員小白條&#xff0c;個人博客 相信看了本文后&#xff0c;對你的面試是有一定幫助的&#xff01;關注專欄后就能收到持續更新&#xff01; ?點贊?收藏?不迷路&#xff01;? 1&#xff09;如何優化動畫&#x…

c語言中的大小寫字母轉換怎么轉?

在C語言中&#xff0c;大小寫字母轉換是基于ASCII碼表的特性實現的。ASCII碼中&#xff0c;小寫字母從’a’到’z’的ASCII碼值是連續的&#xff08;97到122&#xff09;&#xff0c;而大寫字母從’A’到’Z’的ASCII碼值也是連續的&#xff08;65到90&#xff09;。它們之間有…

Redis高性能原理

redis大家都知道擁有很高的性能&#xff0c;每秒可以支持上萬個請求&#xff0c;這里探討下它高性能的原理。單線程架構和io多路復用技術。 一&#xff0c;單線程架構 單線程架構指的是命令執行核心線程是單線程的&#xff0c;數據持久化、同步、異步刪除是其他線程在跑的。re…

獲取視頻第一幀,以及后續上傳

// 獲取視頻基本信息 const getVideoBasicInfo (videoSrc) > {return new Promise((resolve, reject) > {const video document.createElement("video");video.src videoSrc;// 視頻一定要添加預加載video.preload "auto";// 視頻一定要同源或者…

什么是系統工程(字幕)35

0 00:00:01,190 --> 00:00:02,840 下面的內容 1 00:00:04,850 --> 00:00:06,520 接下來呢就是 2 00:00:08,180 --> 00:00:09,830 16.6.1 3 00:00:11,070 --> 00:00:13,440 項流熱平衡分析 4 00:00:15,350 --> 00:00:16,730 這一節 5 00:00:18,860 --> 0…

億道丨三防平板丨加固平板丨三防加固平板丨改善資產管理

庫存資產管理中最重要的部分之一是準確性&#xff1b;過時的庫存管理技術會增加運輸過程中人為錯誤、物品丟失或紙張損壞的風險。如今隨著三防平板電腦的廣泛使用&#xff0c;庫存管理也迎來了好幫手&#xff0c;通過使用三防平板電腦能夠確保庫存管理、數據存儲和記錄保存的準…

React18源碼: React調度中的3種優先級類型和Lane的位運算

優先級類型 React內部對于優先級的管理&#xff0c;貫穿運作流程的4個階段&#xff08;從輸入到輸出&#xff09;&#xff0c;根據其功能的不同&#xff0c;可以分為3種類型&#xff1a; 1 &#xff09;fiber優先級(LanePriority) 位于 react-reconciler包&#xff0c;也就是L…

掌握 Android 中的 RecyclerView 優化

掌握 Android 中的 RecyclerView 優化 一、RecyclerView Pool以及何時使用它二、onCreateViewHolder 和 onBindViewHolder三、優化 RecyclerView 的不同方法四、視圖無效與請求布局五、ViewHolder模式六、默認的廢料和臟視圖類型七、結論 RecyclerView 是 Android 中一個功能強…

【操作系統】磁盤存儲空間的管理

實驗5 磁盤存儲空間的管理 一、實驗目的 磁盤是用戶存放程序和數據的存儲設備&#xff0c;磁盤管理的主要目的是充分有效地利用磁盤空間。本實驗模擬實現磁盤空間的分配與回收&#xff0c;使學生對磁盤空間的管理有一個較深入的理解。 二、實驗內容 實驗任務&#xff1a;用位…

FreeSWITCH debian11/12 apt安裝

官方給的easy way安裝方式如下&#xff1a; # 換成自己的token TOKENpat_ZrPXJQ8JNWsVQW2ubhnUwi7gapt-get update && apt-get install -y gnupg2 wget lsb-releasewget --http-usersignalwire --http-password$TOKEN -O /usr/share/keyrings/signalwire-freeswitch-…

#LLM入門|Prompt#1.2_提示原則_Guidelines

提示原則 一、編寫清晰、具體的指令 使用分隔符清晰地表示輸入的不同部分&#xff1a; 在Prompt中使用分隔符&#xff0c;如、“”"、< >、 、:等&#xff0c;將不同的文本部分區分開來&#xff0c;避免混淆和意外的結果。分隔符能夠防止提示詞注入&#xff0c;提…

petalinux_zynq7 驅動DAC以及ADC模塊之四:python實現http_api

前文&#xff1a; petalinux_zynq7 C語言驅動DAC以及ADC模塊之一&#xff1a;建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C語言驅動DAC以及ADC模塊之二&#xff1a;petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…

Java觀察者模式:實現高效的事件驅動編程

Java中的裝飾者模式&#xff1a;靈活地為對象添加功能 一、引言 在軟件設計中&#xff0c;我們經常需要為對象動態地添加功能或行為。裝飾者模式&#xff08;Decorator Pattern&#xff09;是一種結構型設計模式&#xff0c;它允許我們在運行時將功能動態地添加到對象上&…

串的相關題目

于是他錯誤的點名開始了 我發現有關hash得題目有些是可以通過map數組來完成的&#xff1a;何為map數組&#xff0c;我們先思考一下最簡單的桶的排序&#xff0c;桶排序是將我們需要數字最為下標輸進數組中&#xff0c;而數組是存放的數字是這個數字出現的次數&#xff0c;但是由…

Matlab論文插圖繪制模板第137期—極坐標分組氣泡圖

在之前的文章中&#xff0c;分享了Matlab極坐標氣泡圖的繪制模板&#xff1a; 進一步&#xff0c;再來分享一下極坐標分組氣泡圖。 先來看一下成品效果&#xff1a; ? 特別提示&#xff1a;本期內容『數據代碼』已上傳資源群中&#xff0c;加群的朋友請自行下載。有需要的朋…

解決SSH遠程登錄開飯板出現密碼錯誤問題

輸入“adduser Zhanggong回車”&#xff0c;使用adduser命令創建開發板用戶名為Zhanggong 輸入密碼“123456” 輸入密碼“123456”

openGauss學習筆記-226 openGauss性能調優-系統調優-配置LLVM-LLVM適用場景與限制

文章目錄 openGauss學習筆記-226 openGauss性能調優-系統調優-配置LLVM-LLVM適用場景與限制226.1 適用場景226.2 非適用場景 openGauss學習筆記-226 openGauss性能調優-系統調優-配置LLVM-LLVM適用場景與限制 226.1 適用場景 支持LLVM的表達式 查詢語句中存在以下的表達式支持…

PostgreSQL數據庫備份和恢復

一、數據庫備份 /usr/lib/postgresql/16/bin/pg_dump -h localhost -p 5432 -U odoo -F c -b -v -f backup.sql laonian 二、數據庫恢復 1 現在目標pgsql數據庫中創建空數據庫老年 create database laonian owner odoo; 2 執行恢復命令&#xff08;windows系統下&#xff…