
長さ 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で質問しましょう!
似たような質問が見つかりました
- 数学 もしかして 7 2024/05/11 20:43
- C言語・C++・C# へんな現象 3 2024/05/18 15:49
- 数学 ほんとになんでうごくかわからない 4 2024/04/16 20:21
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- CGI めちゃきれい 2 2024/05/16 21:50
- Java Java・配列の問題です。 int 「」nums = new int「5」 ⤴︎ この5の事を言葉で 2 2023/06/21 22:30
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- 統計学 機械学習(最適化問題)のプログラムで、以下の2つの関数がどんな関数なのかご存知の方はおりますか? d 5 2022/06/23 00:35
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
DirectoryInfo型配列ソート(C#)
-
VBScriptで配列のソートをする...
-
C# DataGridView のヘッダーセ...
-
vbでDataTableの抽出コピー
-
VB.NETでファイル名順にファイ...
-
VB.NETでソートされたデータセ...
-
コレクションの数値をSortで並...
-
昇順ソート
-
EXCEL VBAのソートについて
-
DataGridViewの昇順降順。
-
Excel VBA テキストボックス内...
-
C言語でアナグラムを求めるプロ...
-
VBScriptで重複レコードを削除...
-
Excelですべての組合せ(重複組...
-
文字列をソートする方法
-
なぜ?counterintuitive
-
配列の問題
-
配列の中身を入れ替える方法を...
-
listboxの並び替え
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
VBA基本構文の作り方 2列の...
-
C言語・要素除去
-
C# DataTableの行をソートしてD...
-
VB.NETでファイル名順にファイ...
-
構造体配列の並べ替え
-
あるディレクトリ内のファイル...
-
配列の問題
-
10個の整数を入力して小さい順...
-
2次元配列を複数項目でソートし...
-
構造体のリストをソートしたい。
-
DataGridViewソート時に先頭行...
-
DataGridViewのソートを止めたい
-
datagridviewの並べ替え
-
C++ 入力した3つのint型の整数...
-
DataGridViewの複数列を連動し...
-
Excelですべての組合せ(重複組...
-
C#のリストボックスで、クリッ...
-
VBScriptで重複レコードを削除...
おすすめ情報
結局全ペアを見るから
更にそれは
足し算が可換だから
にboils down??