diff --git a/construct-binary-tree-from-preorder-and-inorder-traversal/f-exuan21.java b/construct-binary-tree-from-preorder-and-inorder-traversal/f-exuan21.java new file mode 100644 index 000000000..12be66629 --- /dev/null +++ b/construct-binary-tree-from-preorder-and-inorder-traversal/f-exuan21.java @@ -0,0 +1,50 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } + * } + */ + + // time : O(n) + // space : O(n) + // n은 트리 노드 수 + + class Solution { + + private int i = 0; + Map map = new HashMap<>(); + + public TreeNode buildTree(int[] preorder, int[] inorder) { + + for(int i = 0; i < inorder.length; i++) { + map.put(inorder[i], i); + } + + return build(preorder, inorder, 0, inorder.length); + + } + + private TreeNode build(int[] preorder, int[] inorder, int start, int end) { + if(i >= preorder.length || start >= end) { + return null; + } + + int value = preorder[i++]; + int index = map.get(value); + + TreeNode leftTreeNode = build(preorder, inorder, start, index); + TreeNode rightTreeNode = build(preorder, inorder, index+1, end); + + return new TreeNode(value, leftTreeNode, rightTreeNode); + } + +} diff --git a/counting-bits/f-exuan21.java b/counting-bits/f-exuan21.java new file mode 100644 index 000000000..35ecac809 --- /dev/null +++ b/counting-bits/f-exuan21.java @@ -0,0 +1,18 @@ +//time : O(n) +//space : O(n) + +class Solution { + + // f(n) = f(n >> 1) + (n & 1) + + public int[] countBits(int n) { + int[] answer = new int[n + 1]; + + answer[0] = 0; + for(int i = 1; i <= n; i++) { + answer[i] = answer[i >> 1] + (i & 1); + } + + return answer; + } +} diff --git a/valid-anagram/f-euxan21.java b/valid-anagram/f-euxan21.java new file mode 100644 index 000000000..0e9a90493 --- /dev/null +++ b/valid-anagram/f-euxan21.java @@ -0,0 +1,24 @@ +// time : O(n) +// space : O(1) + +class Solution { + public boolean isAnagram(String s, String t) { + + if(s.length() != t.length()) return false; + + int[] charCount = new int[26]; + + for(int i = 0; i < s.length(); i++) { + charCount[s.charAt(i) - 'a']++; + charCount[t.charAt(i) - 'a']--; + } + + for(int i : charCount) { + if(i != 0) { + return false; + } + } + + return true; + } +}