Skip to content

Instantly share code, notes, and snippets.

View senarukana's full-sized avatar

Zhe Li senarukana

View GitHub Profile
@senarukana
senarukana / divide.cpp
Last active August 29, 2015 14:14
divide
#include <iostream>
using namespace std;
// y = 2^0 * x * a0 + 2^1 * x * a1 + ... + 2 ^ k * x * ak
int divide(unsigned x, unsigned y) {
int result = 0;
while (y >= x) {
int power = 1;
@senarukana
senarukana / bst_cloest2.cpp
Last active August 29, 2015 14:14
find_cloest2_node_bst
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode *left, *right;
TreeNode(int v): val(v), left(NULL), right(NULL) {}
@senarukana
senarukana / bst_iterator.cpp
Created February 3, 2015 03:56
find cloest k node in bst
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <climits>
@senarukana
senarukana / young_matrix.py
Created March 11, 2015 07:58
young matrix
ef add(self, val):
if self.size >= self.m * self.n:
return False
i, j = self.m-1, self.n-1
self.mat[i][j] = val
while True:
ni, nj = i, j
if i > 0 and self.mat[i-1][j] > self.mat[ni][nj]:
ni, nj = i-1, j
if j > 0 and self.mat[i][j-1] > self.mat[ni][nj]:
@senarukana
senarukana / multi_postorder.py
Created March 13, 2015 03:16
判断两颗多叉树关于叶子节点的前序遍历是否相等
class TreeNode:
def __init__(self, val):
self.children, self.val = [], val
class PostorderIterator:
def __init__(self, root):
self.st = []
@senarukana
senarukana / postfix_tree.py
Created March 13, 2015 06:46
字符串中重复次数最多的子串
ALPHABETSIZE = 26
def get_index(c):
return ord(c)-ord('a')
class PostfixNode:
def __init__(self):
@senarukana
senarukana / longest_repeating_substring.py
Created March 13, 2015 07:00
出现多于一次的最长的子串
ALPHABETSIZE = 26
def get_index(c):
return ord(c)-ord('a')
class PostfixTreeNode:
@senarukana
senarukana / shortest_path.py
Last active August 29, 2015 14:17
最短路径
import heapq
class Vertex:
def __init__(self, val):
self.val = val
self.adjs = {}
def add_edge(self, j, val):
self.adjs[j] = val
@senarukana
senarukana / random_selection.py
Last active August 29, 2015 14:17
随机数相关
# -*- coding: utf-8 -*-
import random
import sys
def random_select(a):
ret = a[0]
for i in range(1, len(a)):
j = random.randint(0, i)
if j == i:
@senarukana
senarukana / remove_continuous.cpp
Created March 14, 2015 15:48
消除连续的字符串
#include <iostream>
using namespace std;
void removeContinuous(string &s) {
int n = s.size();
int i = 1, j = 0;
while (i < n) {
if (s[i] != s[j]) {
s[++j] = s[i];