46.配列内で最長の連続サブシーケンス

46.配列内で最長の連続サブシーケンス

タイトル説明

順序付けられていない配列arrが与えられた場合、最長の連続シーケンスの長さを返します(連続値が必要であり、位置は不連続になる可能性があります。たとえば、3、4、5、および6は連続自然数です)

入る

[100,4,200,1,3,2]

戻り値

4

入る

[1,1,1]

戻り値

1

分析

1.質問の意味から取得でき、繰り返し要素はカウントされないため、Setメソッドを採用して重複を自動的に削除します

2.次に、比較を続けます。セットに現在の要素+ 1の後に要素が含まれている場合は、カウンター++を指定します。

3.完全なセットがトラバースされるまで、最長の連続サブシーケンスを取得できます

コード

   import java.util.*;
    
    
    public class Solution {
    
    
        /**
         * max increasing subsequence
         * @param arr int整型一维数组 the array
         * @return int整型
         */
       public int MLS(int[] arr) {
    
    
    		if (arr.length == 0) {
    
    
    			return 0;
    		}
    		int n = arr.length;
    		int max = 1;
    		Set<Integer> set = new HashSet<>();
    		for (int num : arr) {
    
    
    			set.add(num);
    		}
    		for (int num : arr) {
    
    
    			if (set.contains(num - 1)) {
    
    
    				continue;
    			}
    			int start = num;
    			while (set.contains(start + 1)) {
    
    
    				start++;
    			}
    			max = Math.max(max, start - num + 1);
    		}
    		return max;
    	}
    }


おすすめ

転載: blog.csdn.net/qq_45874107/article/details/115285696