题解 | #牛牛吃水果的顺序#

牛牛吃水果的顺序

https://www.nowcoder.com/practice/336b43ff1d664cdd8e3e39acb67dfa39

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param numFruits int整型
 * @param prerequisites int整型二维数组
 * @return int整型二维数组
 */
type tuoPu struct {
	in_count int
	val      int
	out      *out
}

type out struct {
	val  int
	next *out
}

var result [][]int

func findFruitOrder(numFruits int, prerequisites [][]int) [][]int {
	// write code here
	result = make([][]int, 0, 100)
	arr := make([]tuoPu, numFruits)
	for i := 0; i < numFruits; i++ {
		arr[i] = tuoPu{val: i}
	}
	for i := 0; i < len(prerequisites); i++ {
		v1 := prerequisites[i][0] //在后
		v2 := prerequisites[i][1] //在前
		arr[v1].in_count++
		if arr[v2].out == nil {
			arr[v2].out = &out{val: v1}
		} else {
			v := arr[v2].out
			for v.next != nil {
				v = v.next
			}
			v.next = &out{val: v1}
		}
	}
	temp := make([]int, numFruits)
	recursion(arr, temp, 0)
	return result
}

func recursion(arr []tuoPu, temp []int, index int) {
	if index >= len(temp) {
		return
	}
	for i := 0; i < len(arr); i++ {
		if arr[i].in_count == 0 {
			temp[index] = arr[i].val
			arr[i].in_count-- //变成-1
			o := arr[i].out   //遍历出度
			for o != nil {
				arr[o.val].in_count-- //出度减一
				o = o.next
			}
			recursion(arr, temp, index+1)
			arr[i].in_count++
			o = arr[i].out
			for o != nil {
				arr[o.val].in_count++ //出度加一
				o = o.next
			}
		}
	}
	if index == len(temp)-1 {
		//v := temp
		v := make([]int, len(temp))
		for i := 0; i < len(temp); i++ {
			v[i] = temp[i]
		}
		result = append(result, v)
	}
}

全部评论

相关推荐

2025-12-06 01:10
已编辑
哈尔滨工程大学 Java
一面问的真细,二面不知为啥变双机位。9.29快手主站平时怎么学习&nbsp;AI&nbsp;的,国内外知名大模型,实习公司都用的什么大模型,怎么评估效果的java池化思想,线程池构造方法的核心参数,线程池中阻塞队列注意事项,submit方法参数和执行逻辑,shutdown和shutdownnow,核心线程允许过期吗threadlocal底层,为什么key是弱引用,key回收了再get或者set这个value会怎样aqs,如何保证公平性java代理java堆划分,新生代还有别的晋升老年代的情况吗,什么时候触发gc,gc失败抛什么异常,如何排查oom,导出dump命令redis数据结构,哪个底层是跳表,和其他数据结构对比布隆过滤器会出现大key问题吗,你咋实现的布隆过滤器你怎么实现redis分布式锁,可重入,续期聚簇索引非聚簇索引select语句会加锁吗,怎么实现的不加锁undolog&nbsp;redolog&nbsp;binlog怎么能让select加锁,update这个范围加的什么锁,update一条呢手撕简单01背包,接雨水10.10快手主站意图识别用的哪个大模型,走到意图和rag的比例,faq是点击的吗自然语言怎么识别的gap一年干啥了,转正怎么样没跟组里提意向吗,研究生研究方向是传统算法吗,会大模型微调吗注册场景为什么用布隆过滤器,原理分布式锁底层的key怎么拼的,value里是什么redis持久化zset底层mysql索引结构,一个表三个字段有主键唯一索引和没索引的字段会有几个b+树,聚簇索引非聚簇索引存的啥无手撕
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务