第169场周赛

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;
    }
}

最后一道困难的题目,有空的时候我再捡起来做一下,这里偷个懒。

发布了21 篇原创文章 · 获赞 10 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Tracy_Yuan2014/article/details/103796513