【Go语言刷题篇】Go从0到入门5:Map综合复习、条件语句、循环语句练习

简介: 本期是学习Golang:Map综合复习、条件语句、循环语句练习,有不懂的地方可以评论进行讨论!

前言


本期是学习Golang:Map综合复习、条件语句、循环语句练习,有不懂的地方可以评论进行讨论!

本系列文章采用牛客的核心代码模式进行案例代码提供,帮助大家从0到入门的学习过程中进行配套的刷题~

推荐给大家一款刷题、面试的神器,我也是用这一款神器进行学习的!~链接如下:刷题神器跳转链接

该神器不仅网页界面十分美观,而且操作起来极易上手入门!非常适合新手进行系统性的学习!

小白新手可以通过该神器进行日常的刷题、看大厂面经、学习计算机基础知识、与大牛面对面沟通~ 刷题的图片已经放在下面了~

Q1:Map-字符串构成


问题描述:给定两个字符串des 和src ,判断 des能不能由 src 里面的字符构成,//如果可以,返回 true ;否则返回 false,src中的每个字符只能在 des 中使用一次。


相关知识:

1、for range遍历字符串。

2、cnt[ch-‘a’]隐式转换byte转为int类型。

3、数组的索引可以充当一个map的key,来表示唯一。


示例输入:“ab”,“aab”

示例输出:true


案例代码:

思路:放一个 map 用来保存有哪些元素可以用 用一次-1即可。如果没有直接返回失败。

//import "fmt"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param des string字符串 
 * @param src string字符串 
 * @return bool布尔型
*/
func canConstruct(des string, src string) bool {
  // write code here
  have := make(map[byte]int)
  s := []byte(src)
  for _, i := range s {
    have[i]++
  }
  p := []byte(des)
  for _, i := range p {
    if have[i] == 0 {
      return false
    }
    have[i]--
  }
  return true
}

Q2:Map-不重复的数


问题描述:给定一个数组,找出数组中所有不重复的数字,并按照从小到大的顺序进行输出。


相关知识:

1、map用make方式进行初始化

2、切片可以用[]int{}的方式进行初始化

3、for range遍历切片

4、_,ok :=map[key]的方式判断m中的key是否存在

5、切片用append方式进行追加


示例输入:[1,1,2,2,3,3,4,4,5,5]

示例输出:[]


示例输入:[3,3,2,2,5,5,1,2,2]

示例输出:[1]


案例代码:

import "sort"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 最后要有一个 排序的过程 使用sort提供的排序即可
 * @param s int整型一维数组 
 * @return int整型一维数组
*/
func getNoRepeat(s []int) []int {
  // write code here
  var ans []int
  have := make(map[int]int)
  for _, i := range s {
    if _, ok := have[i]; ok == false {
      have[i] = 1
    }else{
      have[i]++
    }
  }
  for i, j := range have{
    if j == 1{
      ans = append(ans, i)
    }
  }
    sort.Ints(ans) 
  return ans
}

Q3:条件语句-年龄判定


问题描述:已知年龄的分段如下, 婴儿(出生0-1岁)、幼儿(1-4岁)包含1岁、儿童(5-11)包含5岁、少年(12-18)包含12岁、青年(19-35)包含19岁、中年(36-59)包含36岁、老年(60以上)包含60岁 ,输入一个人的年龄,返回相应的年龄段。


相关知识:

1、if 后面可以接任意数量的 else if 语句。condition 的求值由上到下依次进行,直到某个 if 或者 else if 中的 condition 为 true 时,执行相应的代码块。如果没有一个 conditon 为 true,则执行 else 中的代码块。


示例输入:35

示例输出:“青年”

案例代码:

//import "fmt"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @param age int整型 年龄
 * @return string字符串
*/
func getAge( age int ) string {
  // write code here
  var ans string
  switch {
  case age <1 && age >= 0:
  ans = "婴儿"
  case age >=1 && age <= 4:
  ans = "幼儿"
  case age >= 5 && age <= 11:
  ans = "儿童"
  case age >= 12 && age <= 18:
  ans = "少年"
  case age >= 19 && age <= 35:
  ans = "青年"
  case age >=36 && age <=59:
  ans = "中年"
  case age >= 60:
  ans = "老年"
  }
  return  ans
}

