1304. 和为零的N个唯一整数
class Solution {
public int[] sumZero(int n) {
int [] res = new int[n];
for(int i=0;i<n/2;i++){
res[i * 2]=i+1;
res[i * 2 + 1]=-(i+1);
}
return res;
}
}
1305. 两棵二叉搜索树中的所有元素
一开始想复杂了,参考了别人写的代码,用了优先队列,降低了难度
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
PriorityQueue<Integer> priorityQueue = new PriorityQueue<Integer>();
getOneRoot(root1,priorityQueue);
getOneRoot(root2,priorityQueue);
List<Integer> lists = new ArrayList<Integer>();
while(!priorityQueue.isEmpty()){
lists.add(priorityQueue.poll());
}
return lists;
}
public void getOneRoot(TreeNode root,PriorityQueue<Integer> priorityQueue){
if(root==null){
return;
}
priorityQueue.offer(root.val);
getOneRoot(root.left,priorityQueue);
getOneRoot(root.right,priorityQueue);
}
}
1306. 跳跃游戏 III
这个题目一看肯定是想到要用广度遍历,然后另外一点就是使用一个数字标记该点是否被访问过,因为如果访问过,再访问这个点,走的路径是一样的,所以没必要再访问它,直接return就好了。
class Solution {
int length = 0;
boolean [] visited;
public boolean canReach(int[] arr, int start) {
length = arr.length;
visited = new boolean[length];
bfs(arr,start);
for(int i=0;i<length;i++){
if(arr[i]==0){
if(visited[i]==true){
return true;
}
}
}
return false;
}
public void bfs(int [] arr, int curr){
if(visited[curr]==true){
return;
}
visited[curr]=true;
if(arr[curr]==0){
return;
}
if((curr+arr[curr]>=0 )&& (curr+arr[curr]<length)){
bfs(arr,curr+arr[curr]);
}
if((curr-arr[curr]>=0 )&& (curr-arr[curr]<length)){
bfs(arr,curr-arr[curr]);
}
return;
}
}
最后一道困难的题目,有空的时候我再捡起来做一下,这里偷个懒。