Minimum Depth of Binary Tree

问题描述

Given a binary tree, find its minimum depth.

The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.

即寻找最短路径,例如下面的

java代码

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public int minDepth(TreeNode root) {
        if(root==null ) return 0;
        if(root.left!=null&&root.right!=null)
            return 1+Math.min(minDepth(root.left),minDepth(root.right));
        if(root.left!=null&&root.right==null)
            return 1+minDepth(root.left);
        if(root.left==null&&root.right!=null)  
            return 1+minDepth(root.right);
        if(root.left==null&&root.right==null) 
            return 1;
        return 0;
    }
}

问题分析

      5
     / \
    4   8
   /   / \
  11  13  4
 /  \      \
7    2      1 

最小分支即为5-8-13,大小为3,即寻找两者中最小的

在thinkphp/Library/ORG/net/uploadfile.class.php中

修改第106行
 if(!move_uploaded_file($file['tmp_name'], $this->autoCharset($filename,'utf-8','gbk'))) {
为以下
  if (!move_uploaded_file($file['tmp_name'], iconv('utf-8','utf-8',$filename))) {

##由于Apache本身为utf-8编码,所以不用改成中文编码

apche设置可以添加如下代码

AddDefaultCharset utf-8
IndexOptions FancyIndexing VersionSort
IndexOptions Charset=UTF-8
AddDefaultCharset off

leetcode中Roman to Integer 问题


###Roman to Integer问题描述

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

即要求将罗马数字转化为int类型

java代码

public class Solution {
    public int romanToInt(String s) {
        int res = 0;
        for (int i = s.length() - 1; i >= 0; i--) {
            char c = s.charAt(i);
            switch (c) {
            case 'I':
                res += (res >= 5 ? -1 : 1);
                break;
            case 'V':
                res += 5;
                break;
            case 'X':
                res += 10 * (res >= 50 ? -1 : 1);
                break;
            case 'L':
                res += 50;
                break;
            case 'C':
                res += 100 * (res >= 500 ? -1 : 1);
                break;
            case 'D':
                res += 500;
                break;
            case 'M':
                res += 1000;
                break;
            }
        }
        return res;
    } }

问题分析

在罗马数字中I=1 , V=5 , X=10 , L=50 , C=100 , D=500 , M=1000
重复数次:一个罗马数字重复几次,就表示这个数的几倍
右加左减:
在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字
在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字

leetcode中Maximum Depth of Binary Tree问题

Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from
the root node down to the farthest leaf node.

问题描述

求解二叉树的深度问题

C++代码

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL)
 * };
 */
class Solution {
public:
    int max(int a,int b){
        return a > b? a : b;
    }
    int maxDepth(TreeNode *root) {
        int len = 0;
        if (root == NULL) return 0;

        return max(maxDepth(root->left)+1,maxDepth(root->right)+1);
    }
};

java代码

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) return 0;
        return (Math.max(maxDepth(root.left)+1, maxDepth(root.right)+1));
    }
}

leetcode中Path Sum 问题

标签(空格分隔): 未分类


Given a binary tree and a sum, determine if the tree has a
root-to-leaf path such that adding up all the values along the path
equals the given sum.

For example: Given the below binary tree and sum = 22,

      5
     / \
    4   8
   /   / \
  11  13  4
 /  \      \
7    2      1 

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

###问题描述

在二叉树中找到一条路径与sum值相等

###代码如下

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool hasPathSum(TreeNode *root, int sum) {
        if(root == NULL) return false;
        if(root->left == NULL && root->right == NULL){
            if (sum == root->val) {
                return true;
            } else {
                return false;
            }
        }
        return hasPathSum(root->left,sum-root->val) || hasPathSum(root->right,sum-root->val);
    }
};

简单说明一下,做一个递归函数不断向下递归,直到子节点都为零,判断这个时候的根节点是否等于sum的剩余值

leetcode中Remove Duplicates from Sorted Array II 问题解决


问题描述

Follow up for “Remove Duplicates”:
What if duplicates are allowed at most twice?

For example,
Given sorted array A = [1,1,1,2,2,3],

Your function should return length = 5, and A is now [1,1,2,2,3].

简单的说就是将数组中连续的大于等于2个的多余的去掉
1,1,1,1,2,2,1变为1,1,2,2,1,大小为5


明白了问题下面贴出代码

