質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1051閲覧

競プロ、ソートの問題わかりません

MycoChild

総合スコア36

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/11/22 10:33

編集2021/11/22 11:00

Codilityというサイトの以下の問題がわかりません

平面上にN個の円盤を描きます。円盤には0からN - 1までの番号が振られている。円盤の半径を指定するN個の非負の整数の配列Aが与えられる。J番目の円盤は中心が(J, 0)で半径がA[J]となるように描かれる。J番目の円盤とK番目の円盤が交差するのは、J≠Kで、J番目とK番目の円盤に少なくとも1つの共通点があるときである(円盤には境界線が含まれていると仮定する)。下の図は、N=6、Aを次のようにして描いた円盤である。イメージ説明

A[0] = 1 A[1] = 5 A[2] = 2 A[3] = 1 A[4] = 4 A[5] = 0交差する円盤の組は、円盤1と円盤4が交差し、両方とも他のすべての円盤と交差する、円盤2も円盤0と円盤3と交差する、という11組(順不同)である。上記のようにN個の円盤を記述した配列Aが与えられたとき、交差する円盤の(順不同の)ペアの数を返す関数def solution(A)を書きなさい。この関数は、交差するペアの数が10,000,000を超える場合には-1を返すべきである。上に示した配列Aが与えられた場合、この関数は上で説明したように11を返すべきである。以下の仮定に対する効率的なアルゴリズムを書け。Nは[0...100,000]の範囲の整数、配列Aの各要素は[0...2,147,483,647]の範囲の整数である。

My Answer

Python

1def solution(A): 2 # write your code in Python 3.6 3 ans=0 4 pairs=[] 5 r=[[0 for j in range(2)] for i in range(len(A))] 6 for i,a in enumerate(A): 7 r[i][0]=i+a 8 r[i][1]=i-a 9 R=sorted(r,reverse=True) 10 #print(R) 11 for i in range(len(A)): 12 maxr=R[i][0] 13 minr=R[i][1] 14 for j in range(len(A)-1,i,-1): 15 #print("j=",j) 16 if R[j][0]<=maxr and R[j][0]>=minr: 17 pairs.append((j,i)) 18 #print(len(pairs)) 19 ans=len(pairs) 20 if ans>10000000: 21 return -1 22 #print(len(pairs)) 23 return ans 24

N^2でタイムオーバーになります。教えていただけませんか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こちらのリンク先の手法の応用で解けます。
C言語 直線状の線分の重複回数を求めるアルゴリズム
一次元領域の重なり検出のアルゴリズムについての質問です。
区間スケジューリング問題の類似問題

数直線の左から見ていって、円の左端が現れた場合、その円と、その位置で重なっている別の円とが、すべて交差することが分かります。その位置で重なっている別の円の数は、上記手法で分かります。

投稿2021/11/22 12:53

編集2021/11/22 23:12
actorbug

総合スコア2431

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問