LeetCode

Posted H3rmesk1t

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode相关的知识,希望对你有一定的参考价值。

53-最大子序和

动态规划转移方程为:f(i)=max{f(i−1)+nums[i],nums[i]}

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int pre = 0;
        int maxAns = nums[0];
        for (const auto &x: nums) {
            pre = max(pre+x, x);
            maxAns = max(maxAns, pre);
        }
        return maxAns;
    }
};

66-加一

只有为9的时候才需要对该位前面的数进行操作,否则直接对该一位加一即可,如果该数组里面元素全部为9,则结果一定为1 后面len(digits的长度)个0

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int len = digits.size();
        for (int i = len - 1; i >= 0; --i) {
            if (digits[i] == 9) {
                digits[i] = 0;
            } else {
                digits[i]++;
                return digits;
            }
        }
        vector<int> temp(len+1,0);
        temp[0] = 1;
        return temp;
    }
};

108-合并两个有序数组

利用双指针,将两个数组看作队列,每次从两个数组头部取出比较小的数字放到结果中

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int p1 = 0, p2 = 0;
        int sortedList[m+n];
        int cur;
        while (p1 < m || p2 < n) {
            if (p1 == m) {
                cur = nums2[p2++];
            } else if (p2 == n) {
                cur = nums1[p1++];
            } else if (nums1[p1] < nums2[p2]) {
                cur = nums1[p1++];
            } else {
                cur = nums2[p2++];
            }
            sortedList[p1+p2-1] = cur;
        }
        int temp = m + n;
        while (temp) {
            nums1[temp-1] = sortedList[temp-1];
            --temp;
        }
    }
};

118-杨辉三角

每个数字等于上一行的左右两个数字之和,可用此性质写出整个杨辉三角

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> temp(numRows);
        for (int i = 0 ; i < numRows; ++i) {
            temp[i].resize(i+1);
            temp[i][0] = temp[i][i] = 1;
            for (int j = 1; j < i; ++j) {
                temp[i][j] = temp[i-1][j] + temp[i-1][j-1];
            }
        }
        return temp;
    }
};

119-杨辉三角 II

使用滚动数组的思想优化空间复杂度

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int> cur,pre;
        for (int i = 0; i <= rowIndex; ++i) {
            cur.resize(i+1);
            cur[0] = cur[i] = 1;
            for (int j = 1; j < i; ++j) {
                cur[j] = pre[j-1] + pre[j];
            }
            pre = cur;
        }
        return pre;
    }
};

以上是关于LeetCode的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

LEETCODE 003 找出一个字符串中最长的无重复片段

Leetcode 763 划分字母区间

LeetCode:划分字母区间763

Leetcode:Task Scheduler分析和实现

817. Linked List Components - LeetCode