Categories
木有技术

LeetCode 5. Longest Palindromic Substring

题目:https://leetcode.com/problems/longest-palindromic-substring/
思路:
分为两种回文,一种是”aba”的形式,另一种是”aa”的形式,当然了,”a”也算是回文.
我的想法指定一个对称中心,然后往两边搜索,这样能找到最大可能的回文。或许还有一种思路是利用类似栈的容器的,但是怎样判断”abcbaabcba”这种嵌套型的呢?
代码:

class Solution {
public:
	string longestP(string s, int pos, int type) {
		//Type: 0- 'a', 1-'aa'
		//Find palindrome at the position 'pos'
		int len = s.size();
		int posFront, posRear, maxLen;
		if (type == 0) {
			maxLen = 1; //'a'
			posFront = pos - 1;
			posRear = pos + 1;
			if (posFront < 0)
				return s;
		}
		else {
			maxLen = 0;
			posFront = pos - 1;
			posRear = pos;
		}
		while (posRear - posFront + 1 <= len) {
			if (s[posFront] != s[posRear]) {
				if (maxLen == 0)
					return "";
				return s.substr(posFront + 1, posRear - posFront - 1);
			}
			posFront--;
			posRear++;
			maxLen+=2;
		}
		return s.substr(posFront + 1, posRear - posFront - 1);
	}
	string longestPalindrome(string s) {
		int strSize = s.size();
		string maxStr = s.substr(0,1);
		for (int i = 1; i<strSize; i++) {
			string type1str = longestP(s, i, 0);
			string type2str = longestP(s, i, 1);
			if (type1str.size() > maxStr.size()) {
				maxStr = type1str;
			}
			if (type2str.size() > maxStr.size()) {
				maxStr = type2str;
			}
		}
		return maxStr;
	}
};

 

Categories
不学无术

(转载)从最大似然到EM算法浅解

感觉是我看到解释得最容易理解的一个版本
http://blog.csdn.net/zouxy09/article/details/8537620

Categories
生活琐碎

I'm Gonna Make Him An Offer He Can't Refuse

I’m Gonna Make Him An Offer He Can’t Refuse——The Godfather

Categories
不学无术

LeetCode 217. Contains Duplicate

题目:https://leetcode.com/problems/contains-duplicate/
思路:弄个哈希表啊或者现成的用哈希(或者XX树)的容器就行了
代码:

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        set<int> numSet;
        int numSize = nums.size();
        for (int i = 0; i<numSize; i++) {
            if (numSet.count(nums[i]) == 0)
                numSet.insert(nums[i]);
            else
                return true;
        }
        return false;
    }
};

 

Categories
木有技术

Cisco Linksys EA3500 OpenWrt Snapshot镜像

仅限Snapshot版本r48648使用,需要自己搭服务器的可以参考我的帖子http://boweihe.me/?p=1537

没有Luci界面的,可以直接修改/etc/opkg/distfeeds.conf 这个文件。LuCi界面下等效的。

src/gz designated_driver_base http://hk.boweihe.me/downloads.openwrt.org/snapshots/trunk/kirkwood/generic/packages/base
src/gz designated_driver_kernel http://hk.boweihe.me/downloads.openwrt.org/snapshots/trunk/kirkwood/generic/packages/kernel
src/gz designated_driver_luci http://hk.boweihe.me/downloads.openwrt.org/snapshots/trunk/kirkwood/generic/packages/luci
src/gz designated_driver_management http://hk.boweihe.me/downloads.openwrt.org/snapshots/trunk/kirkwood/generic/packages/management
src/gz designated_driver_packages http://hk.boweihe.me/downloads.openwrt.org/snapshots/trunk/kirkwood/generic/packages/packages
src/gz designated_driver_routing http://hk.boweihe.me/downloads.openwrt.org/snapshots/trunk/kirkwood/generic/packages/routing
src/gz designated_driver_telephony http://hk.boweihe.me/downloads.openwrt.org/snapshots/trunk/kirkwood/generic/packages/telephony
# src/gz designated_driver_targets http://hk.boweihe.me/downloads.openwrt.org/snapshots/trunk/kirkwood/generic/packages/targets

 
 

Categories
不学无术

LeetCode 242. Valid Anagram

原题:https://leetcode.com/problems/valid-anagram/
思路:Anagram就是指两个单词(一说句子也行)里面字符的种类、数量一样,但是能拼出不同的词。所以思路就是统计里面的字符频率就行。
代码:

class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.size() != t.size())
            return false;
        int stable[26] = {0};
        int ttable[26] = {0};
        for(int i=0; i<s.size(); i++){
            stable[s[i] - 'a'] ++;
            ttable[t[i] - 'a'] ++;
        }
        for(int i=0; i<26; i++){
            if (stable[i] != ttable[i])
                return false;
        }
        return true;
    }
};

 

Categories
不学无术

LeetCode 283. Move Zeroes

题目:https://leetcode.com/problems/move-zeroes/
思路:
说是把0 挪到后面去,其实等同于把非0值往前挪。挪到什么地方呢?就得找个东西记录可以往前挪的“坑”。而这个“坑”有两种情况:
1.原来的值就是0的;
2.如果把当前的非0值往前面挪过了,那当前的位置也就空缺;
从一开始记录一下找到的0的个数,把非0值挪完了以后,最后几位写成0就行。
这一切的时间复杂度为O(n)
代码(用到了队列来存储坑的位置):

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int size = nums.size();
        int zeroCount = 0;
        queue<int> availIndices;
        for(int i=0; i < size; i++){
            if(nums[i] == 0){
                zeroCount ++;
                availIndices.push(i);
            } else {
                if(!availIndices.empty()) {
                    //Move forward
                    int index =availIndices.front();
                    availIndices.pop();
                    nums[index] = nums[i];
                    //Mark i as empty
                    availIndices.push(i);
                }
            }
        }
        for(int i = size - zeroCount; i < size; i++) {
            nums[i] = 0;
        }
    }
};

 

Categories
不学无术

LeetCode #100. Same Tree

题目:https://leetcode.com/problems/same-tree/
分析:注意判断NULL情况,用递归做
代码:(秒AC有木有!)

/**
 * 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:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(p == NULL && q == NULL)
            return true;
        if(p == NULL || q == NULL)
            return false;
        if(p->val != q->val)
            return false;
        return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
    }
};

 

Categories
木有技术

前端测试服务 by aliyun

感觉很给力的样子,一天有俩小时的时间可以用,从IE6开始的浏览器兼容性测试,竟然是跑虚拟机的!
http://fts.aliyun.com/

Categories
不学无术

LeetCode #226. Invert Binary Tree

题目:https://leetcode.com/problems/invert-binary-tree/
思路:这TM还要思路?
代码:

/**
 * 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:
    TreeNode* invertTree(TreeNode* root) {
        if(root == NULL)
            return root;
        TreeNode *tmpNode = root->right;
        root->right = root->left;
        root->left = tmpNode;
        if(root->left != NULL)
            invertTree(root->left);
        if(root->right != NULL)
            invertTree(root->right);
        return root;
    }
};