【Go语言刷题篇】Go从0到入门4:切片的高级用法、初级复习与Map入门学习

简介: 本期是学习Golang的:切片高级用法及初级复习、Map、条件与循环语句入门学习,有不懂的地方可以评论进行讨论!

前言


本期是学习Golang的:切片高级用法及初级复习、Map、条件与循环语句入门学习,有不懂的地方可以评论进行讨论!

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

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

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

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

Q1:切片-出队


问题描述:学生们都排成了一队,有一个切片表示相应学生们的身高,现随机喊某个位置的人出队,返回出队后的这个切片。比如[2,3,4,5],索引为1的位置的出队,出队后切片为[2,4,5]


相关知识:

1、s|n| 切片s中索引位置为n的项

2、s|:| 从切片s的索引位置0到len(s)-1 处所获得的切片

3、s|low:| 从切片s的索引位置 low 到len(s)-1 处所获得的切片

4、s|:high| 从切片s的索引位置 0到high 处所获得的切片,len=high

5、s|low: high| 从切片s的素引位置 Iow 到high 处所获得的切片,len-high-low

6、s|low: high:max| 从切片s的素引位置 low 到high 处所获得的切片,len-high-low, cap=max-low


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

示例输出:[1,2,3,5,6]


案例代码:

//import "fmt"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @param s int整型一维数组 身高
 * @param index int整型 出队索引
 * @return int整型一维数组
*/
func deleteElement(s []int, index int) []int {
  // write code here
  s1 := s[0 : index]
  s2 := s[index+1:]
  s1 = append(s1, s2...)
  return s1
}


Q2:切片遍历-评委打分


问题描述:小明参加某个歌唱比赛,评委们进行打分,要求去掉最高分,和最低分,将最高分和最低分依次存入切片并返回。


相关知识:

1、int64最大值,最小值, 大小比较,多返回值

2、golang中有符号的最大值为math.MaxInt64,最小值为math.MinInt64

3、切片的遍历有两种方式,for循环和for range循环


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

示例输出:[1,9]


案例代码:

func minAndMax(s []int) []int {
  // write code here
  var ans []int
  var a int = s[0]
  var b int = s[0]
  for _, j := range s {
  a = max(a, j)
  b = min(b, j)
  }
  ans = append(ans, b)
  ans = append(ans, a)
    return ans
}
func min(a int, b int) int {
  if a < b {
  return a
  }
  return b
}
func max(a int, b int) int {
  if a > b {
  return a
  }
  return b
}


Q3:切片遍历-调整顺序


问题描述:小朋友们依次站成了一排,现要将他们调换顺序,反着排,按照从最右的人站在最左边,倒数最右边的人站在最左边第二个位置,以此类推。比如小朋友的顺序为[1,3,2,3,4,6],重新排列后为[6,4,3,2,3,1]。


相关知识:

1、len(slice)求一个切片的长度

2、for循环遍历切片

3、多重赋值的特性可以轻松实现变量的交换,变量一,变量二 := 变量二,变量一


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

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


案例代码:


//import "fmt"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @param s int整型一维数组 
 * @return int整型一维数组
*/
func convert(s []int) []int {
  // write code here
  length := len(s)
  for i := 0; i < length/2; i++{
  s[i], s[length-i-1] = s[length-i-1], s[i]
//    tmp := s[i]
//    s[i] = s[length-i-1]
//    s[length-i-1] = tmp
  }
  return s
}


Q4:切片遍历-判断两个切片是否有相同的元素


问题描述:给定两个切片,判断这两个切片中的元素是否完全一样。


相关知识:

1、len(slice)求一个切片的长度

2、for循环遍历切片


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

示例输出:true


案例代码:

//import "fmt"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @param s1 int整型一维数组 
 * @param s2 int整型一维数组 
 * @return bool布尔型
*/
func equal( s1 []int ,  s2 []int ) bool {
  // write code here
  length := len(s1)
  for i := 0; i < length; i++{
  if s1[i] != s2[i]{
    return false
  }
  }
  return true
}


Q5:合并有序数组


问题描述:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。


相关知识:

1、for循环

2、break中断循环

3、append切片的追加


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

示例输出:[1,2,2,3,5,6]


案例代码:

//import "fmt"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @param nums1 int整型一维数组 
 * @param m int整型 
 * @param nums2 int整型一维数组 
 * @param n int整型 
 * @return int整型一维数组
