技术免疫
我以前得到一个电子产品,都会把它的功能榨干。我无法忘记 iPad 1 代屏幕亮起,苹果的屏幕显示出缤纷的色彩时的激动,初次使用苹果产品时,被它惊艳到。折腾很长时间给它越狱,还记得越狱成功后开机那只奔跑的菠萝。研究过每一项设置,调整过很多特性,安装过不少增强软件。
在功能机时代,有幸得到一个运行 linux 系统的智能手机。配置了 xp 主题,安装了 UC 浏览器,QQ,文本阅读器,来电防火墙最后还下载了街机浏览器能够在手机上玩街机游戏,刷机,可谓物尽其用。
电子产品越来越智能化,无数聪明的头脑在帮用户想着产品体验,让用户更不用动脑。如果现在买一个电子产品,也不会费尽心思去研究它了,最多就是随便用用,看个剧,看看电影,上上网。
无论再听到什么新产品,新概念,新技术,也没了热情,也不愿再投入时间去专门研究它,我称之为技术免疫。
没了这些东西,生命也不会少什么。
每日打卡-LeetCode-673-最长递增子序列的个数
最长递增子序列的个数
这道题在 最长递增子序列 的基础上,记录额外的信息:g(i)g(i)g(i) 表示以 aia_iai 结尾的 LIS 的个数。
123456789101112131415161718192021222324252627282930class Solution { public: int findNumberOfLIS(vector<int>& nums) { int n = nums.size(); vector<int> f(n + 1, 1); vector<int> g(n + 1, 1); int maxl = 1; int ans = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { if (nums[j] < nums[i]) { if (f[i] < f[j] + 1) ...
什么时候需要写代码开发软件
什么时候需要写代码,做软件?
软件都是利用计算机解决线下的问题,比如滴滴解决打车的问题,地图解决导航的问题,抖音是为了解决呆着无聊的问题,复杂的 ERP 系统是为了解决企业管理问题
软件分几种:给别人用的,给自己用的,给自己用也给别人用的
软件更多是为了解决一类问题,推广出去并获得用户,而不是自用
从事商业活动,我需要一个软件来辅助我开展特定的商业活动,我需要给人讲课,所以需要一个在线教育平台
从事公益活动,我需要一个软件来识别所有的植物,建立一个植物百科全书。我需要一个软件来分享书籍、课程,建立一个在线公开课平台。
从事黑客活动,我需要一个软件快速抓取附近 wifi 的握手包,并进行破解。我需要一个软件进行 12306 抢票。
对于自用,解决自己遇到的一般性问题,基本不需要开发软件,现有的软件已经足够了。
所以需要先发现问题,并且电脑能够解决这个问题,其次你想解决这个问题,才需要专门做一个软件。
什么时候会写代码呢?
工作就是写代码的话,那就天天写代码。
为了找写代码的工作而写代码。
自己发现了一类问题并且没有现有软件的情况下,自己想解决这个问题然后开始写代码。
进行黑客活动。
解 ...
每日打卡-LeetCode-524-通过删除字母匹配到字典里最长单词
通过删除字母匹配到字典里最长单词
123456789101112131415161718192021222324class Solution { public: string findLongestWord(string s, vector<string>& dictionary) { string ans; for (int i = 0; i < dictionary.size(); i++) { string& str = dictionary[i]; // 贪心法判断 str 是不是 s 的子序列 int j = 0, k = 0; while (j < str.size() && k < s.size()) { if (str[j] == s[k]) j++, k++; else k++; } if (j == str.size() ...
每日打卡-LeetCode-600-不含连续1的非负整数
不含连续 1 的非负整数
数位 DP:
预处理
按位做
1234567891011121314151617181920212223242526272829class Solution { public: int findIntegers(int n) { vector<int> num; // 转成二进制,num[0] 是最低位 while (n) num.push_back(n % 2), n /= 2; // f[i][0] 表示一共有 i 位,且最高位为 0,总共有多少种合法方案 // f[i][1] 表示一共有 i 位,且最高位为 1,总共有多少种合法方案 vector<vector<int>> f(num.size() + 1, vector<int>(2)); f[1][0] = f[1][1] = 1; for (int i = 2; i <= num.size(); i++) { f[i][0] = f[i - 1][0] ...
每日打卡-LeetCode-678-有效的括号字符串
有效的括号字符串
123456789101112131415161718192021class Solution { public: bool checkValidString(string s) { int l = 0, r = 0; for (auto c : s) { if (c == '(') { l++; r++; } else if (c == ')') { l--; r--; } else { l--; r++; } l = max(l, 0); if (l > r) return false; } return l == 0; }};
12345678910111213141516171819202122class Solution ...
每日打卡-LeetCode-1894-找到需要补充粉笔的学生编号
12345678910111213141516171819202122class Solution { public: int chalkReplacer(vector<int>& chalk, int k) { int n = chalk.size(); vector<long> s(n + 1, 0); for (int i = 1; i <= n; i++) { s[i] = s[i - 1] + chalk[i - 1]; } int cnt = 0; int m = (int)(k % s[n]); int l = 0, r = n - 1; while (l < r) { int mid = l + r >> 1; if (s[mid] >= m) { r = mid; } else { l = mid + 1; ...
每日打卡-LeetCode-68-文本左右对齐
文本左右对齐
12345678910111213141516171819202122232425262728293031323334class Solution { public: vector<string> fullJustify(vector<string>& words, int maxWidth) { vector<string> res; for (int i = 0; i < words.size(); i++) { int j = i + 1; int len = words[i].size(); // 数一数可以把后面多少个单词加到当前行 while (j < words.size() && len + 1 + words[j].size() <= maxWidth) len += 1 + words[j++].size(); string line; if (j == wo ...
根据索引名查属于哪个表
123select * from pg_indexes where indexname='索引名';select * from pg_indexes where tablename='表名';select * from pg_statio_all_indexes where relname='student';
每日打卡-LeetCode-2321-最小K个数
题目要求「任意顺序返回这 k 个数即可」,可以利用快速排序的 partition 操作。
123456789101112131415161718192021222324class Solution { public: vector<int> smallestK(vector<int>& arr, int k) { if (k == 0) return {}; int l = partition(arr, 0, arr.size() - 1, k); return vector<int>(arr.begin(), arr.begin() + l + 1); } int partition(vector<int>& a, int l, int r, int k) { if (l == r) return l; int mid = l + r >> 1; int p = a[mid]; int i = l - ...