LeetCode配列コラム:35.挿入位置の検索(C版)
2159 ワード
トピックの説明:ソート配列とターゲット値を指定し、配列内でターゲット値を見つけ、インデックスを返します.ターゲット値が配列に存在しない場合は、順番に挿入される位置を返します.配列に重複要素がないと仮定できます.
例1:
入力:[1,3,5,6]、5出力:2
例2:
入力:[1,3,5,6]、2出力:1
例3:
入力:[1,3,5,6]、7出力:4
例4:
入力:[1,3,5,6]、0出力:0
この問題は特に簡単で、たくさんの解法があります.1.二分検索:指定された配列が順序付けされているため、二分検索が優先され、二分検索に失敗すると、最後のhead値がその要素が挿入される位置となります.複雑度解析:時間複雑度:O(logn)空間複雑度:O(1)
2.スキャン法:配列を前から後ろにスキャンし、nums[i]とtargetの値を比較し、nums[i]>=targetになると、直接returniする.複雑度解析:時間複雑度:O(n)空間複雑度:O(1)
例1:
入力:[1,3,5,6]、5出力:2
例2:
入力:[1,3,5,6]、2出力:1
例3:
入力:[1,3,5,6]、7出力:4
例4:
入力:[1,3,5,6]、0出力:0
この問題は特に簡単で、たくさんの解法があります.1.二分検索:指定された配列が順序付けされているため、二分検索が優先され、二分検索に失敗すると、最後のhead値がその要素が挿入される位置となります.複雑度解析:時間複雑度:O(logn)空間複雑度:O(1)
int searchInsert(int* nums, int numsSize, int target) {
int head = 0,rear = numsSize-1;
int mid = (head+rear)/2;
while(head<=rear){
if(target>nums[mid]) head = mid+1;
else if(targetmid]) rear = mid-1;
else return mid;
mid = (head+rear)/2;
}
return head;
}
2.スキャン法:配列を前から後ろにスキャンし、nums[i]とtargetの値を比較し、nums[i]>=targetになると、直接returniする.複雑度解析:時間複雑度:O(n)空間複雑度:O(1)
int searchInsert(int* nums, int numsSize, int target) {
for(int i=0;iif(nums[i]>=target)
return i;
}
return numsSize;
}