大模型平台后端开发(xiaomi)

文章目录

算法题

1 三数之和 (注意去重的边界条件,过几天再刷几次)
2 长度最小的子数组 (代码随想录题目,滑动窗口)
3 用链表实现栈

package main
 
import (
    "errors"
    "fmt"
)
 
// Node 定义链表节点
type Node struct {
    data int
    next *Node
}
 
// Stack 定义栈结构
type Stack struct {
    top *Node
}
 
// NewStack 创建一个新的空栈
func NewStack() *Stack {
    return &Stack{nil}
}
 
// Push 将元素压入栈顶
func (s *Stack) Push(data int) {
    s.top = &Node{data, s.top}
}
 
// Pop 移除并返回栈顶元素
func (s *Stack) Pop() (int, error) {
    if s.top == nil {
        return 0, errors.New("stack is empty")
    }
    data := s.top.data
    s.top = s.top.next
    return data, nil
}
 
// Traverse 遍历栈中的元素
func (s *Stack) Traverse() {
    for current := s.top; current != nil; current = current.next {
        fmt.Print(current.data, " ")
    }
    fmt.Println()
}
 
func main() {
    stack := NewStack()
 
    // 推送元素
    stack.Push(1)
    stack.Push(2)
    stack.Push(3)
 
    // 遍历栈
    stack.Traverse() // 输出: 3 2 1
 
    // 弹出元素
    data, err := stack.Pop()
    if err == nil {
        fmt.Println("Pop:", data) // 输出: Pop: 3
    }
 
    // 再次遍历栈
    stack.Traverse() // 输出: 2 1
}

4 基础计算器

//标题
//10以内正整数的加乘括号运算的求解
//
//题目描述
//9+((8*2+3)+1)*2=
func opsSort(ops string) int {
	switch ops {
	case "*":
		return 2
	case "+":
		return 1
	default:
		return 0
	}
}

func calc(nums []int, ops []string) (nums1 []int, ops1 []string) {
	right, left := nums[len(nums)-1], nums[len(nums)-2]
	nums = nums[:len(nums)-2]
	op := ops[len(ops)-1]
	ops = ops[:len(ops)-1]

	switch op {
	case "+":
		nums = append(nums, left+right)
	case "*":
		nums = append(nums, left*right)
	}
	return nums, ops
}

func MathResult(raw string) int {
	paramStack, opsStack := make([]int, 0), make([]string, 0)
	for _, s := range raw {
		str := string(s)
		n, err := strconv.Atoi(str)
		if err == nil {
			paramStack = append(paramStack, n)
		} else {
			switch string(s) {
			case "(":
				opsStack = append(opsStack, str)
			case ")":
				for opsStack[len(opsStack)-1] != "(" {
					paramStack, opsStack = calc(paramStack, opsStack)
				}
				opsStack = opsStack[:len(opsStack)-1]
			case "+", "*":
				for len(opsStack) > 0 && opsSort(str) <= opsSort(opsStack[len(opsStack)-1]) {
					paramStack, opsStack = calc(paramStack, opsStack)
				}
				opsStack = append(opsStack, str)
			}
		}
	}
	for len(opsStack) > 0 {
		paramStack, opsStack = calc(paramStack, opsStack)
	}
	return paramStack[0]
}

func main() {
	var a string
	fmt.Scan(&a)
	// a := "8*2+3"
	// a := "9+((8*2+3)+1)*2"
	// a := "2*(3+4)"
	fmt.Println(MathResult(a))
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值