C++プログラムで配列内の「不動点」(インデックスと等しい値)を見つける方法
このチュートリアルでは、次の問題を解決していきます。
与えられた配列の中から、その値がインデックス(添字)と一致する要素を探すという問題です。非常にシンプルな内容ですが、配列操作の基礎を学ぶのに最適な題材です。
解き方はシンプルで、配列を先頭から順番に走査し、配列の要素がそのインデックスと一致する箇所を見つけたら、そのインデックスを返すだけです。
サンプルコード
それでは、実際のコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
int linearSearch(int arr[], int n) {
for(int i = 0; i < n; i++) {
if(arr[i] == i) {
return i;
}
}
return -1;
}
int main() {
int arr[] = {10, 20, 30, 40, 50, 5, 60};
cout << linearSearch(arr, 7) << endl;
return 0;
}出力結果
上記のコードを実行すると、以下の結果が得られます。
5
コードの解説
このプログラムでは線形探索を使用しています。配列 {10, 20, 30, 40, 50, 5, 60} の場合、インデックス5の位置にある値が5であるため、「5」が出力されます。該当する要素が存在しない場合は -1 を返す仕組みになっています。
計算量は O(n) となり、配列のサイズに比例して処理時間が増加します。なお、配列がソート済みの場合は二分探索を応用することで、O(log n) まで計算量を削減できる可能性があります。
まとめ
このチュートリアルについて不明な点や質問がある場合は、コメント欄でお気軽にお知らせください。
-
C++で括弧文字列からイコールポイント(等分点)を見つける方法
この記事では、C++を使って括弧の文字列からイコールポイント(等分点)を求める方法を解説します。 イコールポイントとは? イコールポイントとは、あるインデックス i において、その位置より前にある開き括弧「(」の数と、その位置以降にある閉じ括弧「)」の数が等しくなる地点のことです。 例として、次の括弧文字列を考えてみましょう。 (()))( ()()() )) ) → 元の文字列は (()))(()()()))) この文字列を詳しく観察すると、インデックス0〜9の範囲に含まれる開き括弧は5個、インデックス9〜14の範囲に含まれる閉じ括弧も5個あります。したがって、インデックス9がこの文字列の
-
Pythonで有界配列の指定インデックスにおける最大値を二分探索で求める方法
この記事では、3つの整数 n、index、maxSum が与えられたとき、条件を満たす配列 nums の中で nums[index] の最大値を求める問題をPythonで解く方法を解説します。問題の条件配列 nums は以下の条件をすべて満たす必要があります。nums のサイズは n であるnums のすべての要素は正の整数であるすべての i(0 <= i < n-1)に対して |nums[i] - nums[i+1]| <= 1 が成り立つnums の全要素の合計は maxSum を超えないnums[index] を最大化する入力例と出力例たとえば、n = 6、index