class Solution {
    public:
    int removeDuplicates(int A[], int n) {
        int len=2,temp=2;
        if(n<=2) return n;
        while(temp < n){
            if(A[temp] != A[len-2]){
                //先执行A[len] = A[temp],然后再执行len++
                A[len++] = A[temp];
            }
            temp++;
        }
        return len;
    }
};

一定要注意的是上面中是先赋值在len++,这个的作用是修改A数组

贴出完整的C代码

#include <stdio.h>

int removeDuplicates(int A[], int n) {
    int len=2,temp=2;
    if(n<=2) return n;
    while(temp < n){
        if(A[temp] != A[len-2]){
            A[len++] = A[temp];
        }
        temp++;
    }
    return len;
}

int main(int argc, const char * argv[])
{
    int A[] = {1,1,1,2,2,3,1};
    int j = removeDuplicates(A,7);
    printf("%d",j);
    return 0;
}

在文件上传过程中,除了后台对文件上传大小有限制,服务器端对文件大小也有限制,下面修改php.ini配置,提高最大上传文件为500M

查找以下选项并修改

file_uploads = On ;打开文件上传选项 
upload_max_filesize = 500M ;上传文件上限 

如果要上传比较大的文件,仅仅以上两条还不够,必须把服务器缓存上限调大,把脚本最大执行时间变长

post_max_size = 500M ;post上限 
max_execution_time = 1800 ; 脚本最大执行时间 
max_input_time = 1800 ; 
memory_limit = 500M ;  (500MB)内存上限

##常用git简介(主要包括版本控制,分支管理中一些我遇到的问题)

###1. git初始化
git init

###2. git添加保存
git add .
git commit -am “版本描述”(a表示添加所有all)

###3. 查看git状态
git status

###4. 查看git版本
git log
git reflog

###5. 恢复某一版本
git reset -hard HEAD^ (恢复上一版本)
git reset -hard HEAD^^ (恢复上上个版本)
git reset -hard 版本号

###6. 分支相关

查看分支

git branch

创建分支

git checkout -b develop master (从master创建develop分支)

切换分支

git checkout develop

对Develop分支进行合并

git merge --no-ff develop

###7. 下载、同步
git clone tc@192.168.0.1:/home/zhan/你的git文件夹/.git
git pull 同步
git add .
git commit -am “”
git push origin zhanfang(上传到zhanfang分支,上传前一定要add,commit)

###Tips

1.git push可能不成功(提示为alread up to date),原因是服务器那边可能还没有提交
或者没有git pull 同步一下
在.git/logs/refs/heads/master中保存着所有的记录

#在linux或者unix中通过端口杀死进程
由于在linux/unix中经常会发生端口的占用,所以经常需要杀死该进程
下面分享一下我的方法:

##sudo lsof -i:8087查找8087端口的进程

##找到对应占用的PID,假设为n

##sudo kill -9 n(-9为快速杀死)

###1. 本地hexo的安装
mkdir hexo(你的hexo的文件目录)
cd hexo
hexo init(初始化hexo)
npm install
hexo generate(简写为hexo g)
hexo server
访问localhost:4000即可看到本地的博客

###2. 将博客架设到github

在你的github创建你自己博客地址
例如我的github名为zhanfang,那么我创建zhanfang.github.io

修改_config.yml文件
deploy:
type: github
repository: https://github.com/zhanfang/zhanfang.github.io.git
branch: master
并修改(可选)
title: Fang -.-
subtitle: 我是一只程序猿
description:
author: Zhan Fang
email: zhanstudent@hotmail.com
language: zh-CN
保存文件,并且在hexo文件夹下面执行
hexo g
hexo deploy(可简写hexo d)(推送到zhanfang.github.io)
hexo g 和hexo d是每次修改后必要的步骤

###3. hexo模板的安装
hexo下面比较好的模板 pacman hexo-theme/Tinny
我自己用的是hexo-theme/Tinny,想要看效果就如本博客
安装方法:在hexo文件夹下面执行如下
git clone (如果没有git请安装)
然后需要修改_config.yml
theme: hexo-theme/Tinny
除此之外修改themes/hexo-theme/Tinny/_config.yml可修改主题的样式

###4. 关于我: /about的创建

hexo new page “about”
vim source/about/index.md
在编写过程中tags表示标签,title名改变的是文章标题
修改并保存之后
hexo g
hexo d

###5. 创建普通的博文
hexo new “hexo”
vim source/_post/hexo.md
修改完毕后
hexo g
hexo d