1. 查询无效交易

    我花了一段时间在思考这道题目,想要找到一个较为高效的 分享一些我的思考吧。这道题目有三个条件 人名,地点以及时间。从维度上来看,是3维的,我是把它想做了一个三维空间。
    我们要求的就是相同人名,不用地点近似时间,那么问题就来了,我们需要降低维度,只看相同人名下的空间,即二维空间。问题是求城市这一维度不同,时间这
    一维度相近似的解(差60)。我本来是想用滑动窗口在时间维度上进行遍历,然后用总和减去城市相同的,即我们通过全集减去反集求解,因为我们很好求出在同
    一窗口下同一city下的城市。
    以上就是我的理想思路,实际操作中,我没用实现滑动窗口去完成这个搜索,因为确实这道题的数目只有1000,最暴力的方案应该也是可以的,所以我是对时间维
    度进行了排序,从第一点向前向后搜索来求解答案。
class Solution {public:struct Node{ //代表每一个的具体账单int time;int val;int city;//创建city映射表 对字符串操作越少 效率越高int id; //避免对字符串的操作Node(int t, int v, int c, int i) :time(t), val(v), city(c), id(i){}Node(){}};static bool check_node(const Node& n1, const Node& n2){return n1.time < n2.time;}struct User{vector<Node> user_bills; //用户的账单User(){}vector<int> get_illegal_bill(){vector<int> ret;//sort for billssort(user_bills.begin(), user_bills.end(), check_node);//searchfor (auto i = 0; i < user_bills.size(); ++i){if (user_bills[i].val > 1000){ret.push_back(user_bills[i].id); continue;}bool flag = false;//check preint p = i - 1;while( p >= 0 && user_bills[i].time - user_bills[p].time <= 60){if(user_bills[p].city != user_bills[i].city) {ret.push_back(user_bills[i].id); flag = true; break;}p--;}if(flag) continue;p = i + 1;//check endwhile( p < user_bills.size() &&  user_bills[p].time - user_bills[i].time <= 60){if(user_bills[p].city != user_bills[i].city) {ret.push_back(user_bills[i].id); break;}p++;}}return ret;}};//根据实际情况写的解析函数Node string_to_node(string& s, string& name, unordered_map<string, int>& city_map, int& map_count, int id){int p = 0;while (p < s.size() && s[p] != ','){name = name + s[p++];}  p++;int time = 0;while (p < s.size() && s[p] != ','){time = time * 10 + s[p++] - '0';} p++;int val = 0;while (p < s.size() && s[p] != ','){val = val * 10 + s[p++] - '0';}  p++;string city = "";while (p < s.size()){city = city + s[p++];}auto it = city_map.find(city);if (it == city_map.end()){city_map.insert(pair<string, int>(city, map_count++));}return Node(time, val, city_map[city], id);}vector<string> invalidTransactions(vector<string>& transactions) {unordered_map<string, User> user_table;int map_count = 0;unordered_map<string, int> city_map;vector<string> retStr;//initfor (auto i = 0; i < transactions.size(); ++i){string name = "";Node n = string_to_node(transactions[i], name, city_map, map_count, i);user_table[name].user_bills.push_back(n);}//get resultfor (auto it = user_table.begin(); it != user_table.end(); it++){vector<int> ret = it->second.get_illegal_bill();for (auto i = 0; i < ret.size(); ++i){retStr.push_back(transactions[ret[i]]);}}return retStr;}
};
  1. K 个一组翻转链表


思路很简单
reverseLink 用来反转链表
一个指针每次向前搜索K个大小的链表,然后反转
需要注意的是如何链接,写错了很容易出现链表边环。

