当前位置: 首页 > news >正文

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 main

import "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 here
	var count = make(map[int32]int32)
	for _, value := range ar {
		count[value]++
	}

	var result int32 = 0
	for _, 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 main

import (
	"fmt"
	"strings"
)

func main() {
	var steps int32 = 8
	var path = "UDDDUDUU"
	valleys := countingValleys(steps, path)
	fmt.Println(valleys)
}

// hacker Rank不要在里面写中文注释!!!
func countingValleys(steps int32, path string) int32 {
	// Write your code here
	var sealevel = 0
	var vally int32 = 0

	if 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 effect
			sealevel = sealevel + 1
		} else {
			//sealevel -- Same effect
			sealevel = 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 main

import "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 here
	var jumpByOne int32 = 0
	var jumpByTwo int32 = 0

	for i := 0; i < len(c); i++ {
		if c[i] == 0 {
			jumpByOne++
		}
	}

	for i := 0; i < len(c); i += 2 {
		if c[i] != 0 {
			i -= 1
			if c[i] == 0 {
				jumpByTwo++
			}
		} else {
			if i+2 == len(c) {
				i -= 1
			}
			jumpByTwo++
		}

	}

	//jumpByOne jumpByTwo is total length,so we just need steps of jump
	return 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 main

import (
	"fmt"
)

func main() {
	var str = "aba"
	var n int64 = 10

	repeated := repeatedString(str, n)
	fmt.Println(repeated)
}

func repeatedString(s string, n int64) int64 {
	// Write your code here
	var copyMul = n / int64(len(s))
	var copyMod = n % int64(len(s))

	var count int64 = 0
	var modcount int64 = 0
	for 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、最后,各位小伙伴,麻烦给老哥一个点赞、关注、收藏三连好吗,你的支持是老哥更新最大的动力,谢谢!

相关文章:

  • 【Linux篇】第十三篇——信号(概念+信号的产生+阻塞信号+捕捉信号)
  • Android Jetpack系列之MVI架构
  • 十分钟之内实现stack和queue?容器适配器是什么?priority_queue不是队列?
  • 基于Keras实战项目-猫狗熊猫分类大战
  • 基于 Echarts + Python Flask 动态实时大屏( 附代码)
  • 并查集原理及模拟实现
  • 【Redis】大key的处理
  • T-3.2-把Redis当作消息队列合不合适
  • 简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW个人网站制作成品 web网页制作与实现
  • java基于springboot+element的实现医院预约挂号系统 nodejs
  • 在vue项目中使用canvas实现甘特图
  • 【C++】之模板进阶
  • 100天精通Python(数据分析篇)——第58天:Pandas读写数据库(read_sql、to_sql)
  • Bean的生命周期
  • 哈希桶(详解创建)
  • android 一些 utils
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Bytom交易说明(账户管理模式)
  • canvas 绘制双线技巧
  • CSS 三角实现
  • flask接收请求并推入栈
  • java8-模拟hadoop
  • java小心机(3)| 浅析finalize()
  • Kibana配置logstash,报表一体化
  • log4j2输出到kafka
  • Next.js之基础概念(二)
  • Redux 中间件分析
  • REST架构的思考
  • Terraform入门 - 3. 变更基础设施
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 前端js -- this指向总结。
  • 我看到的前端
  • 怎么把视频里的音乐提取出来
  • 你对linux中grep命令知道多少?
  • 《码出高效》学习笔记与书中错误记录
  • 阿里云移动端播放器高级功能介绍
  • 函数计算新功能-----支持C#函数
  • #include
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (4) PIVOT 和 UPIVOT 的使用
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (NSDate) 时间 (time )比较
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (十)T检验-第一部分
  • (一)认识微服务
  • (已解决)什么是vue导航守卫
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)ORM
  • .CSS-hover 的解释
  • .Net 4.0并行库实用性演练
  • .NET gRPC 和RESTful简单对比
  • .NET Standard 支持的 .NET Framework 和 .NET Core