Leetcode (Two Sum)

2262 ワード

整数配列とターゲット値を指定し、配列とターゲット値の2つの数を見つけます.入力ごとに1つの答えしか対応せず、同じ要素が再利用できないと仮定できます.
   nums = [2, 7, 11, 15], target = 9
   nums[0] + nums[1] = 2 + 7 = 9
     [0, 1]
class Solution {
public:
     vector twoSum(vector& nums, int target) {
        vector num;
        for(int i=0;i

 
 
vector twoSum(vector& nums, int target) {}
これは関数形式です.戻り値関数名(パラメータテーブル){関数体}戻り値はvectorでvector、関数名はtwoSum、パラメータテーブルには2つのパラメータが表示されます.最初のパラメータはvector&numbers(このパラメータのタイプはvector、パラメータの伝達方法は参照).2番目のパラメータはint targetです(このパラメータのタイプはintであり、パラメータの伝達方法は伝達値である).
vectorは、可変サイズ配列を表すシーケンスコンテナです.
配列のようにvectorも要素を格納するために連続的なストレージ空間を採用しています.すなわち、vectorの要素には、配列と同様に効率的にアクセスできることを意味します.しかし配列とは異なり、その大きさは動的に変化し、コンテナによって自動的に処理されます.
本質的には、vectorは動的割り当て配列を使用して要素を格納します.新しい要素が挿入されると、この配列はストレージスペースを増やすためにサイズを再割り当てする必要があります.新しい配列を割り当て、すべての要素をこの配列に移動します.時間的には、新しい要素がコンテナに追加されるたびにvectorが毎回サイズを再割り当てしないため、比較的コストの高いタスクです.
vector割り当て領域ポリシー:vectorは、実際に必要とされるストレージ領域よりもストレージ領域が大きいため、可能な増加に適応するために追加の領域を割り当てます.異なるライブラリは、異なるポリシーを使用して空間の使用と再割り当てを比較します.しかし、いずれにしても、再割り当ては、最後に要素を挿入するときに定数時間の複雑さで完了するように、対数的に増加する間隔の大きさであるべきである.
従ってvectorは、より多くの記憶領域を占有し、記憶領域を管理する能力を得るために、効率的な方法で動的に増加する.
他の動的シーケンスコンテナ(deques,lists and forward_lists)に比べて、vectorは要素にアクセスする際に効率的であり、最後に要素を追加および削除するのが比較的効率的である.最後にない他の削除および挿入操作に対しては効率的ではない.listsとforward_listsが統一された反復器および参照よりも優れている.
要素を追加する方法は主に3つあります:push_back()、insert()、assign()です.
最も一般的な方法はpush_です.back()は、vectorの末尾に新しい要素を挿入する役割を果たします.Insert()の最初のパラメータは反復器であり、反復器の前に新しい要素を挿入するように作用します.assign(5,1)はvectorに5つの1を加え,以前の要素を除去する.
vector内の要素を巡回する方法は主に2つあり、1つは下付き演算子で要素にアクセスし、1つは反復器でアクセスします.
下付きで遍歴する
for(int i=1;i

反復アクセス
vector::iterator it;
for(it=vec.begin();it!=vec.end();it++){
    cout<

vectorの要素を削除する方法:
pop_back()は、最後の要素を削除できます.erase()は、iteratorによって指定された要素を削除したり、指定された範囲の要素を削除したりすることができます.clear()メソッドは、すべての要素を空にすることができます.汎用アルゴリズムremove()を使用してvectorコンテナの要素を削除することもできます.