同步操作将从 编程语言算法集/Java 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package DynamicProgramming;import java.util.Scanner;/** @author Afrizal Fikri (https://github.com/icalF) */public class LongestIncreasingSubsequence {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int ar[] = new int[n];for (int i = 0; i < n; i++) {ar[i] = sc.nextInt();}System.out.println(LIS(ar));sc.close();}private static int upperBound(int[] ar, int l, int r, int key) {while (l < r - 1) {int m = (l + r) >>> 1;if (ar[m] >= key) r = m;else l = m;}return r;}private static int LIS(int[] array) {int N = array.length;if (N == 0) return 0;int[] tail = new int[N];// always points empty slot in tailint length = 1;tail[0] = array[0];for (int i = 1; i < N; i++) {// new smallest valueif (array[i] < tail[0]) tail[0] = array[i];// array[i] extends largest subsequenceelse if (array[i] > tail[length - 1]) tail[length++] = array[i];// array[i] will become end candidate of an existing subsequence or// Throw away larger elements in all LIS, to make room for upcoming grater elements than// array[i]// (and also, array[i] would have already appeared in one of LIS, identify the location and// replace it)else tail[upperBound(tail, -1, length - 1, array[i])] = array[i];}return length;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。