Wednesday, April 25, 2018

Being interviewee: Word count practice

April 25, 2018


It is my favorite algorithm but also it is hard to write a complete solution in 30 minutes. The algorithm is to lower the sentence, remove special char \', and then split words by delimiters such as chars in the string " .:;,!", and then save the words to the dictionary, and then sort them by value. From the dictionary, apply the sentence word order, save words in the bucket to apply bucket sort, and then output in descending order of value.

Mock interview

I tried to write the code and pass test cases in 38 minutes, but I could not make it. After the mock interview, I spent over 20 minutes to debug and fix bugs in two places.

Here is C# code written in today's mock interview 8:00 PM. On line 48, I need to remove the statement: if(item.Length == 0), actually the statement: continue is deleted by cleaning process; and on line 106, the word may not be in the dictionary.

And here is C# code written after the mock interview to fix the bugs.


It is such a nice experience to practice the algorithm with a software engineer from I was asked if I work for Microsoft since I choose to use C# programming language. I couldn't believe that the peer wrote the optimal solution quick and correctly. I just could not believe that I keep meeting a very talented programmer again, in an ordinary Wednesday. I spent 38 minutes on my algorithm, the peer spent less than 20 minutes on his algorithm meeting planner.

Action items

I need to design some drills for me to work on those algorithms similar to those mock inerview algorithm, play with the error message, so I can think about how to identify issues quickly once I read some error message.

Train myself to read the error message, and also get used to pinpoint the place by interpreting the error message correctly, specially for those error message without line of code information.

My ideal practice is to fix bugs in one minute. I should be able to quickly identify the code's issue.

Tuesday, April 24, 2018

FLAG salary research

April 24, 2018


It is so interesting to have a mock interview this 8:00 PM. The peer told me that I am such a nice algorithm and data structure teacher, I should go for a teacher job. No one spends over 3 years to learn algorithm and data structure so well. I laughed about it, and then I said that the teaching is paid by a course.

We had a few minutes to discuss about the code review, what kind of feedbacks I got from the Sudoku algorithms?

So my research of today from 10:50 PM - 11:10 PM twenty minutes is about the salary of FLAGS. Let me review the article again. Here is the link.

FLAGS salary

Here is the article in Chinese.

Being interviewee: Busiest time in metro town

April 24, 2018


It is the algorithm I like so much called linear scan algorithm, by checking next row to make sure that current time stamp is the last row to finalize count of people left in the mall.

Mock interview

I had good time to write and test the code. I tried to write down some notes before I wrote the code in the mock interview.

Here is my C# code. Here is my feedback.

Being interviewer: Sudoku solver

April 24, 2018


It is so interesting to meet the peer second time in less than a week. I had good time to learn Go language through the peer's performance. One major advice I had after the peer ran the web compiler test cases is to add back tracking on line 35, so the code could pass all test cases. I explained to the peer that parent node will ask child node to back track the element to its original dot value since parent node will try its next option.

Mock interview

This mock interview is so much fun, since last time I was complained not to give out any hint, leave first 30 minutes for the peer to reach his full potential. The peer gave the time complexity analysis and mentioned that he learned the recursive tree through cracking code interview book.

Here is Go code I reviewed, which also passes all test cases.

10+ rounds of mock interviews

April 24, 2018


It took me more than one hour to figure out how many rounds of mock interview I had starting from March 2016. I learn that it is important for me to get organized, and try to get some insights from those mock interviews.

Mock interview 

Here is the summary to show my ten rounds of mock interview.

Learning is so much fun

I used to attend church and had good time in Willingdom small group from 2010 to 2015. I used to go out with over twenty people to hiking and enjoyed trails near the city of Vancouver. But I never imaged that learning algorithm and data structure can be the similar experience. You can learn from the peer and also I have to force myself to learn those 30 algorithms again and again.

Bible teaching always uses seven to remind us to forgive a person. But learning algorithm Leetcode 10: regular expression matching takes me more than 7 times, more than 14, 21 times. With so many peers to work together on the algorithm, I start to think and understand how I learn the algorithm thoroughly. That is a lot of hard work and a lot of patience to allow myself master the algorithm.

C# source code

It takes time for me to put together all C# source code I wrote for each round of mock interview. Here is the folder to check on github. I will add one by one for each algorithm or all algorithms for each round.

Monday, April 23, 2018

Being interviewee: Find smallest subarray length containing all numbers in target array

April 23, 2018


It is the classical algorithm called find smallest substring containing all keys. I have practice the algorithm over ten times last 12 months. I learn so many things through the practice, and it is my most favorite algorithm.

I wrote an algorithm using exactly same idea to apply to integer array.

Mock interview

Here is my C# code.

Follow up after mock interview

It took me a while to write and simplify the code from line 60 to line 66 during mock interview. What I did is to go over in detail if the left char of sliding windows is not in the dictionary, or in the dictionary. And then discuss one step a time.

Other way to think to expedite the process is asking myself four critical question:
1. When to break the while loop 51?
2. When to decrease the variable numbersFound
3. when to decrease the dictionary for the key if the left char is in the dictionary
4. Please move the left point one step forward to start a new sliding window

Being interviewee: Find smallest length of subarray

April 23, 2018


I spent 30 minutes to write a brute force solution and I learned something from the interviewer.

Mock interview

Here is my C# code.

Follow up after mock interview

My mock interview experience is very good learning experience. First of all I made a mistake on brute force solution. The subarray should start with value equal to first element of target value, and the last value should be equal to the last element of target array. 

What I did is wrong. Any position of the array can be start of subarray, any position of the array bigger than start value can be the end of the subarray. I did not consider the target value to filter out those unmatched values. 

The time complexity of brute force should be O(n^2) instead of O(n^3). 

After line 76, I should add one more statement.

77   break; 

What if

It is the first time I experienced the strong connection to one of peers I met on mock interview. Since we practiced mock interview together more than three times, I know that he is my best connection right now.

It does not matter how good I am, if I keep meeting strong players on the market to prepare next important phone interview or onsite interview, I will definitely learn how to catch up to match the skills of peers.

This year 2018 is so special. First three months I experience over 10 people to prepare for Google onsite or phone screen, I did tell myself calm down, and learn from those peers, and also ask myself what to work on. I remembered that I thought about a dynamic programming algorithm while I took skytrain to Vancouver donwtown Microsoft to attend a hackerthon event, I was busy thinking about the solution.

