public int lis(List <int> A) { var index = 0; var max = 1; var checkedList = new bool[A.Count]; while (index < A.Count) { if (checkedList[index]) { index++; continue; } TreeMultiNode root = new TreeMultiNode(A[index]); checkedList[index] = true; for (int i = index + 1; i < A.Count; i++) { if (A[i] < root.val) { continue; } checkedList[i] = true; var tmp = insertNode(root, A[i]); if (max < tmp) { max = tmp; } } index++; } if (max == 1) { return(1); } return(max + 1); }
private int insertNode(TreeMultiNode root, int value) { var node = new TreeMultiNode(value); if (!root.children.Any()) { root.children.Add(node); return(1); } var isAdded = false; var max = 0; foreach (var child in root.children) { if (child.val > value) { continue; } isAdded = true; var tmp = insertNode(child, value) + 1; if (tmp > max) { max = tmp; } } if (!isAdded) { root.children.Add(node); if (max < 2) { max = 2; } } return(max); }