【剣指offer】と定値の2つの数
1630 ワード
タイトルの説明:
1つのインクリメンタルソートの配列と1つの数字Sを入力して、配列の中で2つの数を探して、はい彼らの和はちょうどSで、任意のペアを出力すればいいです
入力:
各テストケースには2つの行があります.最初のパラメータにはn個の整数配列が含まれ、各配列はNSNumberタイプです.配列の長さは1 M以内に制限される.2番目のパラメータには整数valueが含まれ、valueは2つの数の和を表します.
出力:
各テストケースに対応して、2つの数を出力し、小さな先出力を出力します.見つからない場合は「-1-1」を出力します.
アイデア:
クイックソートと同様に、両側の不合理な値を削除し、中央の値を検索し、右を検索してから左のコードを検索します.
+ (BOOL)equalSubWithArray:(NSArray *)array value:(NSInteger )value {
if (array == nil || array.count == 0) {
return false;
}
NSInteger left = 0;
NSInteger right = array.count - 1;
NSNumber *tempRightNumber = array[right];//
NSInteger tempRightValue = tempRightNumber.integerValue;
while (tempRightValue > value) {// , ,
--right;
tempRightNumber = array[right];
tempRightValue = tempRightNumber.integerValue;
}
NSNumber *tempLeftNumber = array[left];
NSInteger tempLeftValue = tempLeftNumber.integerValue;
while (tempLeftValue + tempRightValue < value) {//
++left;
tempLeftNumber = array[left];
tempLeftValue = tempLeftNumber.integerValue;
}
while (left < right) {
if (tempLeftValue + tempRightValue == value) {// ,
NSLog(@" %zu, %zu",tempLeftValue, tempRightValue);
return true;
} else if (tempLeftValue + tempRightValue > value) {//
--right;
} else {
++left;//
}
}
return false;
}
GitHub : https://github.com/XiaoChenYung/ArrowToOffer/blob/master/ArrowToOffer/EqualSum.m