File tree Expand file tree Collapse file tree 3 files changed +115
-0
lines changed
Expand file tree Collapse file tree 3 files changed +115
-0
lines changed Original file line number Diff line number Diff line change 1+ import java .util .HashSet ;
2+ import java .util .Set ;
3+
4+
5+ class Solution {
6+
7+ /**
8+ *
9+ * Set ํ๋จ์ผ๋ก O(n)
10+ *
11+ * */
12+ public boolean containsDuplicate (int [] nums ) {
13+
14+ Set <Integer > set = new HashSet <>();
15+
16+ for (int num : nums ) {
17+
18+ boolean isAdded = set .add (num );
19+
20+ if (!isAdded ) {
21+ return true ;
22+ }
23+ }
24+
25+ return false ;
26+
27+ }
28+ }
Original file line number Diff line number Diff line change 1+ import java .util .ArrayList ;
2+ import java .util .HashMap ;
3+ import java .util .List ;
4+ import java .util .Map ;
5+
6+ class Solution {
7+
8+
9+ // priority queue ๋ก ํ์ด๋ณด๊ธฐ
10+ public int [] topKFrequent (int [] nums , int k ) {
11+
12+ // ๋น๋์๋ฅผ ์
13+ Map <Integer , Integer > freqMap = new HashMap <>();
14+ for (int num : nums ) {
15+ freqMap .put (num , freqMap .getOrDefault (num , 0 ) + 1 );
16+ }
17+
18+ // ๊ฐฏ์๋งํผ ๋ฐฐ์ด ์์ฑ (๋น๋์๋ฅผ ์ธ๋ฑ์ค๋ก ๊ฐ์ง๋)
19+ List <Integer >[] bucket = new List [nums .length + 1 ]; // freq๋ ์ต๋ nums.length
20+ for (int i = 0 ; i < bucket .length ; i ++) {
21+ bucket [i ] = new ArrayList <>();
22+ }
23+
24+ for (Map .Entry <Integer , Integer > entry : freqMap .entrySet ()) {
25+ int num = entry .getKey ();
26+ int freq = entry .getValue ();
27+ bucket [freq ].add (num );
28+ }
29+
30+ // ๋น๋์๊ฐ ๋์ ๋ค์์๋ถํฐ ๋ฃ์ด์ค
31+ List <Integer > result = new ArrayList <>();
32+ for (int i = bucket .length - 1 ; i >= 0 && result .size () < k ; i --) {
33+ if (!bucket [i ].isEmpty ()) {
34+ result .addAll (bucket [i ]);
35+ }
36+ }
37+
38+ // k๊ฐ๋ง ๋ฐํ
39+ return result .subList (0 , k ).stream ().mapToInt (i -> i ).toArray ();
40+ }
41+ }
Original file line number Diff line number Diff line change 1+ import java .util .HashMap ;
2+ import java .util .Map ;
3+
4+ class Solution {
5+ /**
6+ * ๋ฐฐ์ด์ ์์ 2๊ฐ๋ฅผ ๋ํด์ target ์ซ์๋ค์ ๋ง๋ค๊ณ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ
7+ * ๊ฐ์ ์ซ์๋ฅผ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ ์ ์๊ณ , ํด๋ต์ ๋ฐ๋์ ์กด์ฌํจ
8+ * Follow-up: Can you come up with an algorithm that is less than O(n^2) time complexity?
9+ */
10+
11+ /*
12+ // naive ํ ํ์ด๋ฒ. O(n^2)
13+ public int[] twoSum(int[] nums, int target) {
14+ // naive ํ ๋ฐฉ๋ฒ: ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ซ์๊ฐ ์๋์ง ์ฐพ์
15+ for (int i=0; i<nums.length-1; i++) {
16+ for (int k=i+1; k<nums.length; k++) {
17+ if (nums[i] + nums[k] == target) {
18+ return new int[]{i,k};
19+ }
20+ }
21+ }
22+ return new int[]{};
23+ }
24+ */
25+
26+
27+ // ์ฒ์์ Map<Integer, List<Integer>>๋ผ๊ณ ์๊ฐํ์ง๋ง ๊ทธ๋ฅ Integer, Integer๋ก ๊ฐ๋ฅํจ
28+ public int [] twoSum (int [] nums , int target ) {
29+
30+ Map <Integer , Integer > map = new HashMap <>();
31+
32+ for (int i = 0 ; i < nums .length ; i ++) {
33+
34+ int needValue = target - nums [i ];
35+ if (map .containsKey (needValue )) {
36+ return new int []{map .get (needValue ), i };
37+ }
38+ map .put (nums [i ], i ); // ํญ์ ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๋์ค์ ์ ์ฅ
39+
40+ }
41+
42+ return new int []{}; // ์ ๋ ๋๋ฌํ์ง ์์ (๋ฌธ์ ์กฐ๊ฑด์ ์ ๋ต์ด ํญ์ ์กด์ฌ)
43+
44+ }
45+
46+ }
You canโt perform that action at this time.
0 commit comments