ホームページ  >  記事  >  Java  >  Java 計算の例を共有する

Java 計算の例を共有する

零下一度
零下一度オリジナル
2017-07-21 17:25:261231ブラウズ

n 個の数値について、n 個の数値内のすべての異なる数値をカバーする最小間隔を見つけます。

ソリューションアイデア:

ACコード:

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Main{

	/**
	 * @param args
	 */
	static int n;
	static Set<Integer> set = new HashSet<Integer>() ; 
	static int a[]=new int[1000000+2];
	static Map<Integer,Integer> map=new HashMap<Integer, Integer>();
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan=new Scanner(System.in);
		n=scan.nextInt();
		for(int i = 0 ; i < n ; i++){  
            set.add(a[i] = scan.nextInt() ) ;  
        }  
		int  size = set.size() ;  //计算不同知识点的个数
		int start = 0 , end = 0 , sum = 0 ;  
        int res = n ; 
        for(;;){  
            while(end < n && sum < size){  
                Integer cnt = map.get(a[end]) ;  
                if(cnt == null){  
                    sum++ ;  
                    map.put(a[end] , 1) ;  
                }  
                else map.put(a[end] , cnt+1) ;  
                end++ ;  
            }  
            if(sum < size) break ;   
            res = Math.min(end - start , res) ;  
            int cnt = map.get(a[start]) ;   
            if(cnt == 1){  
                map.remove(a[start]) ;  
                sum-- ;  
            }  
            else map.put(a[start] , cnt-1) ;  
            start++ ;  
        }
        System.out.println(res) ;
	}

}

以上がJava 計算の例を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。