据说是一道js算法面试题 getLinks

文章讲述了作者和朋友针对一道面试题——处理链式结构数组的连接问题——的不同解法。作者提供了较复杂的解决方案,而朋友的方案更简洁,但对数据顺序有依赖。作者意识到自己的代码可优化且在某些情况下更稳健。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 数组在这可以复制粘贴

const data = [
	{ id: 3, next: 4 },
	{ id: 4, next: 5 },
	{ id: 5, next: 6 },
	{ id: 6, next: 7 },
	{ id: 7, next: 8 },
	{ id: 8, next: 9 },
	{ id: 2, next: 10 },
	{ id: 1, next: 2 },
	{ id: 20, next: 30 },
	{ id: 30, next: 40 },
	{ id: 100, next: 78 },
];

也是无意见在一个技术群里 看见说这是一道面试题 

然后我自己就小试了一下

看着很简单 后期脑子转了一会儿大约得思路就是 

先把next 不可以衔接在其他对象在后面的对象挑出来 再依次的寻找他的兄弟对象

这是截图

啊啊啊啊啊啊啊啊啊啊啊~~~ 这个可行 觉得有循环次数多自己优化~~~~~~~~~~~~~~~~~~~~~~~

 代码在这 (还可以再精简 但是最近脑子转不过来 凑合用吧)

let newlist = [],
	newi = 0

for (let i = 0; i < data.length; i++) {
	if(!fn(data[i].id,i)){
		 newlist[newi] = []
		 newlist[newi].push(data[i])
		 fn1(data[i].next,newi)
		 newi ++
	 }
}
function fn1(next,ii){
	for (let i = 0; i < data.length; i++) {
		if(data[i].id == next){
			newlist[ii].push(data[i])
			fn1(data[i].next,ii)
			break
		}
	}
}
			
function fn(id,i){
	let yy = data.some((item,index)=>{
		return (item.id == id || item.next == id ) && index != i
	})
	return yy
}
console.log(newlist)

没有多久我再问了一个我别的朋友 然后他五分钟就给了我一个回复

不得不说 这三年他在进步 我还是少儿代码

图片在这(看着是不是比我的精简很多)

 代码在这

function getLinks(data) {
	let stack = data.sort((a, b) => a.id - b.id),
	newStack = [],
	i = -1
	for (; ++ i < stack.length;) {
		if (!newStack.length) newStack[i] = [stack[i]]
		else {
		    let s = newStack[newStack.length - 1]
		    console.log(s);
		    s[s.length - 1].next == stack[i].id ? newStack[newStack.length - 1].push(stack[i]) : newStack.push([stack[i]])
		}
	}
	console.log(newStack,'iiiiiiii')
}
getLinks(data)

后期我看了我朋友的思路 做了个对比 

发现我在工作中 是一个 思维很周密的人 做每一个功能甚至还能帮产品相出这样的弊端的人

我朋友的这个 可以做到 但是有问题 这个id和next 就是顺序进行 假设 

 数据是这样的 调换了 顺序 我朋友这个就有点行不通

我大致明白为什么 又懒得屡他的破代码 解释了 

反正我的虽然多 而且还可以优化 但是最近脑子有点不够用 就凑合吧

如果要是想要结果 多次都能凑合的话 我的那个还凑合。。。。。

😁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值