Golang 大厂面试题 1

以下内容是根据ChatGPT得到的一些大厂面试题

Golang 字节跳动

1. 请用Golang实现一个函数,判断一个字符串是否为回文字符串。

1
2
3
4
5
6
7
8
func isPalindrome(s string) bool {
for i := 0; i < len(s)/2; i++ {
if s[i] != s[len(s)-i-1] {
return false
}
}
return true
}

2. 请用Golang实现一个函数,计算两个整数的最大公约数。

1
2
3
4
5
6
func gcd(a, b int) int {
if b == 0 {
return a
}
return gcd(b, a%b)
}

3. 请用Golang实现一个函数,将一个字符串中的空格替换成”%20”。

1
2
3
4
5
6
7
8
9
10
11
func replaceSpaces(s string) string {
var res strings.Builder
for _, c := range s {
if c == ' ' {
res.WriteString("%20")
} else {
res.WriteRune(c)
}
}
return res.String()
}

4. 请用Golang实现一个函数,找出数组中出现次数超过一半的元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func majorityElement(nums []int) int {
var count, candidate int
for _, num := range nums {
if count == 0 {
candidate = num
}
if num == candidate {
count++
} else {
count--
}
}
return candidate
}

5. 请用Golang实现一个函数,将一个二叉树展开为链表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}

func flatten(root *TreeNode) {
if root == nil || (root.Left == nil && root.Right == nil) { // 如果节点为空或者是叶子节点,则直接返回。
return
}

flatten(root.Left) // 将左子树展开为链表。
flatten(root.Right) // 将右子树展开为链表。

if root.Left != nil { // 如果左子树不为空,则将左子树插入到右子树之前。
tmp := root.Right
root.Right = root.Left
root.Left = nil
for root.Right != nil { // 找到右子树的最后一个节点。
root = root.Right
}
root.Right = tmp // 将原来的右子树接到新的右子树之后。
}
}

6. 请编写一个函数,将一个字符串中的每个单词的首字母转换为大写字母。

1
2
3
4
5
6
7
func capitalizeWords(s string) string {
words := strings.Fields(s)
for i, word := range words {
words[i] = strings.ToUpper(word[:1]) + word[1:]
}
return strings.Join(words, " ")
}

7. 请编写一个函数,将一个整数数组中的元素按照从小到大的顺序排序。

1
2
3
4
func sortInts(a []int) []int {
sort.Ints(a)
return a
}

8. 请编写一个函数,统计一个字符串中每个字符出现的次数,并返回一个 map,其中键为字符,值为出现次数。

1
2
3
4
5
6
7
func countChars(s string) map[rune]int {
counts := make(map[rune]int)
for _, r := range s {
counts[r]++
}
return counts
}

9. 请编写一个函数,将一个字符串中的所有大写字母转换为小写字母。

1
2
3
4
5
6
7
8
9
10
11
func toLowerCase(s string) string {
var result strings.Builder
for , r := range s {
if r >= 'A' && r <= 'Z' { // 如果是大写字母,则转换为小写字母。
result.WriteRune(r + ('a' - 'A'))
} else {
result.WriteRune(r)
}
}
return result.String()
}

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2023 Keep It Simple And Stupid All Rights Reserved.

访客数 : | 访问量 :