回顾
工作:pendding
学习:看算法导论第一章,leetcode还在做(本身翻译错误,被误导了)。
体会:
1) 浩俊之前推荐让我看的《算法导论》,昨天再回过头看,里面很多确实是机器学习常用的方式,部分内容,如动态规划,水哥也提到过。所以算法导论也得结合着看。
2) 《机器学习》理解行业术语,《算法导论》提升思维粒度。
3) 昨天饮食整体控制的不是特别好,晚间吃了过多的零食。
4) 今天开始日记开始迁移到博客园!
Todo list
- 工作:新闻排重评估 (紧急重要的)今天务必完成。
- 工作:数据监控系统方案调研 (非紧急重要的)
- 健康:跑步7公里(完成)
- 学习:leetcode做一道算法题(非紧急重要的)
- 健康:后背训练;(非紧急非重要的)
- 学习:算法导论(非紧急重要的)
上午
早餐:空腹
运动:跑步7公里
中午
下午
待续....
分享
1、leetcode两数之和
#include <vector> #include <map> /** * *给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 *你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 *case: *给定 nums = [2, 7, 11, 15], target = 9 *因为 nums[0] + nums[1] = 2 + 7 = 9 *所以返回 [0, 1] */ using namespace std; class Solution { public: // 两两对比的方式,时间复杂度为O(n2) vector<int> twoSum(vector<int>& nums, int target) { vector<int> ret; // 第一种 /*for (int i = 0; i < nums.size(); i++) { for (int j = i + 1; j < nums.size(); j++) { if (nums[i] + nums[j] == target) { ret.push_back(i); ret.push_back(j); return ret; } } }*/ // 第二种:数据插入到hashmap里,然后通过target - nums[i]来确定,时间复杂度为O(2n) map<int, int> m; for (int i = 0; i < nums.size(); i++) { m[nums[i]] = i; } for (int i = 0; i < nums.size(); i++) { if (m.count(target - nums[i]) > 0 && i != m[target - nums[i]]) { ret.push_back(i); ret.push_back(m[target - nums[i]]); return ret; } } return ret; } };
2、leetcode两数相加:
#include <vector> #include <map> #include <iostream> #include <math.h> /** * 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 */ using namespace std; struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL){} }; template<class T> int length(T& arr) { return sizeof(arr)/ sizeof(arr[0]); } class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { uint64_t carry = 0, sum = 0; ListNode prehead(0), *p = &prehead; while (l1 || l2) { sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry; sum = carry / 10; p->next = new ListNode(sum % 10); l1 = l1 ? l1->next : l1; l2 = l2 ? l2->next : l2; p = p->next; } return prehead.next; } }; int main(int argc, char** argv){ int a[] = {2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,9}; ListNode* tmp = new ListNode(0); ListNode* ptr1 = tmp; for (int i = 0; i < length(a); i++) { ptr1->next = new ListNode(a[i]); ptr1 = ptr1->next; } ptr1 = tmp->next; delete tmp; tmp = new ListNode(0); int b[] = {5,6,4,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,9,9,9,9}; ListNode* ptr2 = tmp; for (int j = 0; j < length(b); j ++) { ptr2->next = new ListNode(b[j]); ptr2 = ptr2->next; } ptr2 = tmp->next; delete tmp; Solution* solution = new Solution(); solution->addTwoNumbers(ptr1, ptr2); delete solution; return 0; }
3、一个文件里的第一列为id,匹配另一个文件里的行记录,并进行输出!
BEGIN{ } FILENAME == ARGV[1] { gsub(/ /,"", $1); sentence_id[$1] = $0; } FILENAME == ARGV[2] { gsub(/ /,"", $1); if (sentence_id[$1] != "") { print $0; } } END{ }
awk -F"\t" -f tmp/news_dup.awk 1.txt ~/data/20180411/2 > t1.txt
推荐