1509 Minimum Difference Between Largest and Smallest Value in Three Moves
- 문제 요약: 배열에서 최대 3개까지 변경해서, 배열 안의 최대값과 최소의 차이가 최소가 되게 만들기. (즉, 3개 지워서, 최소와 최대 차이 최소로 만들기)
Input: [5,3,2,4]
Output: 0
이유: 아무 값으로 나머지를 바꾼다.
Input: [1,5,0,10,14] // 0 1 5 10 14
Output: 1
이유: 0 or 1로 [5, 10, 14]를 바꾼다
Input: [6,6,0,1,1,4,6]
Output: 2
이유: 4로 바꾼다.
Input: [1,5,6,14,15]
Output: 1
- 4가지만 고려 링크
- kill 3 biggest elements
- kill 2 biggest elements + 1 smallest elements
- kill 1 biggest elements + 2 smallest elements
- kill 3 smallest elements
1 1 1 1 1 1
11 1 1111 1
1 1 1111 1 1
1 1 1 1 1 1
public int minDifference2(int[] nums) {
if (nums.length < 5) return 0;
Arrays.sort(nums);
int min = Integer.MAX_VALUE;
for (int i = 4; i > 0; --i) {
min = Math.min(min, nums[nums.length - i] - nums[4 - i]);
}
return min;
}
1110 Delete Nodes And Return Forest
private Set<Integer> to_delete_set;
private List<TreeNode> res;
public List<TreeNode> delNodes1(TreeNode root, int[] to_delete) {
to_delete_set = new HashSet<>();
res = new ArrayList<>();
for (int i : to_delete)
to_delete_set.add(i);
helper1(root, true);
return res;
}
private TreeNode helper1(TreeNode node, boolean is_root) {
if (node == null) return null;
boolean deleted = to_delete_set.contains(node.val); // flag 사용
if (is_root && !deleted) res.add(node);
node.left = helper1(node.left, deleted);
node.right = helper1(node.right, deleted);
return deleted ? null : node;
}
// 솔루션 2: flag 사용 안한 코드
// 이유: not necessary, root 노드만 사용함 (확인 필요)
public List<TreeNode> delNodes2(TreeNode root, int[] to_delete) {
Set<Integer> set = new HashSet<>();
for (int i : to_delete) set.add(i);
List<TreeNode> res = new ArrayList<>();
if (!set.contains(root.val)) res.add(root);
dfs2(root, set, res);
return res;
}
private TreeNode dfs2(TreeNode node, Set<Integer> set, List<TreeNode> res) {
if (node == null) return null;
node.left = dfs2(node.left, set, res);
node.right = dfs2(node.right, set, res);
if (set.contains(node.val)) {
if (node.left != null) res.add(node.left);
if (node.right != null) res.add(node.right);
return null;
}
return node;
}