2016-06-26 1 views
0

質問:配列のメッセージなしにKの値を計算

数字になります。

は、任意のメッセージを表示せずmyInterViewArrayにおけるKの値を探す/ Iは、このヒントを与えられた

を呼び出します決して1-9を超えない。

NSArray *myInterViewArray = @[@2,@1,@3,@9,@9,@8,@7];

例:

あなたは3を送信する場合、配列はmyInterViewArray * 3中3つの最大値を返します。だから、以下の例では、K = + 9,9 + 8

-

Iは、しばらく前にインタビューで、この質問をし、完全に困惑しました。

インタビューテストアレイ:

[self findingK:myInterViewArray abc:3];

-(int)findingK:(NSArray *)myArray abc:(int)k{ // With Reverse Object Enumerator 
myArray = [[[myArray sortedArrayUsingSelector:@selector(compare:)] reverseObjectEnumerator] allObjects]; 

int tempA = 0; 

for (int i = 0; i < k; i++) { 
    tempA += [[myArray objectAtIndex:i] intValue]; 
} 

k = tempA; 
return k; 
} 

しかし、どうやらそれはノーノー大きかった私は考えることができ最初のソリューションは、このような何かを見ました。彼らは私に、メッセージを使わずにKの価値を見出そうとしました。つまり、私はsortedArrayUsingSelector、さらにはreverseObjectEnumeratorを使用できませんでした。

今ポイント!

私はこれについてかなり考えていましたが、まだメッセージなしのアプローチは考えられません。誰にもアイデアはありますか?

+3

私はそれだけですか、プログラムが何をすべきかを本当に指定して結婚しましたか?それは何を見つけるはずですか? K?何? – luk2302

+0

混乱して申し訳ありません..私の編集が何かメッセージを使わずに@ luk2302 –

+0

をクリアすることを願っていますか? k個の最大値の加算を返します。あなたの説明はそれほど明確ではないので、 – Larme

答えて

2

ありそれを行うための唯一の方法であり、それは例えば、タイプのCFと、その後、プレーンCを使用するように配列をブリッジされています。ここでは

はうまくいくかもしれない何か値がNSNumberの場合は、その数値にアクセスするためのメッセージが引き続き必要になります。

ほとんどの場合、質問の著者はメッセージの概念について非常によく知っていませんでした。たぶん彼らは、サブスクリプティングとプロパティへのアクセスはメッセージや何か他のものではないと考えていたでしょう。

Obj-Cのオブジェクトをメッセージなしで使用することは不可能です。すべてのプロパティアクセス、すべてのメソッド呼び出し、すべてのメソッドの初期化はメッセージを使用して行われます。

質問を読んで、おそらくあなたは、ライブラリ関数を使用せずにアルゴリズムを実装することを望んでいました。 sort(たとえば、K-ヒープを実装し、このヒープを使用してforの繰り返しでK個の最高の数値を見つけることができます)。

+1

+1 "質問の著者は、メッセージの概念をよく知っていない可能性が最も高いです。"この種の質問はとても良いです。それはあなたがどのグループで作業したくないかを素早く示します。途中ですぐにそれを取り除き、より良いグループとインタビューすることができればうれしいです。 –

+0

これはあまり一般的ではありません。 * SE職場*にはいくつかの関連する質問があります。 http://workplace.stackexchange.com/questions/4314/how-to-tell-a-interviewer-that-he-is-wrong-on-a-technical-question – Sulthan

+0

@Sulthanあなたがアルゴリズム/ソート関数? –

0

元の配列を突然変異させることはできません。それ以外の場合、その制限は意味をなさない。しかし

NSArray *array = @[@1, @2, @3]; 
CFArrayRef cfArray = (__bridge CFArrayRef)(array); 

NSLog(@"%@", CFArrayGetValueAtIndex(cfArray, 0)); 

NSMutableArray *a = [NSMutableArray array]; 

for (NSNumber *num in array) { 
    BOOL shouldAdd = NO; 

    for (int i = a.count - 1; i >= k; i--) { 
     if ([a[i] intValue] < [num intValue]) { 
      shouldAdd = YES; 

      break; 
     } 
    } 

    if (shouldAdd) { 
     [a addObject:num]; 
    } 
} 

int result = a[a.count - k]; 
for (int i = k; k < a.count; k++) { 
    result += [a[i] intValue]; 
} 

return result; 
関連する問題