[ タイトル ]
文字型の配列を考えるとチャス[]、チャズは、すべての文字は一度だけ表示されるかどうかを決定します
例えば、チャズは= [ 'A'、 'B'、 'C']、trueを返す;のChas = [ '1'、 '2'、 '1']、それがfalseを返します
[ 条件 ]
時間計算量はO(N)
1 // データ構造HashSetの使用方法 2 公共 ブール isUnique(CHAR []のChas)を 3 { 4 IF(チャズ== NULL ) 5 { 6 リターン trueに; 7 } 8。 9。 HashSetの<文字> SET = 新しい新しい HashSetの<> (); 10 用(INT I = 0;私はchas.lengthを<; I ++が) 。11 { 12は IF ((チャズ[I])set.contains) 13は 、{ 14 リターン falseに; 15 } 16 他 17。 { 18れる (チャズ[I])set.add; 19 } 20 } 21が 戻り trueに、 22である } 23である 24 25 // 第二の方法、ブール配列使用 26がある 公共 ブール isUnique(CHAR []のChas ) 27 { 28 IF(のChasは== NULL ) 29 { 30 リターン trueに、 31である } 32 33である ブール[]地図= 新しい ブール [256 ]。 34 のために(int型 ; iがchas.lengthを<I ++は、I = 0 ) 35 { 36 であれば(マップ[チャス[I]) 37 { 38 リターン 偽。 39 } 40 マップ[チャス[I] = 真。 41 } 42 リターン 真。 43 }
[ 条件 ]
余分なスペースの複雑さを確保する上でO(1)の方法を達成するために、可能な限り低い時間計算を提供されています
1 公共 ブール isUnique(CHAR []のChas) 2 { 3 であれば(チャズ== NULL || chas.length <2 ) 4 { 5 リターン 真。 6 } 7 8 ヒープソート(チャズ)。 9 のためには、(int型 i = 1; iがchas.lengthを<; Iは++ ) 10 { 11の 場合(チャズ[I] ==のChas [I - 1 ]) 12 { 13 リターン 偽。 14 } 15 } 16 リターン 真。 17 } 18
//堆排序的非递归实现 19 公共 ボイドヒープソート(CHAR []のChas) 20 { 21 のための(int型 i = 0; iがchas.lengthを<; Iは++ ) 22 { 23 heapInsert(チャス、I)。 24 } 25 のために(INT I = chas.length - 1、I> 0; i-- ) 26 { 27 スワップ(チャス、0 、I)。 28 heapify(チャス、0 、I)。 29 } 30 } 31で 32 // 大ルートスタックビルド 33である 公共 ボイド heapInsert(CHAR []のChasは、int型I)が 34である { 35 のint = 0親; 36 ながら(I = 0] ) 37 { 38である 親=(I - 1)/ 2 ; 39 IF(チャズ[親] <チャス[I]) // 親ノードの任意のサブノードの値が小さい場合よりも大きなヒープルートは、ルートノードの最大値は 40 { 41は 、スワップ(チャズ、親I); 42である I = 親; 43れます } 44 他の 45 { 46 ブレーク。 47 } 48 } 49 } 50 51 // 调整堆 52 公共 ボイド heapify(CHAR []のChasは、int型 I、int型のサイズ) 53 { 54 のint左= iは* 2 + 1 。 55 int型の右=私は2 + 2 * ; 56 int型 =最大I; 57 一方(左< サイズ) 58 { 59 もし(チャス[左]> のChas [I]) 60 { 61 、最大= 左。 62 } 63 であれば(右<サイズ&&のChas [右]> のChas [最大]) 64 { 65 、最大= 右。 66 } 67 であれば(最大=!I) 68 { 69 スワップ(チャス、最大、I)。 70 } 71 他の 72 { 73 ブレーク。 74 } 75 、I = 最大。 76 左= I 2 + 1 * 。 77 右= I 2 + 2 * 。 78 } 79 } 80 81 公共 ボイドスワップ(CHAR []のChas、int型 I、INT J) 82 { 83 チャー TEMP = チャズ[I]を、 84件 のChas [I] =用のChas [J]。 85件 のChas [J] = TEMP。 86 }
出典:左チェンユン先生「プログラマーコードインタビューガイド」