算法技巧篇

此篇记录我刷题中觉得比较奇妙,值得记录的题或者解法。

Course Schedule III
一道课程选择的问题,给你一堆课程,告诉你每个课程上课所需时间以及停课日期。让你如何选择尽可能多的课。
我没想出来怎么做,看了下讨论区,用的最大堆的方法。先将课程以end time排个序,然后用贪心的方法,每次选取一门课,先入堆,然后判断是否可行,假如不可行,那么就把已选的耗时最长的去掉,然后继续选,题目简单但是还挺精妙的。
代码如下:

class Solution {
public:
    int scheduleCourse(vector<vector<int>>& courses) {
        sort(courses.begin(), courses.end(), [](vector<int> a, vector<int> b) {return a[1] < b[1];});
        int now = 0, n = courses.size();
        priority_queue<int> heap;
        for (int i=0; i<n; i++) {
            heap.push(courses[i][0]);
            now += courses[i][0];
            if (now > courses[i][1]) {
                now -= heap.top();
                heap.pop();
            }
        }
        return heap.size();
    }
};

双指针问题

3Sum
3Sum Closest
4Sum
这类求和的题目。主要思想就是双指针,能够减少一些复杂度。还有就是一些简单的优化,排好序后,假如前面几个和就大于target,那么就不用考虑后面的了。这个双指针是一个从前往后,一个从后往前。

还有一类是隔着固定距离从前往后遍历,如下题目:
Remove Nth Node From End of List

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,173评论 0 12
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,779评论 0 33
  • 学习文章 UILabel的缩放动画效果 效果 简单原理 创建一个 ScaleLabel 的 View , View...
    刘大帅阅读 9,155评论 2 3
  • 又是一个下雨天,依然感觉不那么明朗。对于生活我是没有太大感悟的,有些感慨也时常会消融在我的记忆力里。可,自己还是喜...
    B612上的小橙子阅读 292评论 0 0
  • 夜犹如浓稠的血液从墙的四周留下来。灵魂却空洞地浮出身体。 如同森林里迷路的小鹿,美丽的脸庞惊慌失措! 被困在...
    柳芽垂露阅读 215评论 0 0