# Leetcode 114. Flatten Binary Tree to Linked List

题目意思很简单，就是把一棵二叉数转换为链表，虽然题目中没说以什么样的形式转换，但看下样例就很容易看出来，是以先序遍历的次序转换成链表。这里链表节点还是treenode，只不过它的左节点为空而已。

# Leetcode 368. Largest Divisible Subset

#### 题目链接：368. Largest Divisible Subset

Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of elements in this subset satisfies: Si % Sj = 0 or Sj % Si = 0.
If there are multiple solutions, return any subset is fine.
题目意思也很简单，给出一个不含重复数字的数组，找到最长的一个子数组，子数组里的元素必须两两整除。

# Leetcode 240. Search a 2D Matrix II

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted in ascending from left to right.
Integers in each column are sorted in ascending from top to bottom.

此题是74题Search a 2D Matrix的升级版，所给出的矩阵性质相对74题少了一条，只保证了每行和每列都是增序的，但依旧有O(m+n)的解法。

# Leetcode 74. Search a 2D Matrix

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
* Integers in each row are sorted from left to right.
* The first integer of each row is greater than the last integer of the previous row.

这道题很简单，为此专门写篇博客其实算博客凑数了。给你一个每一行每一列都是增序，且每一行第一个数都大于上一行末尾数的矩阵，让你判断某个数在这个矩阵中是否存在。

# Leetcode 313. Super Ugly Number

Write a program to find the nth super ugly number.
Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k. For example, [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] is the sequence of the first 12 super ugly numbers given primes = [2, 7, 13, 19] of size 4.

# Leetcode 11. Container With Most Water

Given n non-negative integers a1, a2, …, an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container.

# 萌妹子Python入门指北（五）

这次我们来谈谈python中的函数，首先说一点，这里的函数和数学中的函数完全没有任何关系。在数学中，函数可能代表这一个数学公式，哎呀！ 想想就头疼，但在程序猿的世界，函数就是实现某个功能的一段代码，比起for循环、if判断来说好理解多了。

# 萌妹子Python入门指北（三）

前两篇网站我简单介绍了python环境的安装和基本的变量及运算。到目前为止，我们没办法用python做任何事，所以这篇文章我会介绍python的判断和循环语句，据说顺序、判断、循环可以解决计算机中的任何问题。 我为什么不介绍顺序呢！因为很简单，其实就是python的每行代码按顺序执行。 其实python预发是相当容易看懂的，本文我会将示例代码翻译成汉语方便大家理解（翻译后的代码是不能执行的哦）。

# 萌妹子Python入门指北（一）

《萌妹子Python入门指导》系列，以下简称萌妹子系列是教没有任何编程基础的妹子如何去写python代码，最终实现一些小工具的开发，请Python大牛们直接绕道。如果有想学习python的同学，也可以持续关注本系列。 本人在某互联网公司做运维，虽然python学的不是很好，但足以教一个完全不懂python的人，也希望在撰文的过程中提升自己的能力。

# Vim的配置说明

这些天一直使用vim，觉得vim是个很强大的编辑器，尤其是在配置好之后。

在网上参考了某大牛个vim配置，然后更改添加了一部分，形成了自己的配置，让Vim变的更强大。

# Leetcode Single Number II （面试题推荐）

还记得《剑指offer》和《编程之美》等书上多次出现的找一个数组中只出现一次的数那个题吗？

leetcode也有这道题 链接here  相信大家都知道用异或在O(n)的时间复杂度内求出的方法，这里不再赘述。

Given an array of integers, every element appears three times except for one. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

给你一个整数数组，每个元素出现了三次，但只有一个元素出现了一次，让你找出这个数，要求线性的时间复杂度，不使用额外空间。

这样就不能使用异或的方法了，把所有元素以后得到的就是所有元素的异或值了，对我们没有任何帮助。

这个问题依旧使用位运算来解决，不过更加复杂。

我们用三个变量one two three，分别存储二进制未分别出现一次 两次 三次的位。

class Solution {
public:
int singleNumber(int A[], int n) {
int one = 0, two = 0, three = 0;
for(int i = 0; i < n; i++)
{
three = two & A[i];                    //出现三次的位肯定是由出现两次的得到的
two = two | ones & A[i];          //出现两次的肯定是出现一次的得到的，不过还有原有的所以要或
one = one | A[i];                       //计算出现一次的位
two = two & ~three;               //去掉二进制中出现三次的位
ones = one & ~three;               //去掉二进制中出现三次的位</span>
}
return one;                                     //最终twos three都为0，one就是我们要的答案
}
};

# http://regex.alf.nu/ 非标准答案

1. Plain strings (207)                             foo
2. Anchors (206)                                     ick$3. Ranges (202) [a-f]{4} 4. Backrefs (201) (…).*\1 5. Abba (190) ^((?!(.)(.)\3\2).)+$
6. A man, a plan (176)                          ^(.)(.).*\2\1$7. Prime (286) ^(?!(xx+)\1+$)
8. Four (199)                                           (.)(.\1){3}
9. Order (199)                                         ^.{5}[^e]?$10. Triples (574) ^(([147]4|40|3[269]|9[05]|[378]1).+|0[369]*|[81][257])*$ 或 00($|3|6|9|12|15)|4.2|.1.+4|55|.17 关于第10条，可参考 http://www.zhihu.com/question/24824487 11. Glob (384) (rr|ll|[lbr]o|en|ta|y|cr|eat|up).*\1 12. Balance (287) ^(<(<(<(<(<(<.*)*>)*>)*>)*>)*>)*$
13. Powers (80)                                       ^(((x|x{8}|x{128})\3?)\2?)\1?\$
14. Long count (239)                              ((..)00 \2+01 \2+10 \2+11 ?){4}
15. Long count v2 (239)                         ((..)00 \2+01 \2+10 \2+11 ?){4}
16. Alphabetical (0)

http://jimliu.net/2014/01/04/regex-golf/

# Ubuntu下python安装mysqldb(驱动)

import MySQLdb

# poj 1455 Crazy tea party

这道题第一眼看去很难，其实不然，短短几行代码就搞定了。
说一下大概思路，如果是排成一排的n个人,如 1 2 3 4 5 6 7 8 我们要变成 8 7 6 5 4 3 2 1 需要交换 28次，找规律的话就是 n*(n-1)/2，但这道题是一个圈，要让他们顺序变反的话不一定1要在8的位置上去，4 3 2 1 8 7 6 5 这样也是反的，我们只要把n个人分成两部分，然后按拍成一条线的方法来出来两部分就OK了。

# hdoj 4768 Flyer

import java.util.Scanner;

public class Main {
static long[] a = new long[20005];
static long[] b = new long[20005];
static long[] c = new long[20005];
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
int n = cin.nextInt();
for (int i = 1; i <= n; i++) {
a[i] = cin.nextLong();
b[i] = cin.nextLong();
c[i] = cin.nextLong();
}
long r = Integer.MAX_VALUE, l = 0;
while (l < r) {
long mid = (l+r)>>1;
long sum = 0;
for (int i = 1; i <= n; i++) {
long minnum;
if (mid <= b[i])
minnum = mid;
else
minnum = b[i];
if (minnum >= a[i]) {
sum += (minnum - a[i])/c[i] + 1;
}
}
if (sum%2 == 1)
r = mid;
else l = mid+1;
}
if (l == Integer.MAX_VALUE) {
System.out.println("DC Qiang is unhappy.");
continue;
}
long ans = 0;
for (int i = 1; i <= n; i++) {
if (l >= a[i] && l <= b[i]) {
if ((l - a[i]) % c[i] == 0)
ans += 1;
}
}
System.out.println(l + " " + ans);
}
cin.close();
}
}