My training of 2018 first 3 months are top of world classical training, I only used two mock interview platoform and then I connected to peers over the world. I believe that best of training or education of algorithm and data structure I got for myself is such revolutional, and help me to gain so rich experience.

It is most exciting part of my life as an adult last 8 years.

Leetcode 140: word break II

April 23, 2018


Here is one post I like to study for Leetcode 140: word break II. I need a few hours to play with the algorithm so that I can understand better.

David Anderson: A well-written article about Amazon leadership

April 23, 2018


It is 12:20 AM, 20 minutes past 12:00 AM. I could not stop reading the article written by David Anderson. I like the article since I like to be a better engineer. I like the great thinking and reasoning in the article.

Reading time

Here is the article link.

Sunday, April 22, 2018

The friendship

April 22, 2018


I like to write a blog on the friendship over 30 years. My college classmate from 1984 to 1988 visited Vancouver in March 2018, and then I also had chance to visit Shanghai, and enjoyed the visit of my friend's home in Shanghai near high speed railway station. It takes 8 minutes to Pudong international airport from LongYang station to the airport.


I like to write something about friendship. Life is such a great teacher.

Amazon architecture

April 22, 2018


I like to plan to learn some system design in next four weeks. I know that it is so challenge to do very well on system design. I like to read some article and at least I learn a few concepts first.

Here is my first step to learn system design on April 22, 2018.

Amazon architecture 

I like to read the article called Amazon architecture.

Being an interviewer: Get A different number

April 22, 2018


It is my 10:00 PM mock interview on April 21, 2018. I had chance to observe how the peer wrote the perfect solution.

Mock interview

Here is C# code I reviewed. On line 32, I advised the peer to extract an explanation variable so that the code is more readable.

Being an interviewee: Array quadruplet

April 22, 2018


It is my favorite algorithm called array quadruplet. I did talk about the analysis of the algorithm and then wrote down the algorithm without any bug and pass all test cases first time. Only thing I did is to include library using ..., I explained to the peer that I have worked on the algorithm multiple times, but one time a young lady who was preparing facebook onsite, she told me that I should simplify the code to check if dictionary contains key or not. So I only need to write three lines of code from line 57 to line 62, before I need to write if/ else and then update list in both cases.

Mock interview

Here is my C# code.

I still remembered that the first time I worked on the algorithm on mock interview platform. I had such difficult time. After I worked with over ten people on this algorithm, I followed every peer and understood how they think and analyze. So it is also very good experience to help the peer to work on the algorithm the first time. Here is the blog I wrote to give the feedback to the peer. 

Being an interviewer: BST inorder successor

April 22, 2018


It was my 6:00 pm mock interview. I had chance to help the peer to come out the solution in 40 minutes. I enjoyed to be an interviewer and then helped the peer to come out the optimal solution.

Sometimes it is so relaxing to watch how the peer worked hard, and then took hint quickly and reached the optimal solution.


Here is the feedback I wrote on mock interview platform. I like to encourage the peer to work hard.

Things you did well

The peer took the time to think about the solution, started from inorder traversal and then moved to optimal solution by going up or down through height of tree to search. The peer wrote the code with bugs, and then worked on cleaning and removed all bugs and redundant code. 

Good thing the peer did is to stay calm, and also very good communication with the interviewer. The peer took hint quickly and then worked on the detail. It is very good to be able to come out the correct solution first time. 

The peer tested code with four test cases and make sure that the code works perfect. 

Things you should work on

Recommend the peer to work on more mock interviews. There are a lot of talent people out there, you will meet a lot of peers and then find ways to improve and go above the average performance. Work hard! 

You as an interviewer

I presented two solutions, and then the peer chose one for me to write. Also the peer asked a few questions and I think that the peer is very curious and like to improve. Good to work with the peer. 

C# programming language

April 21, 2018


I like to do some research how to advance my C# programming skills before I have to move on Java programming language.

I used to tell people and stop learning C# as C# programmer, I rate myself 7 instead of 9 or 10 last July. I know that it is very challenging for me to be trusted to write solid code using C# programming language for a medium size software company.

How to advance my C# skills?

I bring up the topic and will look into next week.

Saturday, April 21, 2018

Being an interviewer: Sudoku solver

April 21, 2018


It is challenge for me to train myself to be an excellent interviewer. I noticed that I checked wechat and read my own blog while the peer worked on C++ code. The first 30 minutes the peer could not pass all test cases, I told her that I am not in the rush, let me review her code and find the bug together.

The problem is that I should give the peer hint every step she writes the code, and point out the bug in her process. But the peer was trained and advanced to ICPC national contest in Brazil, and she wrote the idea kind of new to me. I let myself skip the whole process, and then catch up last minute how the code works. Specially she got some help from a friend to play world contest of ICPC.

Mock interview

Here is C++ code. I learned a few things about C++ through mock interview. The peer told me that in C++ 1 means false.

I ended up talking to the peer one hour 40 minutes. She is preparing Microsoft onsite interview in May. I definitely learn a few things through her practice. I understand that ICPC contest is really good tool to help students to advance their problem solving skills in quick and efficient ways, specially before they start to work full time as a software programmer.

Highlights of code review:
1. line 6, k argument is not meaningful, it should say something like digit.
2. line 14, the peer mixed col/3 with row/3.
3. line 61, the peer told me the failed test has two 9 in the same column, so the call of fill should be checked and return false if the duplicate is found.

Being an interviewer: Find overlap interval

April 21, 2018


There are a few challenges for me to be a good interviewer. I learn from every mistake. But today I made a few mistakes when the interviewee worked on the algorithm called find overlap interval.

The peer complained to me that I should give the peer chance to get the job, ace the interview, solve the problem. If there is the bug, I should give the hint and let the interviewee solve the problem. There are 30 minutes limit, he still has time. I cannot just give out the solution without considering being a good interviewer.

I learn a few things about Go as a language, and also I learned a few things about being a good interviewer.

Mock interview

I made a mistake and lost the Go code I reviewed.

Being an interviewee: Deletion distance

April 21, 2018


