【💰】拖拽排序,最小修改次数问题
比如
数据行: A B C D E
序号: 1 2 3 4 5
拖拽列表,将数据行移动到其他位置
数据行: A E C D B
序号: 1 5 3 4 2
E 移到 第 2 位
这个时候如果要更新它们的排序序号,就需要更新 B C D E。
这里想到一个单次移动比较省的方法,是扩大它们的间隔,变成 [10, 20, 30, 40, 50],如果 E 移到A(10)和B(20)之间,那么 E 就设置为(10+20)/2=15,只需要修改一行的排序序号的值,如果出现取中值冲突,所有数重新排序生成间隔。
但是前端是拖拽排序,并且是可以拖拽多次的,这里要求算出 初始排序 和 拖拽后的最终排序 怎样修改次数最少,这里考虑用到 最长公共递增子序列算法。
PS:实际上拖拽排序场景数据量不会太大,通常也很难上百吧。少量数据直接全量重新写入排序序号就可以了。但是仍然想问问有没有优雅的解决方法。
金币会随着回复数量动态增加,首次回复有概率获得金币池中部分金币奖励。
换个数据结构, 用单向链表.
A->B->C->D->E 要是拖拽 E 到 A 后面的话, 就把 A 的 next 改为 E, E 的 next 改为 B D 的 next 置为 null
A->E->B->C->D
这样不管怎么排, 数据量多大, 最多只需要处理 3 个节点就行
可以结合界面然后加上数组来组合一下, 渲染使用链表的顺序, 但是操作使用数组来取对应的值.
大概就是这么个意思, 我拍脑袋想的, 仅供参考