• leetcode 563


    563. Binary Tree Tilt

    Input: 
             1
           /   
          2     3
    Output: 1
    Explanation: 
    Tilt of node 2 : 0
    Tilt of node 3 : 0
    Tilt of node 1 : |2-3| = 1
    Tilt of binary tree : 0 + 0 + 1 = 1
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        int findTilt(TreeNode* root) {
            if(root == NULL) return 0;
            
            int res = 0;
            
            postorder(root, res);
            
            return res;
        }
    private:
        int postorder(TreeNode* root, int& res){
            if(root == NULL) return 0;
            
            int leftsum= postorder(root->left,res);
            
            int rightsum = postorder(root->right,res);
            
            res += abs(leftsum - rightsum);
            
            return leftsum + rightsum + root->val;
            
        }
    };  

    566. Reshape the Matrix

    class Solution {
    public:
        vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
            int m = nums.size(), n = nums[0].size(), o = m * n;
            if (r * c != o) return nums;
            vector<vector<int>> res(r, vector<int>(c, 0));
            for (int i = 0; i < o; i++) res[i / c][i % c] = nums[i / n][i % n];
            return res;
        }
    };

    572. Subtree of Another Tree

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
        vector<TreeNode*> nodes;
    
    public:
        bool isSubtree(TreeNode* s, TreeNode* t) {
            if (!s && !t) return true;
            if (!s || !t) return false;
    
            getDepth(s, getDepth(t, -1));
    
            for (TreeNode* n: nodes)
                if (identical(n, t))
                    return true;
    
            return false;
        }
    
        int getDepth(TreeNode* r, int d) {
            if (!r)
                return -1;
    
            int depth = max(getDepth(r->left, d), getDepth(r->right, d)) + 1;
    
            // Check if depth equals required value
            // Require depth is -1 for tree t (only return the depth, no push)
            if (depth == d)  //递归回去得时候,从树下开始记达到深度位d时记下
                nodes.push_back(r);
    
            return depth;
        }
    
        bool identical(TreeNode* a, TreeNode* b) {
            if (!a && !b) return true;
            if (!a || !b || a->val != b->val) return false;
    
            return identical(a->left, b->left) && identical(a->right, b->right);
        }
    };

    581. Shortest Unsorted Continuous Subarray

    Input: [2, 6, 4, 8, 10, 9, 15]
    Output: 5
    Explanation: You need to sort [6, 4, 8, 10, 9] in ascending order to make the whole array sorted in ascending order.
    class Solution {
        public int findUnsortedSubarray(int[] A) {
        int n = A.length, beg = -1, end = -2, min = A[n-1], max = A[0];
        for (int i=1;i<n;i++) {
          max = Math.max(max, A[i]);
          min = Math.min(min, A[n-1-i]);
          if (A[i] < max) end = i;
          if (A[n-1-i] > min) beg = n-1-i; 
        }
        return end - beg + 1;
    }
    }

    594. Longest Harmonious Subsequence

    Input: [1,3,2,2,5,2,3,7]
    Output: 5
    Explanation: The longest harmonious subsequence is [3,2,2,2,3].
    int findLHS(vector<int>& nums) {
            unordered_map<int,int>m;
            for(auto i: nums)
                m[i]++;
            int res = 0;
            for(auto it:m)
                if(m.count(it.first-1)>0)
                    res = max(res, it.second+m[it.first-1]);
            return res;
        }
    
    
    ///////////////////////
    int findLHS(vector<int>& nums) {
            unordered_map<int,int>m;
            int res = 0;
            for(auto i: nums){
                m[i]++;
                if(m.count(i+1))
                    res = max(res, m[i] + m[i+1]);
                if(m.count(i-1))
                    res = max(res, m[i] + m[i-1]);
            }
            return res;        
        }
    
    
    ///////////////////////////////////////
     int findLHS(vector<int>& nums) {
            sort(nums.begin(),nums.end());
            int len = 0;
            for(int i = 1, start = 0, new_start = 0; i<nums.size(); i++)
            {
    
                if (nums[i] - nums[start] > 1)    
                    start = new_start;
                if (nums[i] != nums[i-1]) 
                    new_start = i;
                if(nums[i] - nums[start] == 1)
                    len = max(len, i-start+1);
            }
            return len;

    599. Minimum Index Sum of Two Lists

    Input:
    ["Shogun", "Tapioca Express", "Burger King", "KFC"]
    ["KFC", "Shogun", "Burger King"]
    Output: ["Shogun"]
    Explanation: The restaurant they both like and have the least index sum is "Shogun" with index sum 1 (0+1).
      vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
            vector<string>res;
            unordered_map<string,int>m;
            int min = INT_MAX;
            for(int i = 0; i < list1.size(); i++) m[list1[i]] = i;
            for(int i = 0; i < list2.size(); i++)
                if(m.count(list2[i]) != 0)
                    if(m[list2[i]] + i < min) min = m[list2[i]] + i, res.clear(), res.push_back(list2[i]);
                    else if(m[list2[i]] + i == min) res.push_back(list2[i]);
            return res;
        }

    606. Construct String from Binary Tree

    Input: Binary tree: [1,2,3,4]
           1
         /   
        2     3
       /    
      4     
    
    Output: "1(2(4))(3)"
    
    Explanation: Originallay it needs to be "1(2(4)())(3()())",
    but you need to omit all the unnecessary empty parenthesis pairs.
    And it will be "1(2(4))(3)".
    class Solution {
    public:
        string tree2str(TreeNode* t) {
            return !t ? "" : to_string(t->val) + (t->left ? "(" + tree2str(t->left) + ")" : t->right ? "()" : "")
                                               + (t->right ? "(" + tree2str(t->right) + ")" : "");
        }
    };

    617. Merge Two Binary Trees

    Input: 
    	Tree 1                     Tree 2                  
              1                         2                             
             /                        /                             
            3   2                     1   3                        
           /                                                    
          5                             4   7                  
    Output: 
    Merged tree:
    	     3
    	    / 
    	   4   5
    	  /     
    	 5   4   7
    class Solution {
    public:
        TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
            if (!t1 || !t2) return t1 ? t1 : t2;
    
            TreeNode* node = new TreeNode(t1->val + t2->val);
            node->left = mergeTrees(t1->left, t2->left);
            node->right = mergeTrees(t1->right, t2->right);
            return node;
        }
    };

    633. Sum of Square Numbers

    Input: 5
    Output: True
    Explanation: 1 * 1 + 2 * 2 = 5
    bool judgeSquareSum(int c) {
            for(int i=0;i<=sqrt(c);i++) {
                int t=sqrt(c-i*i);
                if(t*t==c-i*i) return true;
            }
            return false;
        }

    637. Average of Levels in Binary Tree

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
           vector<double> averageOfLevels(TreeNode* root) {
            vector<double> res;
            queue<TreeNode*> q;
            q.push(root);
            while(!q.empty()) {
                long temp=0;
                int s=q.size();
                for(int i=0;i<s;i++) {
                    TreeNode* t=q.front();
                    q.pop();
                    if(t->left) q.push(t->left);
                    if(t->right) q.push(t->right);
                    temp+=t->val;
                }
                res.push_back((double)temp/s);
            }
            return res;
        }
    };

    645. Set Mismatch

    Input: nums = [1,2,2,4]
    Output: [2,3]
    

    思路:使数组按123。。。n来排序,如果当前的内容和index不匹配,则交换

    vector<int> findErrorNums(vector<int>& nums) {
            for(int i = 0; i<nums.size(); i++){
                while(nums[i] != nums[nums[i] - 1])swap(nums[i], nums[nums[i] - 1]);
            }
            for(int i = 0; i<nums.size() ; i++){
                if(nums[i] != i + 1)return {nums[i], i + 1};
            }
        }

    653. Two Sum IV - Input is a BST

    Input: 
        5
       / 
      3   6
     /    
    2   4   7
    
    Target = 9
    
    Output: True
    //方法一:使用map来进行一次遍历
    bool
    findTarget(TreeNode* root, int k) { unordered_set<int> set; return dfs(root, set, k); } bool dfs(TreeNode* root, unordered_set<int>& set, int k){ if(root == NULL)return false; if(set.count(k - root->val))return true; set.insert(root->val); return dfs(root->left, set, k) || dfs(root->right, set, k); } ///////////////////////////////////////////////////// //方法二:先使用中序遍历使其按小到大来排序,然后对排序后的数组进行首尾相加 bool findTarget(TreeNode* root, int k) { vector<int> nums; inorder(root, nums); for(int i = 0, j = nums.size()-1; i<j;){ if(nums[i] + nums[j] == k)return true; (nums[i] + nums[j] < k)? i++ : j--; } return false; } void inorder(TreeNode* root, vector<int>& nums){ if(root == NULL)return; inorder(root->left, nums); nums.push_back(root->val); inorder(root->right, nums); } /////////////////////////////////////////////////////// bool findTarget(TreeNode* root, int k) { return dfs(root, root, k); } bool dfs(TreeNode* root, TreeNode* cur, int k){ if(cur == NULL)return false; return search(root, cur, k - cur->val) || dfs(root, cur->left, k) || dfs(root, cur->right, k); } bool search(TreeNode* root, TreeNode *cur, int value){ if(root == NULL)return false; return (root->val == value) && (root != cur) || (root->val < value) && search(root->right, cur, value) || (root->val > value) && search(root->left, cur, value); }
  • 相关阅读:
    关于WPF程序引用(用到)的PresentationFramework.dll版本问题
    【转载】Jenkins在CentOS上安装部署
    关于2021/04/15实施3.0版本到中间层服务器发现IIS管理器的SVC无法浏览另类问题分析
    关于2021/03/02本地服务总线作业调度没起来问题分析
    【转】WCF服务部署到IIS7.5(备忘)
    Dapper参数化查询使用实例
    HIVE和HBASE区别
    Hadoop生态系统官网、下载地址、文档
    Hive中Sqoop的基本用法和常见问题
    读懂hadoop、hbase、hive、spark分布式系统架构
  • 原文地址:https://www.cnblogs.com/hotsnow/p/10062281.html
Copyright © 2020-2023  润新知