leetcode轮回计划20181127

  1. 355 Design Twitter
    题意:要求实现[发布、关注、取关、获得前十条记录]四个接口。
    思路:自己不能关注自己(因为会在获取记录的时候重复获取),优先队列的使用
  2. 357 Count Numbers with Unique Digits
    题意:n位置数中没有重复数字的数字个数
    思路:比较别致的动态规划。
  3. 365 Water and Jug Problem
    题意:用两个量具测量一个特定的容量
    思路:最大公约数
  4. 368 Largest Divisible Subset
    题意:返回数组中的divisible子集
    思路:中等难度的动态规划。
class Solution {
public:
    vector<int> largestDivisibleSubset(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int size = nums.size();
        vector<int> subset(size, 0);
        vector<int> parent(size, 0);
        int m = 0;
        int mi = 0;
        for(int i = size - 1;i >= 0;-- i){
            for(int j = i;j < size;++ j){
                if(nums[j] % nums[i] == 0 && subset[i] < subset[j] + 1){
                    subset[i] = subset[j] + 1;
                    parent[i] = j;
                    if(subset[i] > m){
                        m = subset[i];
                        mi = i;
                    }
                }
            }
        }
        
        vector<int> ret;
        for(int i = 0;i < m;++ i){
            ret.push_back(nums[mi]);
            mi = parent[mi];
        }
        return ret;
    }
};
  1. 371 Sum of Two Integers
    题意:不用加减法进行两个整数的加法运算
    思路:a + b = a^b + (a & b) << 1其中第一部分是不考虑进位的加法运算,第二部分是只考虑进位的加法运算。
  2. 375 Guess Number Higher or Lower II
    题意:猜数字,能确定猜中的最小积分。
    思路:中等难度的动态规划。
class Solution {
public:
    int getMoneyAmount(int n) {
        vector<vector<int>> dp(n + 1, vector<int>(n + 1));
        for(int j = 2;j <= n;++ j){
            for(int i = j - 1;i > 0;-- i){
                int global = INT_MAX;
                for(int k = i + 1;k < j;++ k){
                    int local = k + max(dp[i][k-1], dp[k+1][j]);
                    global = min(global, local);
                }
                dp[i][j] = i + 1 == j ? i : global;
            }
        }
        return dp[1][n];
    }
};
  1. 376 Wiggle Subsequence
    题意:最小波浪子序列
    思路:flag的应用
  2. 377 Combination Sum IV
    题意:目标数字的组合方式的种类数量
    思路:动态规划,注意重复。
class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
        int size = nums.size();
        vector<int> dp(target + 1, 0);
        int mini = INT_MAX;
        for(auto a : nums) if(a <= target) dp[a] = 1;
        for(int i = 1;i <= target + 1;++ i) for(auto a : nums) dp[i] += i > a ? dp[i - a] : 0;
        return dp[target];
    }
};
  1. 378 Kth Smallest Element in a Sorted Matrix
    题意:矩阵行有序、列有序。返回矩阵中第K大的数字
    思路:优先队列
  2. 380 Insert Delete GetRandom O(1)
    题意:数据结构设计题目,要求三个功能[insert, remove, getrandom]要求平均时间复杂度为O(1)
    思路:题目有问题吧,没有办法做到O(1)啊。。。不过能想到的只有hash。。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 看宇宙起源相关视频时,孩子粘了上来,于时顺便当成科学早教片一起观看了。看完后他被带去洗澡了,留着我细细平复着...
    琉璃苏比阅读 5,177评论 6 21
  • 在岁月的长河里…我们应该尽兴
    万般皆苦苦苦阅读 1,040评论 0 1
  • 今天学习了沟通的艺术,或者说用“造句”来沟通,是不是很神奇?哈哈!Grace就是可以教到我们很多的干货。那么就让我...
    兰子2016阅读 1,781评论 0 3
  • 2017年9月30日 星期六 晴 不喜吃月饼的自己却被一箱月饼折磨到崩溃。 昨天原本打算轻装回家,竟没想到朋友...
    槛外人_dc8b阅读 1,534评论 0 0
  • 从一年级开始孩子就要开始接触古诗了,我给孩子定的计划就是每天一首,对孩子来说想对轻松,晚上把今天要学的古诗教孩子读...
    一年级2班王俊宇妈妈阅读 1,534评论 0 0