leetcode 229 Majority Element II
摘要:这题用到的基本算法是Boyer–Moore majority vote algorithmwiki里有示例代码 1 import java.util.*; 2 public class MajorityVote { 3 public int majorityElement(int[] num...
阅读全文
leetcode 233 Number of Digit One
摘要:这题属于需要找规律的题。先想一下最简单的情形:N = 10^n - 1记X[i]表示从1到10^i - 1中 1的个数,则有如下递推公式:X[i] = 10 * X[i - 1] + 10^(i - 1)这个递推公式可以这么观察得到:i =0,X[0] = 0i = 1,从1到9, X[1]= 1i...
阅读全文
leetcode 238 Product of Array Except Self
摘要:这题看似简单,不过两个要求很有意思:1、不准用除法:最开始我想到的做法是全部乘起来,一项项除,可是中间要是有个0,这做法死得很惨。2、空间复杂度O(1):题目说明了返回的那个数组不算进复杂度分析里面做法:既然不用除法,对于某个数i, result[i] = 0到i - 1的乘积 X i + 1...
阅读全文
leetcode 239 Sliding Window Maximum
摘要:这题是典型的堆排序算法,只是比一般的堆算法多了删除的操作,有两件事需要做:1 用一个hash表存储从输入数组索引到堆数组(用于实现堆的那个数组)所以的映射,以便在需要删除一个元素的时候能迅速定位到堆数组中的位置2用一个set保存已经被删除的元素索引(这里指的是输入数组索引),这一点可选;还有一种做法...
阅读全文
C/C++ memmove 和 memcpy
摘要:这两个函数用于拷贝字符串或者一段连续的内存,函数原型:void * memcpy ( void * destination, const void * source, size_t num );void * memmove ( void * destination, const void * sou...
阅读全文
type safe printf
摘要:在书里看到的,摘录如下:#include #include template struct is_C_style_string:std::false_type{};template struct is_C_style_string:std::true_type{};template struct i...
阅读全文
char, signed char, and unsigned char in C++
摘要:关于这三者的区别stackoverrflow里有一个答案是这样说的:3.9.1 Fundamental types [basic.fundamental]1 Objects declared as characters char) shall be large enough to store any...
阅读全文
C++实现python标准库中的Counter
摘要:看python standard library by exmple里面提到一个Counter容器,它像muliset一样,能够维持一个集合,并在常量时间插入元素、查询某个元素的个数,而且还提供了一个most_common(n)方法,用于统计频数最大的n个元素,这在读取文本并统计词频的时候显得非常实...
阅读全文
C++11 实现 argsort
摘要:看python发现有这么个api,感觉很实用,想着stl里会不会有这个呢?查了半天毫无结果。于是用lambda自己实现了下。以vector为例templatevector argsort(const vector& a){ int Len = a.size(); vector idx(Len,...
阅读全文
C/C++ static vs global
摘要:static has a very simple logic to it. If a variable is static, it means that it is a global variable, but it's scope is limited to where it is defined...
阅读全文
C++中的::operator new, ::operator delete
摘要:一般在使用new 和 delete的时候,做了两件事情,一是空间的配置( new 是分配,delete是回收),而是调用对象的析构函数但是也有办法将这两个过程分开那就是显式的调用::operator new, ::operator delete,它们只进行空间配置,并不调用对象的析构函数具体的可以参...
阅读全文
二叉树的非递归遍历(先序, 中序, 后序)
摘要:先序遍历:/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), ...
阅读全文
sizeof 是编译时运算符
摘要:typedef char RT1;typedef struct{ char a[2]; } RT2;template RT1 test(typename T::X const*){ cout RT2 test(...){ cout (0)) == 1)可以看一下上面的宏,用于判定类型中是否有typ...
阅读全文
C++中的数组和指针
摘要:首先要明确一点,数组类型和指针类型确实是不同的类型!char *p; //类型是char*char str[6];//类型是char [6]可用如下语句输出类型信息(需要#include) std::cout int foo(int const (&a)[N][M], int const (&b)[...
阅读全文
内建类型零初始化的问题
摘要:比如有如下这样一段代码,我们很快就能意识到,x 和ptr开始的值都是未定义的,但是sc却很明显会调用其默认构造函数,得到合理的初始化。class someclass{public: someclass():val(){}private: int val;}void foo(){ int x; in...
阅读全文
C++中的默认成员函数
摘要:一般而言,对于一个用户自定义的类类型,以下四个函数在用户没有自定义的情形下,会由编译器自动生成:1、default constructor2、copy constructor Someclass::Someclass(const Someclass &);3、copy assignment ope...
阅读全文
C/C++中的行读取
摘要:在C语言里面一直很容易混淆的,gets和fgetS的区别:char * fgets ( char * str, int num, FILE * stream );Reads characters fromstreamand stores them as a C string intostruntil...
阅读全文
C/C++中浮点数输出格式问题
摘要:在C语言中,浮点数的输出格式有三种:%g, %f, %e首先要说的是%e是采用科学计数法来显示。%g与后两者有一个重要的差别,就是设置输出精度的时候,(C中默认浮点输出精度是6),%g认为,包括整数位在内,输出6位就行,而%f %e认为,这6位是指小数点后面的精度是6位。在C++中,cout使用se...
阅读全文
C/C++中的输出对齐设置
摘要:输出对齐有两个方面,一是输出宽度,一是左对齐还是又对齐。在C++里面,默认是右对齐,可以通过cout.setf(std::ios::left)调整为左对齐,而且这种调整是全局的,一次设置,后面都有效。但是对于输出宽度的设置(使用cout.width(int i)设置)是一次性的,只影响紧随其后的一次...
阅读全文
C++11 中的initialize_list
摘要:这就是一个简单的模板类,不过在C++中有了特殊的语法支持,定义的时候使用如下的格式:initialize_list dl = {1.1, 1.2};或者:initialize_list dl {1.1, 1.2};还有就是有一些容器类也会有构造函数是以initial_list类为参数的。templa...
阅读全文