トピック:
コードは以下の通りであります:
パッケージday01。 インポートjava.util.Scanner; パブリック クラスMaxArray { パブリック 静的 int型の最大値(INT I、INT J){ int型M。 もし(I> J) mは = Iと、 他 メートル = J; リターンメートル。 } パブリック 静的 ボイドメイン(文字列[]引数){ // 自動的にスタブを生成する方法であってTODO int型私は、N。 INT [] = 新しい int型 [100 ]。 スキャナSC = 新しいスキャナ(System.in)。 // N个整数 N = sc.nextInt()。 用(; I <= N; I ++ iは1 = ) [I] = sc.nextInt()。 用(; I <= N; I ++ I = 2 ) { IF(A [I] + A [I-1]> A [I]) // この数とフロントのこの数以上の数は、これは隣接サブアレイの場合 [I] = [I ] + A [I-1 ]; } int型 ANS = -100000 ; 用(; I <= N; I ++ iは1 = ) ANS = MAX(ANS、A [I]); // まず、第1のサブアレイと次に大きいサブアレイおよびサイクル、続いてANSを割り当て大きいリフレッシュ、比較ANS、に割り当てられた システム。 out.printlnを(ANS)。 sc.close(); } }
テスト結果は、スクリーンショット:
開発:配列は、最大の配列と部分配列を求めて、リングの配列です
要件:各値は一度だけ撮影することができます
コードは以下の通りであります:
パッケージday01。 インポートjava.util.Scanner; パブリック クラスFindMaxArray { パブリック 静的 ボイドメイン(文字列[]引数が){ // A法スタブが自動的に生成されたTODO INT長; // 配列長の長さを定義 INT N-; // 定義された変更後の配列の長さ の配列を入力してください「のSystem.out.printlnを( 「要素の数)。 スキャナSC = 新しいスキャナ(System.in)。 長さ = sc.nextInt()。 N = 2× 長さ; INT [] = 新しい INT [n]を、 System.out.println("请输入数组中的元素:"); for(int i=0;i<length;i++) { a[i] = sc.nextInt(); } int max=a[0]; int s=0;//定义求和后的元素 for(int i=0;i<length;i++) { s=0; for(int j=i;j<length+i;j++) { s=s+a[j]; if(s>max) { max=s; } } a[length+i]=a[i]; //每次将已经计算过的数放到最后 } System.out.println("最大子数组的和为:"+max); sc.close(); } }
但是上面的解决方法与要求不服,数组中的值用了两次,及每次第i个值昨完判断后再赋值给length+i。所以现在还没有想到别的方法。