Java構文とアルゴリズム(hash 2)
知るところ
2つのマッピングが同じかどうかを比較します->equals
TreeSet
// 오름차순 및 내림 차순
TreeSet<Integer>treeSet=new TreeSet<>(); // 오름차순 정렬
TreeSet<Integer>treeSet=new TreeSet<>(Collections.reverseOrder()); // 내림차순
// TreeSet 인덱스 접근
첫번째와 마지막 값만 접근 가능
treeSet.first();
treeSet.last();
// 출력은?
// TreeSet은 기본적으로 인덱스가 없기 때문에 -> forEach를 통해서 값을 뽑아야 함
int i=0;
for (Integer s:treeSet) {
i++;
if (i==m) { //m번째 출력
answer=s;
}
}
nでr個を選択する方法
rにおけるドア用
// nPr 구하기 -> r중 for문을 돌면 됨
for (int i=0;i<n;i++) {
for (int j=i+1;j<n;j++) {
for (int k=j+1;k<n;k++) {
int hap=arr[i]+arr[j]+arr[k];
treeSet.add(hap);
}
}
}
に質問
解決策
コード1
public int solution(String str, String ans) {
int answer=0;
// 슬라이싱 윈도우 -> 초기값 설정
// String -> String []
String strArr[]=str.split("");
String ansArr[]=ans.split("");
int size=ans.length();
// arraylist에 넣기, 인덱스 접근하기 위해
// 초기값 3개만 들어감
// 초기값 -> 아나그램인지 검사
HashMap<String,Integer>hashMap=new HashMap<>();
HashMap<String,Integer>ansMap=new HashMap<>();
ArrayList<String>arrayList=new ArrayList<>();
for (int i=0;i<size;i++) {
arrayList.add(strArr[i]);
hashMap.put(strArr[i],hashMap.getOrDefault(strArr[i],0)+1);
ansMap.put(ansArr[i],ansMap.getOrDefault(ansArr[i],0)+1);
}
// 초기값 hashMap과 ansHashMap 비교 -> eqauls로 비교 가능
if (hashMap.equals(ansMap)) {
answer++;
}
// 슬라이싱 윈도우 -> for 문 이용
for (int i=size;i<str.length();i++) {
// 초기값 삭제
String temp=arrayList.remove(0);
int value=hashMap.get(temp)-1;
// 0이면 hashMap에서 지우기
if (value==0) {
hashMap.remove(temp);
}
else {
// 만약 그렇지 않으면 지운값 -> Map에 넣기
hashMap.put(temp,value);
}
// 자동으로 줄일수 있는 방법이 있는가?
// hashMap.put으로 넣지 말고?!
// 다음값을 더해준다.
String key=strArr[i];
arrayList.add(key);
// hashMap에도 더해준다
hashMap.put(key,hashMap.getOrDefault(key,0)+1);
// 아나그램 비교
if (hashMap.equals(ansMap)) {
answer++;
}
}
return answer;
}
コード2
public int solution2(String str, String ans) {
int answer=0;
String []strArr=str.split("");
String []ansArr=ans.split((""));
HashMap<String,Integer>hashMap=new HashMap<>();
HashMap<String,Integer>ansMap=new HashMap<>();
for (String s:ansArr) {
ansMap.put(s,ansMap.getOrDefault(s,0)+1);
}
// 초기에 슬라이싱 윈도우는 ans보다 1개 작은것 까지만 넣어줌
for (int i=0;i< ansArr.length-1;i++) {
hashMap.put(strArr[i],hashMap.getOrDefault(strArr[i],0)+1);
}
// 투포인터 및 슬라이싱 윈도우
int lt=0; // lt가 가리키는 것은 삭제할 인덱스를 가르킴
for (int rt=ansArr.length-1;rt< strArr.length;rt++) {
// 처음 값을 넣어줌
String key=strArr[rt];
hashMap.put(key,hashMap.getOrDefault(key,0)+1);
// 이 값이 ansMap이랑 같은지 비교
if (hashMap.equals(ansMap)) {
answer++;
}
// 초기 값 삭제
int value=hashMap.get(strArr[lt])-1;
if (value==0) {
hashMap.remove(strArr[lt]);
}
else {
hashMap.put(strArr[lt],value);
}
if (hashMap.equals(ansMap)) {
answer++;
}
// 다음 인덱스를 위해 lt 증가
lt++;
}
return answer;
}
問題2。
コード#コード#
public int solution(int n,int m,int arr[]) {
int answer=-1;
// TreeSet<Integer>treeSet=new TreeSet<>(); // 오름차순 정렬
TreeSet<Integer>treeSet=new TreeSet<>(Collections.reverseOrder()); // 내림차순
// nPr 구하기 -> r중 for문을 돌면 됨
for (int i=0;i<n;i++) {
for (int j=i+1;j<n;j++) {
for (int k=j+1;k<n;k++) {
int hap=arr[i]+arr[j]+arr[k];
treeSet.add(hap);
}
}
}
// TreeSet은 기본적으로 인덱스가 없기 때문에 -> forEach를 통해서 값을 뽑아야 함
int i=0;
for (Integer s:treeSet) {
i++;
if (i==m) {
answer=s;
}
}
return answer;
}
Reference
この問題について(Java構文とアルゴリズム(hash 2)), 我々は、より多くの情報をここで見つけました https://velog.io/@sds1vrk/자바-문법-및-알고리즘-hash-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol