記事ディレクトリ
1. 35. 挿入位置の検索
1. トピックの紹介
35. 挿入位置の検索 ソート
された配列とターゲット値を指定して、配列内でターゲット値を見つけてそのインデックスを返します。ターゲット値が配列内に存在しない場合は、その値が順番に挿入される位置を返します。
時間計算量が O(log n) のアルゴリズムを使用してください。
2. 問題解決のアイデア
3.コード
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
while(left <= right)
{
int mid = left + (right - left) / 2;
if(nums[mid] < target)
{
left = mid + 1;
}
else if(nums[mid] > target)
{
right = mid - 1;
}
else
{
return mid;
}
}
return left;
}
};
4. 走行結果
2. 69. x の平方根
1. トピックの紹介
69. x の平方根
負でない整数 x を指定して、x の算術平方根を計算して返します。
戻り値の型が整数であるため、結果の整数部分のみが保持され、小数部分は四捨五入されます。
注: pow(x, 0.5) や x ** 0.5 などの組み込みの指数関数および演算子は使用できません。
2. 問題解決のアイデア
3.コード
class Solution {
public:
int mySqrt(int x) {
if(x < 1) return 0;
int left = 1, right = x;
while(left < right)
{
long long mid = left + (right - left + 1) / 2;
if(mid * mid <= x)
{
left = mid;
}
else
{
right = mid - 1;
}
}
return left;
}
};
4. 走行結果
3. 852. 山配列のピークインデックス
1. トピックの紹介
852. マウンテン配列のピークインデックス
次のプロパティを満たす配列 arr はマウンテン配列と呼ばれます:
arr.length >= 3
が存在し、次のような i (0 < i < arr.length - 1):
arr[0] < arr[ 1] < … arr[i-1] < arr[i]
arr[i] > arr[i+1] > … > arr[arr.length - 1] は、
整数で構成される山配列 arr を与え、arr を返します。 [0] < arr[1] < … arr[i - 1] < arr[i] > arr[i + 1] > … > arr[arr.length - 1] の添字 i。
時間計算量 O(log(n)) のソリューションを設計して実装する必要があります。
2. 問題解決のアイデア
3.コード
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int left = 1, right = arr.size() - 2;
while(left < right)
{
int mid = left + (right - left + 1) / 2;
if(arr[mid] > arr[mid - 1])//如果mid所处位置是上升的,则我们要在mid + 1~right区间寻找
{
left = mid;
}
else//如果mid所处位置是下降的,则我们要在left~mid-1区间寻找
{
right = mid - 1;
}
}
return left;
}
};
4. 走行結果
要約する
今日はアルゴリズム実習7日目です。
頑張って鉄杵を針状に磨く限り、頑張り続けてください!
質問元: LeetCode、著作権は LeetCode に属します。
この記事があなたにインスピレーションを与えたなら、著者をもっとサポートしていただければ幸いです。皆さん、ありがとう!