Map - [Java]
Map
コンセプト
検索Map形式->値,時間複雑度O(1)
ex) Map map = HashMap<>();
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
せいけい Map + String(getOrDefault()) Map + Array Map + Math.max Map + Set Map + Map Set + Set しゅつりょく map.keySet() map.entrySet() map.keySet().iterator()
1. Map + getOrDefault()
指定された文字列の最初の重複しない文字を検索し、Indexを返します.
存在しない場合は-1を返します.
Input : String s = "inflearninlove"
Output : 2
に答える文字列の各文字数(2文字以上の重複文字) を決定します.各文字数はMapに 格納される.文字列の長さで文を回転し、最初に1が現れる文字のインデックス を出力する.
ソース
自然数を持つ配列を返すときの周波数が最も高いk個の要素
Input : int[] nums = {1,1,2,2,2,3,5,5,5,5} , int k = 2
Output : [5, 2]
に答える map.getOrDefault()を使用して、各数の個数を格納します. 周波数のリスト<>に従って並べ替え、各周波数の対応する数字(キー)を加える. 抽出頻度は kの値です. 周波数リスト)0、1、2、3、4、5、6、7、8、9、10(nums長10)
value List) null, 1, 2, 3, 4, null, null, null, null, null, null
key List) null, 3, 1, 2, 5, null, null, null, null, null, null
ソース
コンセプト
検索Map
ex) Map
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
せいけい
for (Integer key : map.keySet()) {
System.out.println("key : " + key + " value : " + map.get(key));
}
for (Map.Entry<Integer, String> element : map.entrySet()) {
System.out.println("key : " + element.getKey() + " value : " + element.getValue());
}
Iterator<Integer> keys = map.keySet().iterator();
while (keys.hasNext()) {
Integer key = keys.next();
System.out.println("key : " + key + " value : " + map.get(key));
}
質問する1. Map + getOrDefault()
指定された文字列の最初の重複しない文字を検索し、Indexを返します.
存在しない場合は-1を返します.
Input : String s = "inflearninlove"
Output : 2
に答える
ソース
public class Q1 {
public static void main(String[] args) {
String s = "inflearninlove";
System.out.println(solve(s));
}
public static int solve(String s) {
if (s == null || s.length() == 0) {
return -1;
}
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (char ch : s.toCharArray()) {
// 1
map.put(ch, map.getOrDefault(ch, 0) + 1);
// 2
// if (!map.containsKey(ch)) {
// map.put(ch, 1);
// } else {
// map.put(ch, map.get(ch) + 1);
// }
}
for (int i = 0; i < s.length(); i++) {
if (map.get(s.charAt(i)) == 1) {
return i;
}
}
return -1;
}
}
2. Map + Array自然数を持つ配列を返すときの周波数が最も高いk個の要素
Input : int[] nums = {1,1,2,2,2,3,5,5,5,5} , int k = 2
Output : [5, 2]
に答える
value List) null, 1, 2, 3, 4, null, null, null, null, null, null
key List) null, 3, 1, 2, 5, null, null, null, null, null, null
ソース
public class Q2 {
public static void main(String[] args) {
int[] nums = { 1, 1, 2, 2, 2, 2, 3, 5, 5, 5, 5 };
int k = 2;
System.out.println(solve(nums, k));
}
public static List<Integer> solve(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
List<Integer>[] list = new List[nums.length + 1];
List<Integer> result = new ArrayList<>();
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
for (int key : map.keySet()) {
int topFreq = map.get(key);
if (list[topFreq] == null) {
list[topFreq] = new ArrayList<Integer>();
}
list[topFreq].add(key);
}
for (int lastIndex = list.length - 1; lastIndex >= 0; lastIndex--) {
if (list[lastIndex] != null) {
// System.out.println(list[lastIndex]);
for (int i = 0; i < list[lastIndex].size() && result.size() < k; i++) {
result.add(list[lastIndex].get(i));
}
}
}
return result;
}
}
リファレンス인프런 강의 : 코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바) - 푸샵맨 코딩스터디
Reference
この問題について(Map - [Java]), 我々は、より多くの情報をここで見つけました https://velog.io/@minuk1236/Map-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol