# 36. Valid Sudoku

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules

The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

Note: A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

1. 每行必须由1~9组成，且不重复
2. 每列必须由1~9组成，且不重复
3. 每个3*3的九宫格必须由1~9组成，且不重复

class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
bool rowValid[9][9]={false},colValid[9][9]={false},subBoardValid[9][9]={false};
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(board[i][j]!='.'){
int num=board[i][j]-'0'-1;
int k=i/3*3+j/3;/*如果第一格九宫格的编号为0,board[i][j]这个元素存在于第(i/3*3+j/3)个九宫格内*/
if(rowValid[i][num]||colValid[j][num]||subBoardValid[k][num])/*如果在未赋值之前就为true,则说明发生了重复*/
return false;
rowValid[i][num]=colValid[j][num]=subBoardValid[k][num]=true;/*如果未重复，则将其赋值为true*/
}
}
}
return true;
}
};


# 202. Happy Number

Write an algorithm to determine if a number is “happy”.

A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.

Example: 19 is a happy number

1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1


/*solution1 use unordered_set,7ms*/
class Solution {
private:
int divideThenSum(int n){
int tmp=n,sum=0;
while(n){
tmp=n%10;
sum+=tmp*tmp;
n=n/10;
}
return sum;
}

public:
bool isHappy(int n) {
unordered_set<int> hash;
int res=n;
while(true){
res=divideThenSum(res);
if(hash.count(res)==0)
hash.insert(res);
else
return res==1;
}
}
};



AC之后又进行了更深一步的思考，既然是周期现象，那么也可以尝试一下Floyd Cycle Algorithm，即我们在判断链表是否有环时使用的算法(快慢指针法),代码如下:

/*solution 2,use Floyd cycle algorithm,4ms*/
class Solution {
private:
int divideThenSum(int n){
int tmp=n,sum=0;
while(n){
tmp=n%10;
sum+=tmp*tmp;
n=n/10;
}
return sum;
}

public:
bool isHappy(int n) {
int slow=n,fast=n;
do{
slow=divideThenSum(slow);
fast=divideThenSum(divideThenSum(fast));
}while(slow!=fast);
return slow==1;
}
};


# 裁员浪潮+寒冬大逃杀，互联网人该何去何从？

F的经历，可能只是一个缩影。在2016年遭受到公司动荡和业务调整的互联网从业者们，我相信多不胜数——你可以想见，上市公司尚且如此，何况其它？

◆ ◆ ◆ ◆ ◆

F的状态，是典型的一种新人容易出现的问题——我们总是太容易被很多概念所消费，从而变得喜欢去关注概念和大方向这样宏观的东西，但如果你实际的从业经验连3年都不到，这个时候的你很可能是还不具备能力去理解和思考这些概念背后的一切的。

◆ ◆ ◆ ◆ ◆

2012年以前，我自己顶天还只算是执行力还不错的运营小白。2012年开始，我和几个朋友一起创业做了个不靠谱的项目，但项目虽然不靠谱，我却成功在2年左右的时间里找到了很多空间，在局部做出来了很多还不错的产出，比如说花不到2000块钱搞了个活动，拉了一万多注册用户；比如说牵头搞了个收入项目，带来了几十万收入，等等。

◆ ◆ ◆ ◆ ◆

◆ ◆ ◆ ◆ ◆

◆ ◆ ◆ ◆ ◆

# 焦虑！焦虑！焦虑！焦虑就快把我们逼疯了

01

02

36kr的创始人刘成城曾经在一次采访中这样说道：

“当时微信还是一个很小的团队，但是我们对它很有信心，主动为他们做了很多报道，建立起了深厚的革命友谊，所以，微信公众号内测的时候我们就受邀加入了内测。不仅获得了一天可以发布10次内容的特权，而且第一天就获得了10万多名粉丝。”

85后，90后，95后甚至98年的妹子纷纷被资本和媒体捧上神坛：

03

04

05

# 347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements.

For example, Given [1,1,1,2,2,3] and k = 2, return [1,2].

Note: You may assume k is always valid, 1 ≤ k ≤ number of unique elements.

Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.

## 哈希表+堆

class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> hash;
vector<int> res;
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> heap;/*第一个参数指定元素类型，第二个参数决定使用哪一种容器，
第三个用于建立小顶堆*/
for(auto num:nums)
hash[num]++;
for(auto pos : hash){
heap.push({pos.second,pos.first});
if(heap.size()>k)
heap.pop();
}
while(!heap.empty()){
res.push_back(heap.top().second);
heap.pop();
}
return res;
}
};