*/
func merge(nums1 []int, m int, nums2 []int, n int) []int {
  // write code here
  //类似 归并排序  从后面 开始判断  把大的 返回
  i := m + n - 1
  p1 := m - 1
  p2 := n - 1
  for p1 >= 0 && p2 >= 0 {
  if nums1[p1] >= nums2[p2] {
    nums1[i] = nums1[p1]
    p1--
    i--
  } else {
    nums1[i] = nums2[p2]
    p2--
    i--
  }
  }
  for p1 >= 0 {
  nums1[i] = nums1[p1]
  p1--
  i--
  }
  for p2 >= 0 {
  nums1[i] = nums2[p2]
  p2--
  i--
  }
  return nums1
}


Q6:Map-成绩表


问题描述:某大学宿舍6人的数学成绩分别为 小明:60,小王:70,张三:95,李四:98,王五:100,张伟:88 ,现要将六人的成绩录入成绩表中,这个成绩表用一个map来表示,成绩表的键为宿舍成员的姓名,值为对应的分数 。打印该成绩表


相关知识:

1、map的声明:map[KeyType]ValueType KeyType:表示键的类型。ValueType:表示键对应的值的类型。map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:make(map[KeyType]ValueType, [cap]) 其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。

2、map[key]=value 给指定的key赋指定的value


示例输入:

示例输出:map[小明:60 小王:70 张三:95 张伟:88 李四:98 王五:100]


案例代码:

import "fmt"
func main() {
  m1 := make(map[string]int)
  m1["小明"] = 60
  m1["小王"] = 70
  m1["张三"] = 95
    m1["张伟"] = 88
  m1["李四"] = 98
  m1["王五"] = 100
  fmt.Println(m1)
}


Q7:Map-单词字符


问题描述:给定一个只由字母和数字组成的字符串,,统计每个字符出现的次数,并返回出现次数最多的字符。


相关知识:

1、组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号(’)包裹起来,如:var a = ‘中’

2、map的每个key是唯一的。

3、map的声明:map[KeyType]ValueType KeyType:表示键的类型。ValueType:表示键对应的值的类型。map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:make(map[KeyType]ValueType, [cap]) 其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。


示例输入:“yyds”

示例输出:y


案例代码:

//import "fmt"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @param s string字符串 
 * @return char字符型
*/
func character(s string) byte {
  // write code here
  arr := ([]byte)(s)
  count := 0
  var ans byte
  charaMap := make(map[byte]int)
  for _, j := range arr {
  charaMap[j]++
  if charaMap[j] > count {
    count = charaMap[j]
    ans = j
  }
  }
  return ans
}


后文:刷题神器


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


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

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

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

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

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

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


相关文章
|
8天前
|
存储 设计模式 安全
Go语言中的并发编程:从入门到精通###
本文深入探讨了Go语言中并发编程的核心概念与实践技巧,旨在帮助读者从理论到实战全面掌握Go的并发机制。不同于传统的技术文章摘要,本部分将通过一系列生动的案例和代码示例,直观展示Go语言如何优雅地处理并发任务,提升程序性能与响应速度。无论你是Go语言初学者还是有一定经验的开发者,都能在本文中找到实用的知识与灵感。 ###
|
13天前
|
Serverless Go
Go语言中的并发编程:从入门到精通
本文将深入探讨Go语言中并发编程的核心概念和实践,包括goroutine、channel以及sync包等。通过实例演示如何利用这些工具实现高效的并发处理,同时避免常见的陷阱和错误。
|
26天前
|
安全 Go 开发者
破译Go语言中的并发模式:从入门到精通
在这篇技术性文章中,我们将跳过常规的摘要模式,直接带你进入Go语言的并发世界。你将不会看到枯燥的介绍,而是一段代码的旅程,从Go的并发基础构建块(goroutine和channel)开始,到高级模式的实践应用,我们共同探索如何高效地使用Go来处理并发任务。准备好,让Go带你飞。
|
28天前
|
存储 安全 Go
Go语言切片:从入门到精通的深度探索###
本文深入浅出地剖析了Go语言中切片(Slice)这一核心概念,从其定义、内部结构、基本操作到高级特性与最佳实践,为读者提供了一个全面而深入的理解。通过对比数组,揭示切片的灵活性与高效性,并探讨其在并发编程中的应用优势。本文旨在帮助开发者更好地掌握切片,提升Go语言编程技能。 ###
|
5月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
|
2月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
2月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
1月前
|
存储 分布式计算 Java
Stream很好,Map很酷,但答应我别用toMap():Java开发中的高效集合操作
在Java的世界里,Stream API和Map集合无疑是两大强大的工具,它们极大地简化了数据处理和集合操作的复杂度。然而,在享受这些便利的同时,我们也应当警惕一些潜在的陷阱,尤其是当Stream与Map结合使用时。本文将深入探讨Stream与Map的优雅用法,并特别指出在使用toMap()方法时需要注意的问题,旨在帮助大家在工作中更高效、更安全地使用这些技术。
40 0
|
3月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
3月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。