It is 10:00 PM mock interview and I had to work on deletion distance algorithm. The peer asked me if I worked on the problem before, since I did very fast. I finished the analysis in less than 10 minutes, I went over the test case "heat" and "hit", and built up a dynamic programming table from scratch. I certainly told the peer that I worked on the algorithm more than 10 times, each time there is a new issue coming out.

I started to code and passed my test case and all test cases on the platform. And then I had a chat with the peer. The peer had very good leadership skills, he showed me how to explain things crystal clean, pay attention to the intonation, kind of like exaggeration.

I told the peer that people complained to me speaking too fast, my sister with over 30 years teaching experience complained to me that I was not in the same channel, sometimes I let my mind shift away. I do not answer people's question directly, rambling, or change the topic without any conscious. I am still working on it.

Sometimes I notice that I do not focus on one thing, do multiple things in the same time. In terms of mock interview, I have to respect the peer, stop playing wechat or checking my email or my blog while the peer is coding.

The peer is very considerate and supportive, he said that it may happen to him as well.

Mock interview

Here is my analysis and C# code.

Being an interviewee: Leetcode 10: regular expression matching

April 21, 2018


It is hard level algorithm called Leetcode 10: regular expression matching. I had a mock interview 8:00 PM and the peer told me that I should hurry and complete everything in 30 minutes. I did finish coding and ran my own test case. But my code failed last test case "abaa" with pattern string "a.*a*".

Mock interview

I had difficult time to play with dynamic programming table. I have to match the index of text and pattern string to the dynamic program table, and then I need to build the recurrence formula.

Being a programmer, I learn to be patient again since I could not memorize the thing. I have to make mistake first and run a few simple test cases and fix the bug.

Here is my C# code.

The first twenty minutes was so exciting and nerve breaking. I just write down what I like to do. For example, I wrote something like // base case "" match "a*" or "a*b*", and then I can write code by looking up the comment.

I confused myself about -1, so I wrote down on line 20 as a comment, // pattern[col - 1].  Because I cannot declare an explanation variable because it may be out-of-range of the array. On line 21, I wrote down dp[0, col - 3] which should be dp[0, col - 2] because I confused dp table index with pattern string index.

It is kind of training I like under stress, work on whiteboard, and also work on communication with the peer, manage the peer to make sure the whole process is up to standard.

I wrote a comment like the following:
// base case "a" does not match "" - do not need to do anything - default false

Good thing I did in the mock interview is to run a few simple test case first. When I ran the test case "b" match "b*", I ran into index-out-of-range error, so I fixed the bug on line 21.

My code passes all four test cases I wrote, but failed mock interview platform test case: "abaa", "a.*a*".

Bug fix 

Here is the code I fixed the bug. All my practice on Leetcode 10: regular expression matching can be looked up here.

Please compare my last practice March 29, 2018, here is the blog.

How to deal with tough interviewer?

I had a peer who has more than five year work experience at Microsoft. He is very strict on time limit 30 minutes, so I was in the rush to complete the code and run test cases. At the end of 30 minutes, the interviewer told me that he was very happy for my performance, and he thought that I should be able to fix the bug quickly.

Over 250 mock interviews

April 21, 2018


Once a while I like to do a small research, write something for an interesting topic. I have completed more than 250 mock interviews. I have reinvented myself by getting connected to the world.

Stay connected

I was so busy in weekends and evening, I booked the mock interview on a few platforms, and in-between I had some one-to-one session mock interview to help a peer to prepare for important interview.

I used to stay alone and do not talk to people about coding every day. Somehow I have some bad habits formed and then I got complained about.

I used to call my mom every day from 2000 to 2010. I do not have a person to call every day. My sisters are super busy and they do not like to take my calls. One time my sister told me that I called her more than 3 times when I tried to plan to travel to China. Now I call her zero time and I just go ahead to plan things better and efficient.

I like to check wechat or website daily. I attend church and get connected to friends regularly. But I like to get more connected to the world, specially those hard working people, where to find those people?

Mock interview

It is not easy to write down every mock interview practice. I was too busy and I did give over 10 mock interview as an interviewer to ask same algorithm "Spiral matrix print". I did not write down one blog for each mock interview, good thing is that I can replay the video on the mock interview platform.

Being an interviewer: Decrypt the message

April 21, 2018


It is 12:00 PM mock interview. The peer worked on the algorithm called Decrypt the message. I noticed something is different. The way the peer presented the algorithm is so clear and then I know that I met a very talent programmer.

Mock interview

I also joined the analysis of the algorithm with the peer. We talked about the difference between those numbers on line 8 and line 9.

Here is the analysis and python code. The peer managed to pass all test cases.

Being an interviwee: Root of a number

April 21, 2018


It is 12:00 PM mock interview. I have experience to work on the algorithm root of a number over 10 ten times, 5 for interviewer, 5 for interviewee. The peer has strong talent with 1st place twitter big data hackathon. The peer worked on decrypt the message algorithm first, I rated him top 5 - 10% in all over 200 peers I worked last 12 months.

Mock interview

I like to write a binary search and also apply some technique I saw recently using integer to count the numbers.

The peer challenged me about the termination base case, 0.001 is the error range, how I assert that two values are equal using 0.001?

Here is my C# code.

Being an interviewee: Find the duplicate

April 21, 2018


It is my algorithm called Find the duplicate in two cases, both sorted arrays has the size close to each other, or one is much larger than the other one. I had the mock interview, after the peer solved the Sudoku solver, I solved my algorithm next.

What I did is great, I gave the analysis of the algorithm for those two cases, I wrote down the analysis from line 95 to line 110. But I came cross a bug of out of memory for my solution to use two pointers. Usually it is show time for me to solve the problem in one try, less than one minute.

Based on my past experience, I was complained one time by a Ph.D. student of University of Florida who prepared for Google phone screen, he told me that I should focus on the error message, and then think about the possible places for the bug. Do not do wild guess trouble shooting.

Related to out of memory bug, it is not index-out-of-range, what is possible reason?

Actually it is a dead loop, but I turned to my first thought. I wrote brute force solution to replace duplicate.ToArray() on line 40 instead at the first try. I did not use my analysis in this trouble shooting.

After more than 250 mock interviews, I found another issue today for my practice.

After a few minutes, the peer told me that I missed two lines of code if the duplicate item is found. I need to advance two pointers.

Code review 

Here is my C# code and the code passes all test cases.

Being an interviewer: Sudoku solver

April 21, 2018


It is my 10:00 AM mock interview. The peer worked on Sudoku solver, and then he chose swift language. What he did is to check given numbers on the board are following the rules - row/ column, small grid 3 x 3 matrix not duplicate.

The code he wrote for preprocessing is kind of buggy, so we started to talk and communicate on this piece of code. And then I told him that most of people do not do this preprocessing.

The interviewee wrote code but could not pass the test case, and then I walked through the code, and pointed out on line 18, variable name i is used the second time.

Code review 

Here is the swift code I reviewed for the peer as well. The code passed all test cases.

I gave the advice to write readable code, use meaningful variable names, and also I advised the peer to communicate more with the interviewer. I told him that I met a young master graduate, who was preparing Google onsite, and then he got offer. When I mocked interview him, he kept asking me "am I in right check", "do you think that my coding looks ok", he has determined goal, to write code to pass all test cases he prepared, he likes to develop a complete solution in less than 30 minutes.

I had a small chat with the peer who is preparing Uber phone screen. The peer got the Amazon offer but chose another offer a few years ago. Interesting story, a small world, stay anonymous, smart and hard working young programmer.

Friday, April 20, 2018

Fall in love with marathon

April 20, 2018


It is the first time I start to look into how to run marathon, since I have hay fever recently and it brings my concern how to overcome the difficulty. I had chance to talk to one of my friends in 30 years reunion, and he shared his experience to run marathon.

Thursday, April 19, 2018

Leetcode 126: Word ladder II

April 19, 2018


It is the hard level algorithm and I like to spend time to go over a few more ideas through Google search and Leetcode discussion panel. What I like to do is to go over more detail how to address time and memory limit exceeded problem.

I spent over 30 minutes already to go over my past practice and a few ideas, I like to go over this blog.

Algorithm practice

I like to go over the notes written in Chinese in the blog, and then rewrite some of them, make it my own.

As a programmer, most of important for me right now is to be a good thinker. I like to search the blogs and find the idea to help me think clearly. Here is the notes:

LeetCode中为数不多的考图的难题。尽管题目看上去像字符串匹配题,但从“shortest transformation sequence from start to end”还是能透露出一点图论中最短路径题的味道。如何转化?

1. 将每个单词看成图的一个节点。
2. 当单词s1 改变一个字符可以变成存在于字典的单词 s2 时,则s1与s2之间有连接。
3. 给定s1和s2,问题I转化成了求在图中从s1->s2的最短路径长度。而问题II转化为了求所有s1->s2的最短路径。

How do I go over the notes above? 

1. Google search the shortest path in the graph. 
2. How to define a graph? Every word is a node in the graph. 
3. Node s1 and node s2 have a connection -> how to define it?

Let me work on the notes in the following:


1. 如何找到与当前节点相邻的所有节点。
(1) 遍历整个字典,将其中每个单词与当前单词比较,判断是否只差一个字符。复杂度为:n*w,n为字典中的单词数量,w为单词长度。
(2) 遍历当前单词的每个字符x,将其改变成a~z中除x外的任意一个,形成一个新的单词,在字典中判断是否存在。复杂度为:26*w,w为单词长度。

2. 如何标记一个节点已经被访问过,以避免重复访问。

3. 一旦BFS找到目标单词,如何backtracking找回路径?

Wednesday, April 18, 2018

Celebration of 30 years graduation

April 18, 2018


It is the reunion to celebrate the birth of Shanghai Jiaotong university 122 years, and also we met in Shanghai to celebrate 30 years since we graduated together back in 1988 with mathematics degree, we stayed together from 1984 to 1988, and took all courses together. For my case, I stayed with other six girls in the same dorm, and we discussed so many math problems together, and we went out together for so many activities. 

One picture

One thing I like to do is related to my experience to the current China highly developed as a country and also open to new entrepreneurship. What I like to do is to relate my class 70141 to one of top celebrity in Forbes 2018, therefore it is very easy to make connection to the whole world, how education helps people to grow, nurture future leaders and motivate each other to work hard.

I sat in the front row, and rest of my class was in the classroom, including the third row Shen Neil, a billionaire and a Yale graduate. Great thanks to the math professor Xiang Longwan, our instructor of mathematics course took the picture and shared with us after 30 years, on April 14, 2018. My favorite reading of professor Xiang is here, who wrote the recommendation letter for my Florida Atlantic University mathematics Ph.D. program back in 1996.

My favorite reading from Shen Neil is here.

One week China vacation

April 19, 2018


It is so interesting to write down my one week vacation experience from April 12 to April 18. I learned so many things from my classmates, Shanghai Jiaotong University alumni. We got together from April 13 to April 15, 2018.

Leetcode 359: Logger rate limiter

April 18, 2018


I just came back to the city of Vancouver, Canada this April 18 around 1:00 PM. I had so exciting one week vacation, using Air Canada, GaoTie train with speed over 250KM/ h, and met so many friends in the class of SJTU 70141. We shared stories and fond memory, one of professors showed up a picture of whole class, I sat in the front row, I could not believe that every one of us found in the picture, laughing and such great experience.

One campaign I like to do is to work on ten algorithms to celebrate the China vacation. Also I like to see ideas to recover hay fever I still have and hopefully I can recover sooner and go to work healthy. I have to work on seriously to recover.

First algorithm

It is the algorithm I choose to work on after one week vacation from China. First, I like to study one of blogs related to the algorithm. Here is the blog's link.

I like to go over the blog about Google onsite interview, and find some interesting algorithms to work on.

Tuesday, April 10, 2018

Being an interviewee: Find the duplicate number

April 10, 2018


It is my favorite time to play mock interview with a peer third time. I know that it is very hard for me to improve a lot in less than one month. The algorithm I was asked is to find the duplicate number.

Mock interview

Here is my mock interview transcript. I will add some notes later.

Being an interviewer: Find the duplicate number

April 4, 2018


The algorithm is my favorite one. I learned a few days ago by a peer, he tested my algorithm problem solving. Here is the quora's link related to the algorithm.

In order to learn better on the algorithm, I gave it to the peer who is preparing Google onsite. I like to figure out how he will solve the problem.

Problem solving

Here is the script for the mock interview. I will write down a few lines of notes for the mock interview later.

Being an interviewer: Leetcode 84: Largest rectangle in histogram

April 10, 2018


It is my favorite algorithm and it is hard level algorithm in I chose this algorithm to interview a friend met on mock interview. He is preparing next week Google onsite, and I gave him another hour mock interview.

I practiced the algorithm recently, but I found out that I still missed something important. The optimal time complexity is O(n), and it has to use stack to save the index of rectangle left boundary when ascending. The stack is always keeps non-descending heights. Here is the link for my past practices.

Learning is fun

The peer is very organized and also very good at explaining the algorithm. I specially like the way he structured the content.

Here is the script for the mock interview.

Sunday, April 8, 2018

Missing Florida summer 2009

April 8, 2018


I spent 14 years to live in Florida from 1996 to 2010. I miss the fun to live in the city of Boca Raton and like to document some fun memory. I also like to clean up all photos and videos I took for those years. I like to get some idea how to make good memory for my life events.

Florida Atlantic University campus

Saturday, April 7, 2018

2010 Buntzen lake hiking trip

April 7, 2018


It is such a fascinating world. I had such great time in Florida from 1996 to 2010, I always stayed near Florida Atlantic University campus, so I worked on my computer science PH.D. study from 2001 to 2010, so I hanged out with Ph.D. students and scholars all the time. I landed to Canada in April 18, 2010. At that time, I did not have a job waiting for me, I just landed as a permanent resident.

In May 24, 2018, after one month I landed in Vancouver, looking for a software programmer job in the city of Vancouver. I was invited to go out hiking with my Shanghai Jiaotong university's classmate Zhuang and her family.

First time challenge

I used to stay in Florida all the time. So it is so surprising that I had difficult time to do hiking trip with a group of 20 people. So amazing, I experienced the joy and nature beauty of Canada and people I started to get to know.

At that time, I only had two Shanghai Jiaotong university graduates I knew working in the city of Vancouver.

Instagram photos

I like to post some photos for the hiking trip. And also one video.

I like to take some break and think about how important it is to enjoy a Saturday, hold on my plan to work on mock interview, algorithm problem solving, course responsive website etc.

One video - I like my voice

I talked to my roommate Emma and she said that my voice is not aging at all. I like my voice. Here is the video I recorded at the top of mountain with my friend Zhuang and all other families. I missed the fun.

Count down China vacation

April 7, 2018


I will have a very short vacation to China this April 12 to April 18. This is the first time I made the choice to vacation in April.

First of all, we have get-together after 30 years, we graduated with applied mathematics from Shanghai Jiaotong university. We chose one week just after Shanghai Jiaotong University 122 years birthday April 6 celebration.

I spent a lot of time to read wechat group 500 people of Shanghai Jiaotong university just setup for Shanghai Jiaotong university 1988 graduated students. Suddenly, I had to challenge my memory to recall all those faces. I have no clue who they are. But once the pictures together with 30 years before/ after, my memory is coming back.

Life is such a beautiful thing with so many talent friends graduated in 1988 sharing the memory together using wechat.

Not all of us are huge success and very good career. We do have some of us to complain that they work for the big manufacture business, and went through the hard time to lose the stable job, and then the transition to the challenging life.

But we do have a lot of successful stories, in my class 70141, there are principal scientist, professors, deans of universities, math teacher and bankers one of 3600 banks in China top executive etc. We are lucky since we chose to study mathematics,  we had less than 30 people in the mathematics major in Shanghai Jiaotong university admitted in 1984. But at that time, we have more than 6 class of mechanical engineering major, material science major etc.

Friday, April 6, 2018

Leetcode 312: Burst balloons

April 6, 2018


It is a hard level algorithm, so I like to work on the algorithm over ten times. I like to spend time to read this blog written in Chinese, and then try to understand better about the algorithm.

Here is the gist I created for blog study.

My favorite algorithm

It is the first time I read this analysis in Chinese. I could not believe that the analysis is such a good one.

I have to learn how to break into two subproblems and also two of them are independent.

Algorithm study: 95 algorithm videos (VV)

Algorithm study: 95 algorithm videos (VIIII)

Algorithm study: 95 algorithm videos (VIII)

Algorithm study: 95 algorithm videos (VII)

Algorithm study: 95 algorithm videos (VI)

Algorithm study: 95 algorithm videos (V)

Algorithm study: 95 algorithm videos (IV)

Algorithm study: 95 algorithm videos (III)

Algorithm study: 95 algorithm videos (II)

April 20, 2018


It is hard level algorithm called Leetcode 312: Burst Balloons. And the video is 20 minutes, I spent the time to watch the video, staying at home for one day vacation. I enjoyed the learning of the algorithm.

It is interesting for me to learn the dynamic programming through the video. I like to evaluate the author and see how good he is. I know that he is working for Facebook.

Leetcode 312: Burst Balloons

I like to talk about a screenshot and discuss the layout of dynamic programming algorithm presented by basksetwangcoding.

First step, I need to define state for the dynamic programming algorithm.

Next step, I need to define initialization step.

Third step, I need to define the function, problem and subproblem how to connect each other.

[left][right] = Max(i: [left + 1, right - 1])

For each subproblem, coin[i] * coin[left] * coin[right] + [left][i] + [i][right - 1]

Fourth step, I need to define result: [0][n - 1]

I need to put together a simple example to explain the solution to the peer. Here it is the example:

  1    2    3    4   5   6   7  8  9

Algorithm practice

Here is my C# practice.

Algorithm study: 95 algorithm videos (I)

April 6, 2018


It is a hard level algorithm called Leetcode 312: Burst Balloons in I like to study the algorithm again by watching the teaching video here.

I could not believe that I finally have time to write code for the algorithm on April 25, 2018.

Leetcode 312: Burst Balloons Algorithm practice

I started to work on the algorithm on April 24, 2018. I have to learn the algorithm by working on a simple test case [3, 1, 5, 8] with the maximum value 167 based on Leetcode 312 problem statement. What I did is to write C# code based on the idea based on the video provided by a facebook engineer.

I calmed down and thought about how to write this dynamic programming solution, I told myself that I should take the time to think and do not rush, read other people's source code.

Basic ideas are simple. Define the base cases first, and then bottom up build the dynamic programming table.

I spent more than 40 minutes to write down the code on the paper. I put the code in Visual studio and debug the code. Apply the test case [3, 1, 5, 8]. But the code does not work, the value is much bigger than 167. Actually it is 218.

Here is my C# practice with some bugs. I need to figure out my problem in the algorithm. 

I could not believe that I could not count the correct number. The number is too big. In theory, it should be the error from the base case, the logic of recurrence is simple and I copied from the facebook engineer presented in the above video. But I need to train myself on this bug finding process. 

Find the bug

It is time for me to read discussion panel of Leetcode 312, I read a few of them, but the dynamic programming idea is different. So I continued to google and read a few blogs. One of blogs is very good since the blogger works for Microsoft.

But I still could not apply my case. The dynamic programming method in those blogs are inclusive, not exclusive.

Questioning the base case

Finally I started to question my base case, what is the value dp[i, i+1], in other words, keep ith and (i + 1)th balloon, then there is no balloon to burst. My answer is numbers[i] * numbers[i + 1], that is too much. So I changed to one. I ran the code still not the correct. So I finally know that it should be 0.

Although it takes me a lot of hours to learn the algorithm, but I think that I do right thing for myself.

Here is my C# code to pass Leetcode 312 online judge.

Thursday, April 5, 2018

Algorithm study: 95 algorithm videos

April 5, 2018


It is very surprising that those videos are very well prepared by a facebook engineer in Chinese language. I really like to learn something from the teaching.

Here is the video feed. Here is the author's profile on

10 most favorite algorithms

I like to choose my 10 most favorite algorithms and write down some notes here. I like to study some algorithms so that I can prepare some good questions to be a mock interviewer for a peer who prepares for Google phone interview second round.

I just could not believe that I had last 2 mock interviews as interviewer, and two peers are preparing for Google onsite in a week. I can tell how good they are to prepare for the interview.

Leetcode 84: Largest rectangle in histogram

April 5, 2018


It is time for me to learn this hard level algorithm again. I know that it takes at least 10 practice for me to learn a hard level algorithm. Today I chose to study the video prepared by basketwangcoding in Chinese. My last practice was on January 18, 2018. Here is the blog.

30 minutes video lesson

I like to write down some notes from the lecture.

Brute force solution

In order to learn the algorithm very well this time, I like to work on the test case, [2, 4, 6, 5, 3], explain to myself how to solve the algorithm using O(n^2) brute force solution first.

How many rectangles to be calculated? What is the maximum rectangle area's value?

Iterate the end position from i = 0 to 4.

i = 0, the rectangle is 2.
i = 1, the rectangle is 4.
i = 2, the rectangle is 6.
i = 3, the rectangle is 5 + 5 = 10
i = 4, the rectangle is 3 + 3 + 3 + 3 = 12.

So the maximum rectangle is 12.

For each end index, we can go backward to search until the array's value is less than end index's value.

Or I also can think about the alternative idea. It is to iterate the start position from i = 0 to 4,

i = 0, the rectanlge is 2 + 2 + 2 + 2 + 2 = 10.
i = 1, the rectangle is 4 + 4 + 4 = 12.
i = 2, the rectangle is 6.
i = 3, the rectangle is 5
i = 4, the rectangle is 3

Being interviewer: Leetcode 250: Count univalue subtrees

April 5, 2018


It is my favorite algorithm in March, 2018. I had two practices on this algorithm, one is to write the algorithm in 30 minutes mock interview, and the second one is to review the peer's practice. I chose the algorithm to interview the peer on April 4, 2018 10:00 PM, but I could not give out the solution based on the peer's code.

Follow up 

Here is the code I reviewed in mock interview. The peer asked my advice, but I could not tell at that time the code was bug free.

Now it is 9:20 PM April 5, 2018, I like to write a C# solution based on the simple idea, using negative to represent that the tree does not have same value. Here is my C# code.

Wednesday, April 4, 2018

2,000 Things You Should Know About C#

April 4, 2018


I was asked in my mock interview as an interviewer a few days ago, what language I will use in mock interview. Python, Java, JavaScript are mainly choices. I chose to use C# language.

In order to learn C# better, I spent a few hours in the morning to go over items in basics catalog on 2,000 Things You Should Know About C#.

C# reading 

Here are the items I plan to study again. I like to learn C# even I am very busy. Just work on 2,000 things, work on a few items every day. Adobe muse building responsive single page website

April 4, 2018


It is time for me to spend two hours to work on the course called: Adobe muse building responsive single page website.

Being interviewer: Leetcode 54: Spiral matrix print

April 4, 2018


It is the algorithm for me to give the mock interviewee to work on back to Feb. 14, 2018. I just noticed that the interviewee joined the top software company MTN recently. So I spent time to replay the video and also wrote a C# practice based on his practice. It is very easy to tell from the video that the peer had very good problem solving skills.

Code review

Here is Java practice code I reviewed. I like to practice it using C# as well.

Feedback I gave

Here is the feedback I gave out on Feb. 14, 2018 after the mock interview. 

Tuesday, April 3, 2018

Leetcode 282: Expression Add Operators

April 3, 2018


It is hard level algorithm. I like to study the algorithm so I searched the discussion panel. I found one link with very good comment, here is the link.

Code study

I like to prepare an algorithm for my 10:00 PM mock interview as an interviewer. I like to try a new algorithm, and also I like to learn quickly through the mock interview as well. Now it is 9:29 PM.

First, I have to understand how to handle multiplication. Here is the link to give out the explanation.

If you want to add a * between 3 and 4, you would take 3 as the digit to be multiplied, so you want to take it out from the existing eval. You have 1 + 2 + 3 * 4 and the eval now is (1 + 2 + 3) - 3 + (3 * 4). Building angularJS and node.js apps with the MEAN stack

April 3, 2018


I plan to spend 4 hours to study the course called Building angularJS and node.js apps with the MEAN stack.

Leetcode 76: Minimum windows substring

April 3, 2018


It is the hard level algorithm. I have practiced similar algorithm on mock interview platform over 5 times last 12 months.

Code review

Here is C# practice I did based on one of discussion.

Leetcode 587 Erect the fence

April 3, 2018


It is hard level algorithm related to sweep line algorithm. I plan to work on this algorithm called Erect the fence.

Monday, April 2, 2018

Being interviewer: Leetcode 56: Merge intervals

April 2, 2018


It is my mock interview's algorithm called Leetcode 56: Merge intervals. I asked the peer to work on the algorithm by mistake, I like to ask him to work on Meeting Room II.

Algorithm analysis

The peer worked very hard and he gave his analysis for the algorithm. Here is the analysis.

One thing I really like to share is that the peer can write the perfect analysis without any issue in his writing.

The reason the peer can pass code screen and get phone screen of Google, I believe that he definitely has very good analytical skills.

Being an interviewer: BST successor search

April 2, 2018


It was my 10:00 PM mock interview. I had chance to discuss with the peer about his algorithm BST successor search. He wrote the program using JavaScript.

We spent extra time to discuss the algorithm, and we ended up the discussion around 12:40 AM. I spent 2 hours 40 minutes discussion with the peer. The peer is very talent and he is preparing Google phone screen.

I like that the peer can write very clearly for the algorithm analysis. This is the first time I worked with a peer to write so clearly and also very accurate.

Code review 

I also helped to review the peer's Javascript code. I also learned a few things about JavaScript.

Leetcode: Meeting room II

April 2, 2018


It is 10:00 PM mock interview. I had chance to work on Sudoku solver. And after the mock interview, I had discussion with the peer about algorithms Meeting room II.

We had discussion about the algorithm around 20 minutes.

Algorithm analysis

Here is the analysis the peer gave in mock interview.

I also like to follow up after mock interview, I found similar idea in Leetcode discussion. Here is the link.

Follow up 

April 3, 2018

I reviewed the code written in C# language using line sweep algorithm. Here is the C# practice.

Also I like to read the book chapter 30: Sweep line algorithms. I did first time to learn the algorithm called Andrew's algorithm, also called Andrew's monotone chain convex hull algorithm. I also found a hard level algorithm to practice and apply the Andrew's algorithm, which is called Leetcode 587 Erect the fence.

Sudoku solver

April 2, 2018


It is such great experience to work on Sudoku solver in mock interview. I wrote the algorithm in less than 30 minutes.

Code review

Here is my analysis with C# code.

Sunday, April 1, 2018

Leetcode 277: Find the celebrity

April 1, 2018

Plan to work on the algorithm Leetcode 277: Find the celebrity. Let me think about 10 - 15 minutes first.

Leetcode 261: Graph valid tree

April 1, 2018


I like to read a few blogs about Leetcode 261: Graph valid tree.

Leetcode 151: reverse words in a string

April 1, 2018

Plan to read discussion panel and vote 10 ideas.

Leetcode 139: Word break

April 1, 2018

I am planning to study Leetcode 139: word break algorithm again. I like to read discussion panel and vote at least 3 ideas.

How to be a good interviewer?

April 1, 2018


I like to do a small research how to be a good interviewer. I learn to be an interviewer by myself, I got a bad feedback when I mock interviewed a person anonymously no video from Singapore with over 6 years experience a few days ago. I gave the algorithm called Leetcode 152: Maximum subarray product. Because I did not want to give all hints out to solve the problem, the interviewee wrote an idea with so buggy code using checking negative elements. At the end of 45 minutes, both of us did not learn anything. The interviewee did not learn anything from the mock interview, I also got bad feedback.

So in order to make mock interview learning experience, I choose to give out all hints and sometimes I make it a tutoring session.

Deletion distance

On March 31, 2018, I gave the peer a mock interview using deletion distance. So I decided to step in and worked on the algorithm together, discussed how to approach the dynamic programming algorithm together.

Friday, March 30, 2018

Being interviewee: Island count

March 30, 2018


It is my mock interview algorithm at 12:00 PM. I spent 17 minutes to write the algorithm. I learned a few lessons through the mock interview.

Mock interview performance

I was lazy and do not declare two variables visitRow and visitCol, and then I mix startRow with visiitRow, startCol with visitCol. I wrote the code and forgot to push four neighbors into queue, I pushed startRow, startCol to the queue instead.

I fixed the issue when I did white board testing. I finished the coding in less than 17 minutes, and I failed 3 test cases. It took me one minute to find the bug from line 47 to line 50. I fixed it in less than one minute.

Next time it is important to declare new variables for visitRow, visitCol, otherwise I may mix things together. Build a good habit.

Here is my C# code.

Here is my last practice five days ago.

I enjoy to write code using BFS and also using queue. It is fun and it is easy to make mistakes. But with more practice, I will be more comfortable to think using BFS.

Yichun city house research

March 30, 2018


It is not too hard to do research on house market in the city of Yichun, my home town. As a software programmer, I have to learn to apply my research ability in data structure and algorithm to a real world.

One of my projects is to find a small condo to purchase when I take a vacation back to China from April 12 to April 18.

Here is the project near the place I grow up, my sisters living there are physicians and teachers.

$20,000 Canadian dollar 1 bedroom/ 1 bath condo

I like to look into pengshen gold collar condo. Here is the website link.

Saturday 10:00 AM mock interview

March 30, 2018


Life is tough. The first time I met a peer from New York, he setup his laptop inside the car and then we had a short discussion about mock interview. It is his first mock interview. He told me that he mainly worked on Java, he is looking for a job. He does not have interesting in algorithm and data structure. He worked on a few startups before.

I was told to work on my algorithm first. I spent five minutes to explain the idea how to solve recursive problem called minimum sales path. How to think about recursively? Explain the root node, check its value, and if there are no children, then return its value; otherwise get all its children, ask them to solve the problem, and get the minimum value from those paths.

The peer asked me how often I solve the problem. Do I do other things? I explained a few things:

// leetcode - hackerrank contest /
// /
// - take courses -
// - 4700 courses -
// C# - html, css, jquery, javascript, at work - learn new technology - angular JS - react framework,

My review for the peer

The video was cut after 15 minutes. I chose not to write any code, I just used my own words to explain the algorithm first. And then we had short discussion about the algorithm and how to learn things in general.

I left the feedback. I wrote in less than 5 minutes.

I was touched by your hard working spirit. Please do not get frustrated to look for a job, specially a programmer job. I used to work in USA with different jobs and experienced difference emotions as a software programmer, student. 

I think that it is good decision to go back to study data structure and algorithm foundation. It also helps me to focus on the foundation. If you like to learn how to do problem solving, in data structure and algorithm, and know how people work hard on that. You will find that the job you are doing, looking for doing is much easy compared to this part. 