Q4:条件语句-成绩判定

问题描述:根据成绩分数输出成绩等级,判定规则如下 分数低于60 算不及格,60-80 含60 为中等, 80-90含80 为良好,90分以上含90 为优秀。


相关知识:

1、switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。 Golang switch 分支表达式可以是任意类型,不限于常量。可省略 break,默认自动终止。

switch var1 {

case val1:

case val2:

default:

}


示例输入:59

示例输出:“不及格”


案例代码:

func judgeScore(score int) string {
    // write code here
    var grade string
    switch {
    case score < 60:
        grade = "不及格"
    case score >= 60 && score < 80:
        grade = "中等"
    case score >= 80 && score < 90:
        grade = "良好"
    case score >= 90:
        grade = "优秀"
    }
    return grade
}

Q5:循环语句-乘法口诀表


问题描述:打印9*9乘法口诀表。


相关知识:

1、golang中 for 循环中嵌套一个或多个 for 循环,代码格式如下:

for [condition | ( init; condition; increment ) | Range]

{

for [condition | ( init; condition; increment ) | Range]

{

statement(s)

}

statement(s)

}

init: 一般为赋值表达式,给控制变量赋初值;

condition: 关系表达式或逻辑表达式,循环控制条件;

increment: 一般为赋值表达式,给控制变量增量或减量。

statement:循环语句

2、goalng中,fmt.printf 格式化打印 %d表示数字,-3d 表示左对齐,占 3 位 \n表示下一行。


示例输入:

示例输出:

1*1=1
1*2=2  2*2=4
1*3=3  2*3=6  3*3=9
1*4=4  2*4=8  3*4=12 4*4=16
1*5=5  2*5=10 3*5=15 4*5=20 5*5=25
1*6=6  2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7  2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8  2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9  2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81


案例代码:

import "fmt"
func main() {
  fmt.Println("1*1=1")
  for i := 2; i <= 9; i++ {
  for j := 1; j <= i-1; j++ {
    str := fmt.Sprintf("%d*%d=%-3d", j, i,j*i)
    fmt.Printf("%s", str)
  }
  str := fmt.Sprintf("%d*%d=%d", i, i, i*i)
  fmt.Printf("%s\n", str)
  }
}

Q6:循环语句-坐标转换


问题描述:已知一个mn二维数组,二维数组中的元素的索引(x,y)可以表示为一个二维坐标,现将这个二维坐标转换为一维坐标,一维坐标=xn+y。返回这个一维数组。


相关知识:

1、数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1

for i := 0; i < len(a); i++ {

}

for index, v := range a {

}

2、长度是数组类型的一部分,因此,var a[5] int和var a[10]int是不同的类型。

3、数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能变。


示例输入:[[1,2,3],[4,5,6],[7,8,9]]

示例输出:[1,2,3,4,5,6,7,8,9]


案例代码:

//import "fmt"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @param array int整型二维数组 
 * @return int整型一维数组
*/
func transform(array [][]int) []int {
  // write code here
  m := len(array)
  n := len(array[0])
  var arr []int = make([]int, m*n)
  i := 0
  for a := 0; a < m; a++ {
    for b := 0; b < n; b++ {
      arr[i] = array[a][b]
      i++
    }
  }
  return arr
}

后文:刷题神器


点击链接进行跳转注册,开始你的保姆级刷题之路吧!刷题打怪码神之路


另外这里不仅仅可以刷题,你想要的这里都会有,十分适合小白和初学者入门学习~

1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单

2、数据结构篇(300题):都是非常经典的链表、树、堆、栈、队列、动态规划等

3、语言篇(500题):C/C++、java、python入门算法练习

4、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题

5、大厂笔试真题:字节跳动、美团、百度、腾讯…掌握经验不在惧怕面试!

