refactor: move lis into utils
This commit is contained in:
parent
8de1c484ff
commit
9a02fc4aec
@ -1,7 +1,7 @@
|
|||||||
import { autorun, stop } from '@vue/observer'
|
import { autorun, stop } from '@vue/observer'
|
||||||
import { queueJob } from '@vue/scheduler'
|
import { queueJob } from '@vue/scheduler'
|
||||||
import { VNodeFlags, ChildrenFlags } from './flags'
|
import { VNodeFlags, ChildrenFlags } from './flags'
|
||||||
import { EMPTY_OBJ, isReservedProp } from './utils'
|
import { EMPTY_OBJ, isReservedProp, lis } from './utils'
|
||||||
import {
|
import {
|
||||||
VNode,
|
VNode,
|
||||||
MountedVNode,
|
MountedVNode,
|
||||||
@ -1058,52 +1058,6 @@ export function createRenderer(options: RendererOptions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://en.wikipedia.org/wiki/Longest_increasing_subsequence
|
|
||||||
function lis(arr: number[]): number[] {
|
|
||||||
const p = arr.slice()
|
|
||||||
const result = [0]
|
|
||||||
let i
|
|
||||||
let j
|
|
||||||
let u
|
|
||||||
let v
|
|
||||||
let c
|
|
||||||
const len = arr.length
|
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
const arrI = arr[i]
|
|
||||||
if (arrI !== 0) {
|
|
||||||
j = result[result.length - 1]
|
|
||||||
if (arr[j] < arrI) {
|
|
||||||
p[i] = j
|
|
||||||
result.push(i)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
u = 0
|
|
||||||
v = result.length - 1
|
|
||||||
while (u < v) {
|
|
||||||
c = ((u + v) / 2) | 0
|
|
||||||
if (arr[result[c]] < arrI) {
|
|
||||||
u = c + 1
|
|
||||||
} else {
|
|
||||||
v = c
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (arrI < arr[result[u]]) {
|
|
||||||
if (u > 0) {
|
|
||||||
p[i] = result[u - 1]
|
|
||||||
}
|
|
||||||
result[u] = i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
u = result.length
|
|
||||||
v = result[u - 1]
|
|
||||||
while (u-- > 0) {
|
|
||||||
result[u] = v
|
|
||||||
v = p[v]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// unmounting ----------------------------------------------------------------
|
// unmounting ----------------------------------------------------------------
|
||||||
|
|
||||||
function unmount(vnode: VNode) {
|
function unmount(vnode: VNode) {
|
||||||
|
@ -10,3 +10,49 @@ export const isReservedProp = (key: string): boolean => {
|
|||||||
return key.startsWith('nativeOn')
|
return key.startsWith('nativeOn')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://en.wikipedia.org/wiki/Longest_increasing_subsequence
|
||||||
|
export function lis(arr: number[]): number[] {
|
||||||
|
const p = arr.slice()
|
||||||
|
const result = [0]
|
||||||
|
let i
|
||||||
|
let j
|
||||||
|
let u
|
||||||
|
let v
|
||||||
|
let c
|
||||||
|
const len = arr.length
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
const arrI = arr[i]
|
||||||
|
if (arrI !== 0) {
|
||||||
|
j = result[result.length - 1]
|
||||||
|
if (arr[j] < arrI) {
|
||||||
|
p[i] = j
|
||||||
|
result.push(i)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
u = 0
|
||||||
|
v = result.length - 1
|
||||||
|
while (u < v) {
|
||||||
|
c = ((u + v) / 2) | 0
|
||||||
|
if (arr[result[c]] < arrI) {
|
||||||
|
u = c + 1
|
||||||
|
} else {
|
||||||
|
v = c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (arrI < arr[result[u]]) {
|
||||||
|
if (u > 0) {
|
||||||
|
p[i] = result[u - 1]
|
||||||
|
}
|
||||||
|
result[u] = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
u = result.length
|
||||||
|
v = result[u - 1]
|
||||||
|
while (u-- > 0) {
|
||||||
|
result[u] = v
|
||||||
|
v = p[v]
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user