HackerRank 算法刷题笔记(一),基于Go语言
?? Hello,各位小伙伴,大家好呀,放國慶節假了,老哥在這里首先祝福祖國,繁榮昌盛,然后祝各位小伙伴們假期玩的愉快,吃的開心;然后的話,在家也不能忘記學習哦,每天進步一點點,老哥玩了一天,回到家,然后最近在刷算法題,那么就淺淺記錄一下吧
?? 話不多說,讓我們開始吧
1、刷題網站,https://www.hackerrank.com/
2、然后這個網站的題目是全英文的,有英文閱讀困難的,可以用下某度翻譯
3、我們來看到這個題目
There is one pair of color 1 and one of color 2. There are three odd socks left, one of each color. The number of pairs is 2.
老哥來解釋一下,一個1加上另外一個1是一對襪子,一個2加上另外一個2是一對襪子
剩下3個不同顏色的襪子
解題思路: 我們需要得到每個顏色襪子的總數,然后把每個襪子的顏色 /2 ,會得到每個襪子的對數,然后相加,得到所有每個襪子成對的數量,最后返回總的襪子總數
package mainimport "fmt"func main() {var arr = []int32{1, 2, 1, 2, 1, 3, 2}sockPair := sockMerchant(7, arr)fmt.Println(sockPair) }func sockMerchant(n int32, ar []int32) int32 {// Write your code herevar count = make(map[int32]int32)for _, value := range ar {count[value]++}var result int32 = 0for _, match := range count {result += match / 2}return result }3A、第二題
The hiker first enters a valley 2 units deep. Then they climb out and up onto a mountain 2 units high. Finally, the hiker returns to sea level and ends the hike.
老哥一開始看到這個也是有點懵,不知道它想表達什么,后面大概理解了,就是一個徒步者,從地平面往山谷走兩步下去,記錄為2個D(down的簡稱),然后從山谷走上地平面,記錄兩個U
(up的簡稱)
解題思路:從地平面下去,經過山谷,爬上地平面,記1次
package mainimport ("fmt""strings" )func main() {var steps int32 = 8var path = "UDDDUDUU"valleys := countingValleys(steps, path)fmt.Println(valleys) }// hacker Rank不要在里面寫中文注釋!!! func countingValleys(steps int32, path string) int32 {// Write your code herevar sealevel = 0var vally int32 = 0if int(steps) != len(path) {return 0}paths := strings.Split(path, "")for i := 0; i < int(steps); i++ {if strings.EqualFold(paths[i], "U") {//sealevel ++ Same effectsealevel = sealevel + 1} else {//sealevel -- Same effectsealevel = sealevel - 1}if paths[i] == "U" && sealevel == 0 {vally = vally + 1}}return vally}5、第三題
There is a new mobile game that starts with consecutively numbered clouds. Some of the clouds are thunderheads and others are cumulus. The player can jump on any cumulus cloud having a number that is equal to the number of the current cloud plus 1 or 2 .
這個題目,老哥一開始沒看懂,后面大概理解了,就是每一次跳,如果可以跳一步,就跳一步,如果可以跳兩步,就跳兩步,不要踩到雷區就行
解題思路: 我們先拿到走一步的總長,和走兩步的總長,減去1,就可以得到跳的步數,然后比較兩種方案,誰走的步數少,返回結果
package mainimport "fmt"func main() {var arr = []int32{0, 0, 0, 1, 0, 0}min := jumpingOnClouds(arr)fmt.Println(min) }func jumpingOnClouds(c []int32) int32 {// Write your code herevar jumpByOne int32 = 0var jumpByTwo int32 = 0for i := 0; i < len(c); i++ {if c[i] == 0 {jumpByOne++}}for i := 0; i < len(c); i += 2 {if c[i] != 0 {i -= 1if c[i] == 0 {jumpByTwo++}} else {if i+2 == len(c) {i -= 1}jumpByTwo++}}//jumpByOne jumpByTwo is total length,so we just need steps of jumpreturn min(jumpByOne-1, jumpByTwo-1) }func min(a, b int32) int32 {if a > b {return b}return a }6、第四題
There is a string s , of lowercase English letters that is repeated infinitely many times. Given an integer n, , find and print the number of letter a's in the first n letters of the infinite string.
這個題比較簡單,把字符串第一個字符出現的次數找出來,10代表這個數,要重復拼接的長度為10,也就是 abaabaabaa
解題思路:利用求余和取模的思想,把一個字符串出現的首個字符的次數求出來,然后乘以復制的,再加上尾部的字符,返回總個數即可
package mainimport ("fmt" )func main() {var str = "aba"var n int64 = 10repeated := repeatedString(str, n)fmt.Println(repeated) }func repeatedString(s string, n int64) int64 {// Write your code herevar copyMul = n / int64(len(s))var copyMod = n % int64(len(s))var count int64 = 0var modcount int64 = 0for i := 0; i < len(s); i++ {if string(s[i]) == "a" {count++}}for i := 0; i < int(copyMod); i++ {if string(s[i]) == "a" {modcount++}}return count*copyMul + modcount }7、最后,各位小伙伴,麻煩給老哥一個點贊、關注、收藏三連好嗎,你的支持是老哥更新最大的動力,謝謝!
總結
以上是生活随笔為你收集整理的HackerRank 算法刷题笔记(一),基于Go语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简明python教程 答案1
- 下一篇: Go语言基础之4--流程控制