题目

Populating Next Right Pointers in Each Node

给一个平衡二叉树的每个节点加上next属性,next 指向起相邻的节点,如果没有则指向null;

Given the following perfect binary tree,

     1
   /  \
  2    3
 / \  / \
4  5  6  7

After calling your function, the tree should look like:

     1 -> NULL
   /  \
  2 -> 3 -> NULL
 / \  / \
4->5->6->7 -> NULL

思路

1.对于一个父节点来说,它左孩子的next指向它的右孩子,它的右孩子的next指向它自己next节点的左孩子。
2.遍历整个二叉树,对每个父节点进行1操作。

实现

JavaScript:

/**
 * Definition for binary tree with next pointer.
 * function TreeLinkNode(val) {
 *     this.val = val;
 *     this.left = this.right = this.next = null;
 * }
 */

/**
 * @param {TreeLinkNode} root
 * @return {void} Do not return anything, modify tree in-place instead.
 */
var connect = function(root) {
    if(root===null) return;
    root.next =null;


    function traversal(node){
        if(node){
            if(node.left){
                connectLeftChild(node,node.left);
                traversal(node.left);
            }
            if(node.right){
                connectRightChild(node,node.right);
                traversal(node.right);
            }
        }


    }
    function connectLeftChild(parent,node){

        if(node){
             node.next = parent.right;
        }
    } 
    function connectRightChild(parent,node){
        if(node){
            if(parent.next){
                node.next = parent.next.left;
            }else{
                node.next = null;
            }

        }

    }
    traversal(root);
};

耗时

nextpointerruntime

题目

Move Zeroes

将一个数组中的0元素都移到最后面,同时保持非0元素的顺序不变。

比如,[0,1,0,3,12] 移动后变成了[1,3,12,0,0]

思路

  1. 找到第一个0元素的位置,从第一个0元素的位置往后遍历
  2. 发现非0元素,则与第一个0元素互换位置,并将第一个0元素的位置往后移一位。
  3. 继续遍历,重复2动作直到遍历结束。

实现

Javascript

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function(nums) {
    var firstzero = 0,temp;
    for(;firstzero<nums.length-1;firstzero++){
        //find first zero
        if(nums[firstzero]===0) break;
    }
    for(var j=firstzero+1;j<nums.length;j++){
        if(nums[j]!==0){
            //non-zero, change and move on
            temp = nums[j];
            nums[j]=nums[firstzero];
            nums[firstzero]=temp;
            firstzero ++;
        }

    }

};

耗时

movezeroes

问题描述

在ubuntu上通过apt-get install node-express命令安装的express版本只有2.5.8

用npm install express@4.13.1 -g 命令可以安装高版本的express

但是执行express —version时却返现并没有这个目录。

解决办法

这个问题是express的安装目录并不在系统的环境变量之中。

1 将 express的实际安装目录加入环境变量。

sudo vi /etc/environment 

2 保存

3 使它立即生效

source /etc/environment 

场景:

个人博客和个人一些项目都想放到github pages这个静态服务器上。

冲突:

  1. 最简单的想到的是在根目录下分blog和project的目录。

    但是我之前搭hexo的时候已经把博客的东西放到了根目录,试了一下整体搬迁到blog目录,会出现css,图片,js的路径问题。

    这里就要逐个修改hexo的路径配置。

  2. 还有另外一种办法就是,博客继续保留在github.io的根目录上,同时再建一个project目录。

    project目录下是一些需要运行在静态服务器上的代码,比如做demo。

    但用hexo deploy进行部署的时候,只能deploy 博客的代码,不能把自己project的代码也push上去。

    这里就需要修改hexo自带的deployer.js的文件。自行添加文件拷贝的任务。

修改hexo的路径配置

  1. 首先是博客目录下的_config.yml 文件

    url: http://judastree.github.io/blog/
    root: /blog/

  2. 然后是主题目录下的_config.yml 文件

    菜单

    menu:

    home: /blog/
    archives: /blog/archives
    about: /blog/about
    tags: /blog/tags            
    

    头像

    avatar: /blog/images/profile.jpeg

  3. 再接下来是需要自己细看的修改的,比如图片的引用地址。