相关文章
|
1月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
111 1
|
1月前
|
Cloud Native 安全 Java
Go语言深度解析:从入门到精通的完整指南
🌟蒋星熠Jaxonic,Go语言探索者。深耕云计算、微服务与并发编程,以代码为笔,在二进制星河中书写极客诗篇。分享Go核心原理、性能优化与实战架构,助力开发者掌握云原生时代利器。#Go语言 #并发编程 #性能优化
320 43
Go语言深度解析:从入门到精通的完整指南
|
6月前
|
人工智能 安全 算法
Go入门实战:并发模式的使用
本文详细探讨了Go语言的并发模式,包括Goroutine、Channel、Mutex和WaitGroup等核心概念。通过具体代码实例与详细解释,介绍了这些模式的原理及应用。同时分析了未来发展趋势与挑战,如更高效的并发控制、更好的并发安全及性能优化。Go语言凭借其优秀的并发性能,在现代编程中备受青睐。
192 33
|
1月前
|
存储 Java Go
【Golang】(3)条件判断与循环?切片和数组的关系?映射表与Map?三组关系傻傻分不清?本文带你了解基本的复杂类型与执行判断语句
在Go中,条件控制语句总共有三种if、switch、select。循环只有for,不过for可以充当while使用。如果想要了解这些知识点,初学者进入文章中来感受吧!
91 1
|
2月前
|
Cloud Native 安全 Java
Go语言深度解析:从入门到精通的完整指南
🌟 蒋星熠Jaxonic,执着的星际旅人,用Go语言编写代码诗篇。🚀 Go语言以简洁、高效、并发为核心,助力云计算与微服务革新。📚 本文详解Go语法、并发模型、性能优化与实战案例,助你掌握现代编程精髓。🌌 从goroutine到channel,从内存优化到高并发架构,全面解析Go的强大力量。🔧 实战构建高性能Web服务,展现Go在云原生时代的无限可能。✨ 附技术对比、最佳实践与生态全景,带你踏上Go语言的星辰征途。#Go语言 #并发编程 #云原生 #性能优化
|
5月前
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
290 121
|
4月前
|
存储 人工智能 安全
深入理解 go sync.Map - 基本原理
本文介绍了 Go 语言中 `map` 在并发使用时的常见问题及其解决方案,重点对比了 `sync.Mutex`、`sync.RWMutex` 和 `sync.Map` 的性能差异及适用场景。文章指出,普通 `map` 不支持并发读写,容易引发错误;而 `sync.Map` 通过原子操作和优化设计,在某些场景下能显著提升性能。同时详细讲解了 `sync.Map` 的基本用法及其适合的应用环境,如读多写少或不同 goroutine 操作不同键的场景。
180 1
|
6月前
|
存储 安全 Go
Map的遍历与判断键是否存在-《Go语言实战指南》
本文介绍了 Go 语言中对 `map` 的常见操作,包括遍历所有项和判断键是否存在。通过 `for range` 可以遍历 `map` 的键值对、仅键或仅值(需忽略键)。注意,`map` 遍历顺序是随机的。判断键是否存在时,使用双赋值语法 `value, ok := map[key]`,其中 `ok` 表示键是否存在。直接访问不存在的键会返回类型的零值,可能导致逻辑错误。掌握这些机制可更安全高效地处理键值对数据。
|
7月前
|
存储 算法 数据可视化
【二叉树遍历入门:从中序遍历到层序与右视图】【LeetCode 热题100】94:二叉树的中序遍历、102:二叉树的层序遍历、199:二叉树的右视图(详细解析)(Go语言版)
本文详细解析了二叉树的三种经典遍历方式:中序遍历(94题)、层序遍历(102题)和右视图(199题)。通过递归与迭代实现中序遍历,深入理解深度优先搜索(DFS);借助队列完成层序遍历和右视图,掌握广度优先搜索(BFS)。文章对比DFS与BFS的思维方式,总结不同遍历的应用场景,为后续构造树结构奠定基础。
319 10
|
9月前
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。