Algorithm
lc1189_“气球” 的最大数量
思路:
直接计算balloon的这几个字符出现的次数,然后让l和o字符的次数除以2(右移位运算)
然后取b,a,l,o,n的最小值即为答案ans
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution { public: int maxNumberOfBalloons(string text) { int tmp[5] = {0, 0, 0, 0, 0}; for (auto x : text) { if (x == 'b') { tmp[0]++; } else if (x == 'a') { tmp[1]++; } else if (x == 'l') { tmp[2]++; } else if (x == 'o') { tmp[3]++; } else if (x == 'n') { tmp[4]++; } } tmp[2] = tmp[2] >> 1; tmp[3] = tmp[3] >> 1; int ans = tmp[0]; for (int i = 1; i < 5; i++) { ans = min(ans, tmp[i]); } return ans; } };
|
Review
8 important lessons I’ve learned so far in my career
程序员不只有编码,还有帮助其他同事,互学相长
多鼓励他人
积极去行动积累经验,而不是因为缺乏经验而不去行动
英语不好也不要怕,能用就行
大厂员工不一定全都比你厉害,所以自己努力成长即可
理解商业模式,理解如何盈利,帮助你更好地开发软件
注意每天的坐姿,保持健康
学会把自己的创意转化成一个单独的产品,不管是web还是Android
Tips
VMware、KVM、Docker如何支撑云技术发展?
Share-vsftpd日志打印源码分析logging.c
vsftpd 源码的接口都有注释,很好看懂,自成体系:
初始化
- void vsf_log_init(struct vsf_session* p_sess);
只在main函数中调用一次
成体系的一个日志打印
- void vsf_log_start_entry(struct vsf_session* p_sess, enum EVSFLogEntryType what);
- int vsf_log_entry_pending(struct vsf_session* p_sess);
- void vsf_log_clear_entry(struct vsf_session* p_sess);
- void vsf_log_do_log(struct vsf_session* p_sess, int succeeded);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| static void handle_dele(struct vsf_session* p_sess) { int retval; resolve_tilde(&p_sess->ftp_arg_str, p_sess); vsf_log_start_entry(p_sess, kVSFLogEntryDelete); str_copy(&p_sess->log_str, &p_sess->ftp_arg_str); prepend_path_to_filename(&p_sess->log_str); if (!vsf_access_check_file(&p_sess->ftp_arg_str)) { vsf_cmdio_write(p_sess, FTP_NOPERM, "Permission denied."); return; } retval = str_unlink(&p_sess->ftp_arg_str); if (retval != 0) { vsf_cmdio_write(p_sess, FTP_FILEFAIL, "Delete operation failed."); } else { vsf_log_do_log(p_sess, 1); vsf_cmdio_write(p_sess, FTP_DELEOK, "Delete operation successful."); } }
|
1 2 3 4
| if (vsf_log_entry_pending(p_sess)) { vsf_log_do_log(p_sess, 0); }
|
单独打印的行
配合下面两个一起用
1 2 3 4 5 6 7 8 9
| struct mystr str_log_line = INIT_MYSTR;
str_alloc_text(&str_log_line, "Demo logging head: "); str_append_text(&str_log_line, some_char_str_variable); str_append_text(&str_log_line, "\n");
vsf_log_line(p_sess, kVSFLogEntryShm, &str_log_line);
str_empty(&str_log_line);
|
void vsf_log_line(struct vsf_session* p_sess, enum EVSFLogEntryType what, struct mystr* p_str);
vsf_log_line(struct vsf_session* p_sess, enum EVSFLogEntryType what, struct mystr* p_str)
输出指定字符串
,类似于nfs中的log(what, p_str)