记一道Go后端笔试题-Top相关~

原文地址:记一道Go后端笔试题-Top相关

先来看题目:从K个元素的数据类型为int型的array中找到最大的两个数,分别用循环算法和递归算法来写。

上述题目是同事面试Go的时候分享出来的一道题目,刚好最近有面试,就拿来练练手,接下来分享一下解题的思路。

看到题目的第一感觉,认为是从一定数量的元素中取Top多少的问题,这种问题的常规方案就是利用堆排序的方案来解决,堆的初始容量为Top的数目,堆顶的元素是最小的,开始只需将slice前Top个元素放入堆中,之后从第Top+1个元素开始循环递归比较并放入堆中就可完成上述问题。

理想是丰满的,现实是残酷的,关于堆相关算法对目前来说还不是很熟练,所以只好另辟蹊径,采用硬性循环以及粗暴递归的方式来解决问题。

硬性循环代码案例如下:

package main

import "fmt"

func main() {
	first, second := 0, 0
	s1 := []int{1, 2, 11, 25, 24, 22, 4, 5, 7, 9}

	for i := 0; i < len(s1); i++ {
		sign := s1[i]
		switch {
		case sign > first && sign > second:
			if first > second {
				second = first
			}

			first = sign
		case sign <= first &
### 关于后端开发笔试题的练习 对于后端开发者来说,掌握常见的算法、数据结构以及编程技巧是非常重要的。以下是几个典型的后端开发笔试题目方向及其相关内容: #### 数据库设计与优化 数据库的设计和查询优化是后端工程师的核心能力之一。通常会涉及 SQL 查询语句编写、索引创建及性能调优等问题。 - **SQL 查询**: 编写复杂的多表联结查询 (JOIN),子查询,聚合函数的应用等。 - **索引优化**: 如何通过合理使用 B-tree 或者哈希索引来提升查询效率[^1]。 ```sql -- 复杂查询示例 SELECT users.name, COUNT(orders.id) AS order_count FROM users LEFT JOIN orders ON users.id = orders.user_id WHERE users.status = 'active' GROUP BY users.id; ``` #### 并发控制与分布式系统基础 了解并发处理机制以及如何构建高可用性的分布式架构也非常重要。 - **锁机制**: 实现线程安全的数据访问逻辑,比如乐观锁 vs 悲观锁的选择依据是什么? - **缓存策略**: Redis 的基本操作命令有哪些?它适合用来解决哪些场景下的问题? ```java // 使用 ReentrantLock 来实现同步块 ReentrantLock lock = new ReentrantLock(); lock.lock(); try { // 访问共享资源... } finally { lock.unlock(); } ``` #### 算法与复杂度分析 能够快速识别并解决问题中的时间空间瓶颈所在位置,并给出改进方案尤为重要。 - 动态规划求解背包问题或其他组合类难题; - 图论中最短路径计算方法Dijkstra/Bellman-Ford/Floyd-Warshall之间的区别联系; 针对具体实例 `Minimize Deviation in Array` 这道来自 LeetCode 的经典动态规划题目可以作为很好的训练素材[^3]: ```python from heapq import heapify, heappushpop def minimumDeviation(nums): max_heap = [] min_val = float('inf') for num in nums: if num % 2 != 0: num *= 2 heappush(max_heap,-num) min_val = min(min_val,num) res = float('inf') while True: cur_max = -heappop(max_heap) res = min(res,cur_max-min_val ) if cur_max & 1 : break min_val =min(min_val ,cur_max >>1 ) heappush(max_heap,-(cur_max>>1)) return res ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值