
長さ n の 0 から始まる整数配列 nums と整数ターゲットを指定すると、0 <= i < j < n および nums[i] + nums[j] < target であるペア (i, j) の数を返します。
私は
return sum(nums[i] + nums[j] < t for i in range(len(nums)-1) for j in range(i+1, len(nums)))
のようなnaive な実装をした。
でもソートしてからtwo pointersでやってるひとがおおかった。ソートしたら順番がずれるからインデックスは??っておもってそんなこと考えなかった。なんでソートしちゃっても良いんですか?????
No.5ベストアンサー
- 回答日時:
i < j という条件は (i, j) = (2, 3) と (3, 2) というように、同じ要素の組み合わせを重複して取り出すのを防ぐためでしょう。
順列ではなく組み合わせでデータを取り出すときの常とう手段です。データの順番は関係ありません。
例えば 1~10 が書いてあるカードを100枚用意したとき
かいてある数字の和が 5 未満になるカードの組み合わせ数は
カードの順番を変えても変わりませんよね。変わったら驚愕です。
nums[i] + nums[j] < t
という条件の性質上、nums がソートされていると j が増えてゆくと
nums[j] も増えてゆきますから、j のループは
nums[i] + nums[j] < t が False になった時に打ち切ることができます。
sort の処理量は O(nlogn)
組み合わせを取り出す処理量は O(n^2)
ですから、n が十分大きければ sort の処理量は無視できるでしょう。
とすると、組み合わせを取り出す処理量 を端折れた方が
有利になりそうです。特に t が小さいときは効果絶大でしょう。
No.4
- 回答日時:
i<j
nums[i] + nums[j] < target であるペア (i, j) の数
は
i<j
nums[i] + nums[j] < target であるペア (nums[i],nums[j]) の数
と
同じで
i<j
nums[i] + nums[j] < target であるペア (nums[i],nums[j]) の数
は
ソートしても
変わらないから
ソートしてもよい
例えば
target=4
で
nums[i] + nums[j] < target であるペア(nums[i],nums[j])の数は
nums[]={1,2,3}の場合1+2<4だから(1,2)の1つ
nums[]={1,3,2}の場合1+2<4だから(1,2)の1つ
nums[]={2,1,3}の場合2+1<4だから(2,1)の1つ
nums[]={2,3,1}の場合2+1<4だから(2,1)の1つ
nums[]={3,1,2}の場合1+2<4だから(1,2)の1つ
nums[]={3,2,1}の場合2+1<4だから(2,1)の1つ
のように順序を入れ替えてもすべて同じになる
ありがとうございます。やっぱりわたしの最初のであつてましたね☻
つまりターケっと以下のペア任意に選んでインデックスの前後関係こうなってるねっていうだけだから。
No.3
- 回答日時:
i<j
nums[i] + nums[j] < target であるペア (i, j) の数
は
i<j
nums[i] + nums[j] < target であるペア (nums[i],nums[j]) の数
と
同じだから
ソートしてもよい
例えば
target=4
で
nums[i] + nums[j] < target であるペア(nums[i],nums[j])の数は
nums[]={1,2,3}の場合1+2<4だから(1,2)の1つ
nums[]={1,3,2}の場合1+2<4だから(1,2)の1つ
nums[]={2,1,3}の場合2+1<4だから(2,1)の1つ
nums[]={2,3,1}の場合2+1<4だから(2,1)の1つ
nums[]={3,1,2}の場合1+2<4だから(1,2)の1つ
nums[]={3,2,1}の場合2+1<4だから(2,1)の1つ
ありがとうございますでも、
nums[i] + nums[j] < target であるペア (i, j) の数
は
i<j
nums[i] + nums[j] < target であるペア (nums[i],nums[j]) の数
と
同じだから
は帰結をなにも出してないと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbでDataTableの抽出コピー
-
PHP MySQL自動連番で削除された...
-
C言語において、 配列要素をひ...
-
C言語 配列の長さの上限
-
C++で、メンバもヒープに確保さ...
-
ポインタに ~0を入れること
-
x64環境で連続4GB以上のメモリ...
-
VBを2008を用いてCSVを取り込む...
-
Visual Basic 6.0 と8.0と2015
-
配列を返り値、でエラー
-
9枚の写真がA4 1枚に印刷できま...
-
aspでユーザー定義の構造体を作...
-
配列で格納したものをmsgboxで...
-
c言語
-
【速いブラインドタッチ】手を...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
RGB値を画像(PNG・BMPJPEGなど)...
-
関数のパラメタ(C++)
-
関数から配列を返すには?
-
CopyMemory()をmemcpy()に書き...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
あるディレクトリ内のファイル...
-
VBA基本構文の作り方 2列の...
-
VB.NETでファイル名順にファイ...
-
ファイル名「1.jpg ~10.jpg~...
-
C# DataTableの行をソートしてD...
-
Excelですべての組合せ(重複組...
-
DataGridViewソート時に先頭行...
-
構造体配列のソート
-
バブルソートとセレクションソ...
-
VB2005 符号を踏まえた降順ソ...
-
DataGridViewの複数列を連動し...
-
Verilog でのソートの仕方
-
datagridviewの並べ替え
-
2次元配列を複数項目でソートし...
-
VBScriptで重複レコードを削除...
-
GridViewで列のソートを無効に...
-
4番目以降の並べ替え
-
DataGridViewの昇順降順。
おすすめ情報
結局全ペアを見るから
更にそれは
足し算が可換だから
にboils down??