zoukankan      html  css  js  c++  java
  • LeetCode Weekly Contest 19

    LeetCode Weekly Contest 19

     
    • User Accepted: 994
    • User Tried: 1054
    • Total Accepted: 1345
    • Total Submissions: 3160
    • Difficulty: Easy

    Given an integer, return its base 7 string representation.

    Example 1:

    Input: 100
    Output: "202"
    

    Example 2:

    Input: -7
    Output: "-10"
    

    Note: The input will be in range of [-1e7, 1e7].

    简单的十进制转7进制。

    class Solution {
    public:
        string convertToBase7(int num) {
            if(num == 0){
                return "0";
            }
            string s, p=""; 
            if(num < 0){
                p = "-"; 
                num  = -num; 
            }
            while(num){
                s = char('0' + (num%7))  + s; 
                num = num/7; 
            }
            return p+s; 
        }
    };
    

      

    513. Find Bottom Left Tree Value

     
    • User Accepted: 870
    • User Tried: 943
    • Total Accepted: 1060
    • Total Submissions: 2399
    • Difficulty: Medium

    Given a binary tree, find the leftmost value in the last row of the tree.

    Example 1:

    Input:
    
        2
       / 
      1   3
    
    Output:
    1
    

    Example 2: 

    Input:
    
            1
           / 
          2   3
         /   / 
        4   5   6
           /
          7
    
    Output:
    7
    

    Note: You may assume the tree (i.e., the given root node) is not NULL.

    树结构的迭代

    /**
     * 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 ans, current; 
        void Find(TreeNode *root, int row){
                if(row >= current){
                    ans = root->val; 
                    current = row; 
                }
            if(root->right != NULL){
                Find(root->right, row+1); 
            }
            if(root->left != NULL){
                Find(root->left, row+1); 
            }
        }
        
        int findBottomLeftValue(TreeNode* root) {
            ans = root->val; current = 1; 
            Find(root, 1); 
            return ans; 
        }
    };
    

      

    515. Find Largest Value in Each Tree Row

     
    • User Accepted: 851
    • User Tried: 878
    • Total Accepted: 943
    • Total Submissions: 2140
    • Difficulty: Medium

    You need to find the largest value in each row of a binary tree.

    Example:

    Input: 
    
              1
             / 
            3   2
           /      
          5   3   9 
    
    Output: [1, 3, 9]

    也是用树结构,使用 BFS

    /**
     * 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<int> largestValues(TreeNode* root) { 
            vector<int> ans; 
            if(root == NULL){
                return ans; 
            }
            
            TreeNode *tmp; 
            queue<TreeNode* > q; 
            queue<int> qlevel; 
            
            qlevel.push(1); 
            q.push(root); 
            
            int cur_level = 1, cur_val = -2147483648; 
            while(!q.empty()){
                tmp = q.front(); q.pop(); 
                int tmp_level = qlevel.front(); qlevel.pop(); 
                
                if(tmp_level == cur_level){
                    if(cur_val < tmp->val){
                        cur_val = tmp->val; 
                    }
                }else{
                    ans.push_back( cur_val ); 
                    cur_level = tmp_level; 
                    cur_val = tmp->val; 
                }
                
                if(tmp->left != NULL){
                    q.push(tmp->left); qlevel.push(tmp_level + 1); 
                }
                if(tmp->right != NULL){
                    q.push(tmp->right); qlevel.push(tmp_level + 1); 
                }
            }
            ans.push_back(cur_val); 
            
            return ans; 
        }
    };
    

      

    493. Reverse Pairs

     
    • User Accepted: 165
    • User Tried: 777
    • Total Accepted: 172
    • Total Submissions: 3595
    • Difficulty: Hard

    Given an array nums, we call (i, j) an important reverse pair if i < j and nums[i] > 2*nums[j].

    You need to return the number of important reverse pairs in the given array.

    Example1:

    Input: [1,3,2,3,1]
    Output: 2
    

    Example2:

    Input: [2,4,3,5,1]
    Output: 3
    

    Note:

    1. The length of the given array will not exceed 50,000.
    2. All the numbers in the input array are in the range of 32-bit integer.

    看了discuss 才有思路, 原来 merge sort 也有这么好功能

    class Solution {
    private:
        int cnt; 
        
        void countPair(vector<int>& nums, int lf, int md, int rg){
            int l = lf, r = md + 1; 
            while(l <= md && r <= rg){
                if((long)nums[l] > (long)2*nums[r]){
                    cnt += (md - l + 1); 
                    r++; 
                }else{
                    l++; 
                }
            }
            sort(nums.begin() + lf, nums.begin() + rg + 1); 
        }
        
        void Reverse(vector<int>& nums, int lf, int rg){
            if(lf == rg){
                return; 
            }
            int mid = lf + (rg - lf)/2; 
            Reverse(nums, lf, mid); 
            Reverse(nums, mid+1, rg); 
            
            countPair(nums, lf, mid, rg); 
        }
        
        
        
    public:
        int reversePairs(vector<int>& nums) {
            int len = nums.size(); 
            if(len <= 1){
                return 0; 
            }
            cnt = 0; 
            Reverse(nums, 0, len-1); 
            return cnt; 
        }
    };
    

      

  • 相关阅读:
    docker学习之路-nginx镜像(翻译)
    docker学习之路-centos下安装docker
    Angular复习笔记7-路由(下)
    Linux保证运行一个实例
    使用epoll实现简单的服务器
    vmware中centos、redhat桥接网络配置
    同步队列、线程池模式服务器消息处理类
    ocilib linux编译安装
    redhat6.5安装oracle11_2R
    redhat6.5安装yum
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/6418317.html
Copyright © 2011-2022 走看看