25秋招面试算法题 (Go版本)

文章目录

科大讯飞 0713

找01

牛牛拥有一个长度为 n 的01 串,现在他想知道,对于每个字符,在它前面的最近的不同字符的下标是多少?

输入描述

本题为多组测试数据,第一行输入一个正整数 T(1<=t<=100),代表测试数据组数。对于每组测试数据,第一行输入一个正整数 n(1<=n<=1000),代表初始 01串的长度。第二行输入一个长度为 n的01 串,代表初始字符串。

输出描述

对于每组测试数据,一行输出 n 个整数 a1,a2,...,an,其中 ai 代表初始字符串中第 i 个位置的字符前面,最近的不同字符的下标是 ai,特殊的,如果前面不存在不同字符,则输出 -1 表示不存在。

示例 1

输入

复制代码
1
4
1101

输出

复制代码
-1 -1 2 3

遍历字符串,遇到01串变化的位置就更新索引,并填充到结果中

go 复制代码
package kedaxunfei

import (
	"bufio"
	"fmt"
	"os"
)

func Find01Main() {
	Reader := bufio.NewReader(os.Stdin)
	Writer := bufio.NewWriter(os.Stdout)
	defer Writer.Flush()
	var n int
	fmt.Fscanf(Reader, "%d\n", &n)
	for i := 0; i < n; i++ {
		var strSize int
		var str string
		fmt.Fscanf(Reader, "%d\n", &strSize)
		fmt.Fscanf(Reader, "%s\n", &str)
		var result []int
		var res = -1
		for index, _ := range str {
			if index == 0 {
				result = append(result, res)
				continue
			}
			if str[index-1] != str[index] {
				res = index
			}
			result = append(result, res)

		}
		fmt.Println(result)

	}

}

不能出现太多

给定n个数字A1,A2,...An,请求出这些数字中出现次数小于等于k的最小的数。

输入描述

第一行正整数n,k,接下来一行n个正整数,第i个表示Ai 1<=k<=n<=105,1<=Ai<=109

输出描述

一行一个整数,表示答案。如果不存在出现次数少于等于k次的数字,输出-1

示例 1

输入

复制代码
5 2
1 1 1 2 3

输出

复制代码
2

用map记录每个数字出现的次数,最后遍历map选值最小的

go 复制代码
package kedaxunfei

import (
	"bufio"
	"fmt"
	"os"
)

func NotExistTooMuch() {
	Reader := bufio.NewReader(os.Stdin)
	Writer := bufio.NewWriter(os.Stdout)
	var n, k int
	defer Writer.Flush()
	fmt.Fscanf(Reader, "%d %d\n", &n, &k)

	nums := make([]int, n)
	maps := make(map[int]int)
	for i := 0; i < n; i++ {
		fmt.Fscanf(Reader, "%d", &nums[i])
		if _, ok := maps[nums[i]]; ok {
			maps[nums[i]]++
		} else {
			maps[nums[i]] = 1
		}
	}
	var res int
	var maxRes = 100000
	for key, value := range maps {

		if value <= k {
			if key < maxRes {
				maxRes = key
				res = key
			}
		}
	}
	fmt.Fprintf(Writer, "%d", res)

}

其他

LCA

最近公共祖先(LCA, Lowest Common Ancestor)是树算法中的经典问题之一。给定一个二叉树和树中的两个节点,LCA 是指这两个节点的最深的公共祖先节点。

csharp 复制代码
package main

import "fmt"

// TreeNode 定义二叉树的节点结构
type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

// lowestCommonAncestor 寻找最近公共祖先
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
    if root == nil || root == p || root == q {
        return root
    }

    left := lowestCommonAncestor(root.Left, p, q)
    right := lowestCommonAncestor(root.Right, p, q)

    if left != nil && right != nil {
        return root
    }
    if left != nil {
        return left
    }
    return right
}

// 辅助函数:构建二叉树
func buildTree() *TreeNode {
    root := &TreeNode{Val: 3}
    root.Left = &TreeNode{Val: 5}
    root.Right = &TreeNode{Val: 1}
    root.Left.Left = &TreeNode{Val: 6}
    root.Left.Right = &TreeNode{Val: 2}
    root.Right.Left = &TreeNode{Val: 0}
    root.Right.Right = &TreeNode{Val: 8}
    root.Left.Right.Left = &TreeNode{Val: 7}
    root.Left.Right.Right = &TreeNode{Val: 4}
    return root
}

func main() {
    root := buildTree()
    p := root.Left       // 节点5
    q := root.Left.Right // 节点2

    ancestor := lowestCommonAncestor(root, p, q)
    fmt.Printf("最近公共祖先是: %d\n", ancestor.Val)
}
相关推荐
minji...2 分钟前
算法题 逆波兰表达式/计算器
数据结构·c++·算法·1024程序员节
编码追梦人1 小时前
基于 STM32 的智能语音唤醒与关键词识别系统设计 —— 从硬件集成到算法实现
stm32·算法·struts
循着风3 小时前
二叉树的多种遍历方式
数据结构·算法
.格子衫.8 小时前
022数据结构之树状数组——算法备赛
数据结构·算法·1024程序员节
黑科技Python8 小时前
生活中的“小智慧”——认识算法
学习·算法·生活
sali-tec9 小时前
C# 基于halcon的视觉工作流-章52-生成标定板
开发语言·图像处理·人工智能·算法·计算机视觉
IT古董9 小时前
【第五章:计算机视觉-项目实战之推荐/广告系统】2.粗排算法-(4)粗排算法模型多目标算法(Multi Task Learning)及目标融合
人工智能·算法·1024程序员节
熬了夜的程序员9 小时前
【LeetCode】89. 格雷编码
算法·leetcode·链表·职场和发展·矩阵
對玛祷至昏10 小时前
数据结构理论知识
数据结构·算法·排序算法
oliveira-time10 小时前
二分搜索(Binary Search)
算法