プログラマー[Kakao]ジュエリーショッピング(Java)
リンク
質問リンク
問題の説明
開発者出身で世界一の金持ちになったApacheは、ストレスを解消するために実店舗で買い物をすることが多い.
魚桃は買い物をするとき、売り場の棚の特定の範囲のものを一掃することに慣れています.
ある日、ストレスを解消するためにジュエリーショップに買い物に行ったフィッチは、以前のように棚のすべての特定の範囲のジュエリーを購入し、特に以下の目的を達成したいと思っていました.
少なくとも1つ以上陳列されている宝石を含む最短区間を探して購入します.
例えば、以下に、8種類の宝石(RUBY、DIA、EMERALD、SAPPHIRE)を示す例を示す.
棚の3番から7番まで5つの宝石を購入し、すべての種類の宝石は少なくとも1つ以上含まれています.
棚の3、4、6、7番の宝石だけを購入すると、真ん中に特定の区間(5番)が欠け、魚の皮魚の買い物習慣に合わない.
パラメータは、ショーケース番号順に宝石名を格納する配列gemsです.この場合、1つ以上の宝石を含む最短区間を見つけて戻ります.
最短区間の開始棚番号と終了棚番号を順番にシーケンスに入れて返し、複数の最短区間がある場合は開始棚番号の最小区間を返します.
せいげんじょうけん
I/O例
I/O例説明
I/O例#1
問題の例を以下に示します.
I/O例#2
3種類の宝石(AA,AB,AC)を含む最短区間は[1,3],[2,4]である.
開始棚番号は、より小さな[1,3]を返さなければなりません.
I/O例#3
1種の宝石(XYZ)を含む最短領域は[1,1],[2,2]および[3,3]である.
開始棚番号は最小[1,1]を返さなければなりません.
I/O例#4
全4種の宝石(ZZZ,YY,NNN,BBB)を含む領域は[1,5]のみである.
したがって、[1,5]に戻る必要があります.
に答える
そのため、二重ポインタ技術は自然に現れた.
解决して后悔したら、必ずスケジュールを书いてください.
コード#コード#
import java.util.*;
class Solution {
public int[] solution(String[] gems) {
int[] answer = new int[2];
int jewel, i;
Map<String, Integer> jmap = new HashMap<>();
for(i = 0; i < gems.length; i++) {
if(jmap.get(gems[i]) == null)
jmap.put(gems[i], 1);
}
jewel = jmap.size();
Map<String, Integer> apmap = new HashMap<>();
int start = 0;
int end = 0;
int now = 0;
int sub = 1000001;
while(end < gems.length) {
for(; end < gems.length && now < jewel; end++)
{
apmap.put(gems[end], apmap.getOrDefault(gems[end], 0) + 1);
if(apmap.get(gems[end]) == 1)
now++;
}
for(; start < end && now == jewel; start++)
{
apmap.put(gems[start], apmap.get(gems[start]) - 1);
if(apmap.get(gems[start]) == 0)
now--;
}
if(sub > end - start) {
answer[0] = start;
answer[1] = end;
sub = end - start;
}
}
return answer;
}
}
Reference
この問題について(プログラマー[Kakao]ジュエリーショッピング(Java)), 我々は、より多くの情報をここで見つけました
https://velog.io/@qodlstjd12/프로그래머스-Kakao-보석-쇼핑-Java
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(プログラマー[Kakao]ジュエリーショッピング(Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@qodlstjd12/프로그래머스-Kakao-보석-쇼핑-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol