<1>複数のアレイ番号の数の半数以上が表示されます。
1.タイトル説明
この番号を見つけ、配列の半分以上の長さを表示される配列番号の数があります。例えば、入力アレイ9の長さは{1,2,3,2,2,2,5,4,2}。数2は5回、アレイ内のアレイの半分以上の長さ、出力2が表示されているので。0出力がある場合。
分析:
複数のアレイの総数の半分以上をお探しすることは、最初の配列をソートし、必然的に存在する場合、この番号は、途中で一度表示されます
真ん中の最小数を検索し、回数を記録配列全体を横断するの比較など、ほとんどの中央の数字の数は、それが表示されます
そして、数LENとを比較して、より多くない0が出力され、戻りの数がオーバーlenの真ん中の半分を置きます。
コードは以下の通りであります:
輸入java.util.Arrays。 パブリッククラスのソリューション{ 公共のint MoreThanHalfNum_Solution(INT []配列){ int型のlen = Array.lengthと。 (lenが<0){場合は 0を返します。 } は、Arrays.sort(アレイ) INTのTEMP =配列[lenの/ 2]。 int型のカウント= 0; {ため(; iはLEN <I ++は、I = 0 INT) IF(配列[I] == TEMP){ カウント++。 } } //不能等于、因为是除 場合(カウント>(LEN / 2)){ 戻りTEMP。 } 0を返します。 } }
<二>最小数K
タイトル説明
入力nは整数、最小の番号を見つけるK. 4,5,1,6,2,7,3,8例えば8つのデジタル入力、最小数は4 1,2,3,4です。
次のように直接の内部インターフェイスに応じて、Javaで実装されます。
輸入java.util.Arrays。 輸入はjava.util.ArrayList; パブリッククラスのソリューション{ 公共のArrayList <整数> GetLeastNumbers_Solution(INT []入力、int型K){ のArrayList <整数> RES =新規のArrayList <>(); int型のlen = input.length。 IF(入力== NULL || K> LEN){ 戻りRES。 } は、Arrays.sort(入力)。 (I 0 = int型、I <K; iは++){ため res.add(入力[I])。 } RESを返します。 } }
バブリングテスト、選択と挿入ソート。テストプログラムは生活が困難にするために、それは高い時間複雑かもしれません。
<三>と最大連続サブアレー
タイトル説明
HZは時折、それらの非コンピュータ科学の学生を点滅するために、いくつかの専門的な問題を取得します。テストグループが今日終了します後、彼はアップ話し:旧一次元パターン認識では、ベクトルは正の整数、問題の解決策であるときに最大と連続サブベクトルを計算する必要があることが多いです。ベクターは、負の数が含まれている場合は、それを補うだろう横に正の数を負の数が含まれている、と期待できますか?例えば:{6、-3、-2,7、-15,1,2,2}、及び8の最大連続サブベクトル(第3まで、0から始まります)。その最大連続サブ配列にして返し、あなたは彼が住んでだまされてはいけないのだろうか?(サブベクトルの長さは、少なくとも1です)。
コードは以下の通りであります:
輸入はjava.util.ArrayList; 輸入java.util.Collections。 パブリッククラスのソリューション{ 公共のint FindGreatestSumOfSubArray(INT []配列){ int型のlen = Array.lengthと。 ArrayListの<整数>リスト=新しいArrayListを<>(); 以下のために(INT i = 0; iがLEN <; iは++){ int型の和= 0。 用(int型J = I; J <LEN; J ++){ 合計+ =配列[J]。 list.add(合計)。 } } (はlist.size()<= 0){場合は 0を返します。 } Collections.sort(リスト)。 list.get返す(はlist.size() - 1)。 } }
<フォー>発生回数の整数(Nの発生が1〜1の整数であります
タイトル説明
1生じ1〜13の整数の数を計算し、そして生じ1で100〜1300倍の数の整数を計算?彼は特に約1〜13まで数えて、この目的を達成するために1は、したがって、6回の合計を表示さ1,10,11,12,13持つ数字が含まれていますが、彼Meizhe後ろの問題のために。ACMerは、あなたが彼を助けることを願っていますし、問題がより一般化され、範囲1が表示され、非負の整数の数(1からnまでの発生回数。1)は、すぐに任意のを見つけることができます。
コードは以下の通りであります:
パブリッククラスのソリューション{ 公共のint NumberOf1Between1AndN_Solution(int型n)は{ (N <0){場合は 0を返します。 } int型のカウント= 0; 一方、(N> 0){ 文字列str = String.valueOf(N) CHAR [] CH = str.toCharArray()。 {ため(; iはch.length <I ++は、I = 0 INT) {IF(CH [I] == '1') ++カウントします。 } } N--。 } カウントを返します。 } }
<五>把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
代码如下:
import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; public class Solution { public String PrintMinNumber(int [] numbers) { if(numbers == null || numbers.length == 0){ return ""; } int len = numbers.length; String [] str = new String[len]; StringBuffer sb = new StringBuffer(); for(int i = 0;i < len;i++){ str[i] = String.valueOf(numbers[i]); } Arrays.sort(str,new Comparator<String>() { @Override public int compare(String str1,String str2) { String c1 = str1 + str2; String c2 = str2 + str1; return c1.compareTo(c2); } }); for(int j = 0;j < len;j++) { sb.append(str[j]); } return sb.toString(); } }