You set up everything working inside the car for the mock interview and sit in the driver seat. That is so amazing. 

Trust hard word. Word hard. I write coding blog to encourage others to work hard. Do not get frustrated. 

Actionable Items

As a software programmer, I learn to respect people around me how hard they are working. If you do like to be a software programmer, you have to sacrifice and learn how to work with people. Help them make money. 

As we know, there are high pay jobs from top software companies, we as a software engineer can work hard for. But we all know that it is so hard to achieve, most of us cannot make it. 

We have to think about more how to make money outside the job, and then stay in software engineering field and keep doing our loved jobs as a programmer. Love the job you are working on, try to bring in more things to your career; enrich your own life with hard work. 

Find pairs and keep the order specified by the original array

March 30, 2018


It is my mock interview algorithm. I wrote a solution but I did not meet the requirement of specified order. I need to rewrite another one after mock interview.

Code review

Here is the C# practice I wrote in mock interview.

Thursday, March 29, 2018

Being interviewer: Deletion distance

March 29, 2018


It is the dynamic programming algorithm called deletion distance. I had a 12:00 PM mock interview. I had chance to discuss with the peer how to solve the problem by playing with dynamic programming table.

How to build a dynamic programming table?

Here are a few things we discussed.

1. How to define rows and columns?
2. Add "" string for row and column
3. First time I found out that I need to add extra row/ column to identify current char to work on.
Line 19 is extra row added to show current char to work on, first char next to line 23 to line 26 is the extra column added to show current char to work on in another string.

4. I worked on the first row and first column, and then I did write line 29 to line 33 to explain the recurrence formula.

5. I asked the peer to work on the second row. He worked on second row and third row, he made a mistake to calculate distance("fro", "do"). And then I asked him to check diagonal value dist("fr","d") = 3.

We then had discussion how to prove that the minimum distance is the diagonal value when the current char is the same as the other string's current char.

The proof is from line 25 to line 36. I explained that the matrix or dynamic programming two dimension table from left to right, top to down, it is not descending order. So it is easy to prove that based on the fact.

Giving advice

I also wrote some advice for senior developers to pick up algorithm and data structure in general, specially on deletion distance algorithm:

Do not feel frustrated. I also make a lot of mistakes and practice a lot of times on this algorithm. Practice more. Learn one thing a time.

I do not need to find out how good you can write code. Try to play with setting up a two dimensional table first, and then write code based on the steps. It may take a few times. Once you get a lot of practice, dynamic programming should be very mathematical, use a template, it is easy to write the code.

Being an interviewer: Pancake sort

March 29, 2018


It is my interesting thing to learn how to be a good interviewer. Since I was so patient and also gave some advice like "write readable code" and "write simple code", I ended up knowing that a very competitive programmer with so many medals on hackerrank, and my favorite, the expert competitor.

Code review

Here is the C++ code I reviewed. Most of time the peer worked on the problem related to const in C++. The flip function change cannot be done in place, we debugged the code and found the issue.

Being interviewee: Array of array products

March 29, 2018


It is my algorithm to write in the mock interview. I remembered that I have to work on one multiplication from left to right iteration using dynamic programming, and then two multiplications from right to left calculation.

I have to learn again to write a correct solution in less than 10 minutes. This time I spent 18 minutes, and also I got a hint from the peer. The peer told me to define a variable leftToRight to save product of array elements on line 18, and also switch the order of line 22 and 24 to assign the value first, and then do the multiplication next.

Code review

Here is my C# practice.

Being interviewee: Leetcode 10: regular expression matching

March 29, 2018


It is my sick day. I have to stay at home. Yesterday I noticed that my nose was running and made sneeze, one of coworkers asked me if I was sick. I told her that I had allergic. But I had to honestly admit that I had a cold, I could not go to work and stay at home.

I had 10:00 AM mock interview, I had to work on Leetcode 10: regular expression matching algorithm. I spent 34 minutes to write analysis and code, I fixed a few bugs to pass all test cases.

Code review

Here is my analysis and C# code.

I like to write down my misunderstanding in my first writing, and then how I fixed the bug through the white box testing and web compiler.

For example, to build a dynamic programming table, I have to work on "b", "b*".

                    ""  "b"   "*"
                    ""  "b"   "b*"  - pattern
""    ""         T     F      T
"b" "b"        F     T      T

In order to calculate dp[row, col], I need to find the text char and pattern char first, and then work on current char only.

Highlights of bug fix after first writing in mock interview:

1. I did white box testing, need to fix the bug using test case "" matches pattern string "a*b*". I added line 21 to line 33.
2. web compiler runs the test cases. I failed most of test cases.
I noticed that I could not memorize the solution. I need to work on the solution itself.
I fixed line 25 checking pChar == '*' instead of checking pChar and its next char.
3. line 40, check pChar is '*' instead of checking next char is '*'.
4. line 46, col - 1 instead of col - 2 which causes index out of range error.

Dynamic programming quote

Today's quote on dynamic programming. I think that I learn something from today's practice.

Work on dynamic programming, do not worry about next char. Work on current char only. 

Best medicine to cure my cold

Here is the feedback I got from the peer. It helps me to recover from my cold. Actually the peer is very competitive programmer on, expert with contest rating: 17xxx ( max: expert, 1886), competitive, also on with 5 gold medal.

One more practice

I knew that I was sick with a cold, and then I felt some nervous in mock interview. It is hard to write a dynamic programming solution in less than 30 minutes.

I knew that something will go wrong. To learn a hard level algorithm, I have to be so patient and let myself make mistake first; and then find the ways to fix it in mock interview, and also in less than 30 minutes.

First of all, I mixed the dynamic programming solution with recursive solution. Since my last practice I spent over 40 minutes to write a recursive solution in mock interview to play with a friend less than one month ago. I look ahead for star pattern, current char is a - z, I check if next char is star. But it is wrong to do that in dynamic programming, mix current problem with next problem.

Dynamic programming is to work on the current problem and use subproblems cache results.

Sick day

March 29, 2018


It is my sick day. I have not had a cold long time. Usually I play a lot of hours tennis sports and swimming, I stay healthy. But this time I got my nose running, and then I have to call a sick day, stay at home, plan to do something to help me recover.

Sick day Thursday

I need to find ideas to recover quickly.

Natural flu treatment: 9 proven flue busters.