修改hexo deployer.js文件

  1. 打开文件:node_modules/hexo-deployer-git/lib/deployer.js

  2. 找到对应代码片段,拷贝project目录,还有gitignore的文件,hexo的.deploy_git目录下原来没有gitignore文件

    return fs.exists(deployDir).then(function(exist){

    if (exist) return;
    log.info('Setting up Git deployment...');
    return setup();
    

    }).then(function(){

    //log.info('Git pull first');
    //git('pull');
    log.info('Clearing .deploy folder...');
    return fs.emptyDir(deployDir);
    

    }).then(function(){

    //log.info('Copying files from public folder...');
    return fs.copyDir(publicDir, deployDir);
    //log.info('Copying gitignore...');
    //fs.copyFile(gitignoreFile,deployDir+"/.gitignore");
    //log.info('Copying files from other project folder...');
    //return fs.copyDir(otherProjectFolderDir,deployDir+"/projects");
    

    }).then(function(){

    return parseConfig(args);
    

    }).map(function(repo){

    return push(repo);
    

    });

  3. 注意这里还要加入git pull 的命令,因为当你在project的目录提交了代码,博客的目录不拉取最新的commit的话,提交会有问题的。

博客文章的push问题

我用第一种方法,将博客从根目录搬到blog子目录。 除了路径的问题,和第二种方法一样,也遇到了push的问题。

因为git本地仓库和远程仓库对应,不能只push博客的目录,要push整个本地仓库都要push上去。

这里还是修改hexo 的deployer.js ,添加自定义的任务。

比如将hexo的public目录不是复制到.deploy_git目录,而是复制到我们本地的仓库的blog目录。

//var deployDir = pathFn.join(baseDir, '.deploy_git');
var deployDir = "/Users/judastree/Documents/code/github/judastree.github.io/blog";

这里commit可以,但是push可能会遇到问题。

继续修改deployer.js里的push代码。将push -u origin branch —force 改成直接push。github默认会给我们-u的。

//return git('push', '-u', repo.url, 'master:' + repo.branch, '--force');
return git('push','-u','origin',repo.branch);

今天跑了下React Native的Hello World。 发现Node的版本必须在4.0+, 不然终端的8081服务起不来。

IOS 的模拟器上,没有HOME键,如果需要返回主页,按键盘shift+cmd+h

在模拟器上实现缩放的功能比较费劲(按住option键),建议真机上试。

利用adb screenrecord的命令,系统Android4.4(API level 19)以上,支持mp4的视频格式

开始录制的命令

adb shell screenrecord /sdcard/demo.mp4

导出视屏

adb pull /sdcard/demo.mp4 D:/

其他命令参数

adb shell screenrecord --help

很久前,想要找个免费的云空间搭服务,听说亚马逊的AWS可以免费使用多久,就去注册试了下,后面忙别的忘了这事。

直到AWS的账单邮件一封封发来……

一个月2,3刀就酱没了,坑死!!!!没钱了应该邮件提醒不续费就停止啊,一直不停止应用然后默默收费算什么啊。

赶紧把应用停掉,以后再也不用AWS了。

简介

Android Monkey自动化测试:Monkey是Android SDK中自带的一个命令行工具,可以运行在模拟器里或实际设备中。
它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。

准备条件

  1. Android SDK
  2. USB数据线
  3. 将sdk中的adb加入全局环境变量

步骤

  1. 确认设备已经连接到PC上

    adb devices

    2.你可以指定要测试的app的包名,如果没有指定的话是测试所有的app。将日志输出到c盘monkeylog.txt中

    adb shell monkey -p com.android.test —throttle 1000 -s 600 -v -v -v 1000>C:\monkeylog.txt

如何停止Monkey测试

  1. adb shell(登录设备)。

  2. ps|grep monkey(查找进程)。

  3. kill ID(结束进程)。

如何获取ANR文件?(需要具备root权限)

  1. adb shell(登录设备)
  2. cd /data/anr(进入到anr文件夹)
  3. ll(查看文件)
  4. adb pull /data/anr/traces.txt C:\traces.txt(文件复制)

Monkey命令行参数详解

-p: 所要测试的包。
示例:-p com.android.test
-throttle: 在事件之间插入固定延迟。
示例:—throttle 1000(毫秒)
-s: 伪随机数生成器的seed值。
示例: -s 600(如果用相同的seed值再次运行monkey,它将生成相同的事件序列。)
-v: 用于指定日志的详细程度。
示例: -v -v -v 100(3个-v代表最详细的日志级别)(数字1000: 表示测试事件数)

其他命令参数