    void reverseLink(ListNode *begin, ListNode *end){//   if(begin == end) return;ListNode *p = begin->next, *pre = begin;while(p != end){ListNode* copy = p->next;p->next = pre;pre = p; p = copy;}p->next = pre;begin->next = NULL;}ListNode* reverseKGroup(ListNode* head, int k) {if(k == 1) return head;ListNode feak_head = ListNode(0);feak_head.next = head;ListNode *p = head, *pre = &feak_head;while(p){ListNode *begin = p, *end = p;int count = 1;while(count < k && end->next){end = end->next; count++;}if(count < k){pre->next = begin;break;//链表长度不足,提前结束} p = end->next; // 迭代reverseLink(begin, end);pre->next = end;  pre = begin;}return feak_head.next;}

leetcode日记相关推荐

  1. 如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形

    题目描述 ` 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每个柱子的宽度为 1,给 ...

  2. LeetCode日记_007_猜字谜

    题目信息: 外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧. 字谜的迷面puzzle 按字符串形式给出,如果一个单词word符合下面两个条件,那么它就可以算作谜底: 单词word中包 ...

  3. [leetcode日记]221.最大正方形

    题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 ...

  4. LeetCode日记(香槟塔)第三天

    题目如下: 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟 ...

  5. 欢迎来到全民口罩自制时代!

    -"口罩到底去哪了?" -"你甭管口罩去哪了,现在是考验民众智慧的时刻!" Only the strong survive! 欢迎来到魔幻的人民的口罩自制时代- ...

  6. 如何快速有效玩弄乙方?

    在市场上,在行业里,甚至在生活中, 大家都喜欢亲切地把甲方称为"爸爸". 可"爸爸"这个称呼可不是白叫的,更不能只留于口头...... 爹有爹的气魄,父亲有父亲 ...

  7. 一个算法笨蛋的12月leetCode刷题日记

    类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...

  8. Leetcode刷题日记(十二)

    又是老台词:欢迎大家来到一晚一度的leetcode刷题日记时间.今天我们来讲讲队列的问题,队列这方面的基础知识需要的同学到博主前面的文章找吧.队列这方面的问题平时博主也是接触得比较少的.下面是一道利用 ...

  9. Leetcode刷题日记:21-25题篇

    Leetcode刷题日记:21-25题篇 简介 题目: 21. 合并两个有序链表 22. 括号生成 23. 合并K个升序链表 24. 两两交换链表中的节点 25. K 个一组翻转链表 注 简介 这个系 ...

最新文章

  1. FlashFTP工具的自动缓存服务器目录的功能
  2. Hadoop多次format格式化会导致节点的clusterID不一致
  3. 短视频时代不可忽视的幕后功臣竟然是它!
  4. 没有串口,如何打印单片机调试信息?
  5. [导入]【翻译】WF从入门到精通(第二章):workflow运行时
  6. IEEE 迎来首位华人主席,马里兰大学终身教授刘国瑞当选
  7. 【原】常见CSS3属性对iosandroidwinphone的支持
  8. python算法精解pdf_python算法精解
  9. 交换机入门书籍推荐_网络工程学习方法/路线/专业书籍推荐
  10. matlab 四元方程求解,如何用Matlab求解如下一元四次方程,求指导
  11. Kinect:少年你步履蹒跚是不是没睡好
  12. Mathematica三维画图一些技巧
  13. 16届智能车竞赛单车拉力国二经验分享
  14. Java--十大排序算法之归并排序
  15. ffmpeg4.4 学习笔记 -(2)读取视频文件并用SDL 显示
  16. JavaScript(网页特效)
  17. 关于 DataFrame: 处理json数据(re模块,concat...)
  18. Tomcat启动时,日志的中文乱码【淇℃伅】和【璀﹀憡】等
  19. JS控制EXCEL的一些方法
  20. Python base64与图片之间的转换

热门文章

  1. tensorflow2.0学习笔记(五)
  2. 轻薄本计算机专业够用吗,我女朋友都秒懂了 买轻薄本看这一篇就够了
  3. 激活函数、损失函数和优化函数的比较
  4. 基于java的物联网架构实现
  5. unity音量++_Unity + GDC旅行报告
  6. doPost()详解
  7. 银行卡的清分、对帐与清算(转)
  8. 数字信号处理4:采样定理
  9. html5刮奖效果,HTML5+Canvas实战之刮奖效果
  10. 小米8se怎么解屏幕锁_小米8 SE怎样解锁?人脸指纹双解锁安全又快捷!