LeetCode刷题笔记

1937.扣分后的最大分

LeetCode刷题笔记_第1张图片

 

/*********************************************
状态转移方程:
f[i][j]=max{f[i−1][x]-∣j−x∣}+points[i][j]
优化:
j>=x时
f[i][j]=max{f[i−1][x]+x∣}+points[i][j]-j
j<=x时
f[i][j]=max{f[i−1][x]-x∣}+points[i][j]+j
**********************************************/
class Solution {
public:
    long long maxPoints(vector>& points) {
        int m=points.size();                //行数
        int n=points[0].size();             //列数
        vector end(n);           //建立保存状态的数组
        for(int i=0;i temp(n);      //保存某一行的数据
            long long best=LLONG_MIN;  
            //best存储上一行,并且小于等于当前列的最大值,即max{f[i−1][x]+x∣}
            for(int j=0;jx;
                best=max(best,end[j]+j);
                temp[j]=best+points[i][j]-j;  //第i行第j列正序的最大值
            }
            best=LLONG_MIN;
            for(int j=n-1;j>=0;j--){           //倒叙序遍历,每次j--保证j

 LLONG_MIN:long long的最小值

move():状态转移

max_element():algorithm库中的函数,用于求[first,last)迭代器中的最大值,返回值是一个迭代器,需要解引用获得其值。

LeetCode刷题笔记_第2张图片

 1483.树节点的第K个祖先

LeetCode刷题笔记_第3张图片 

class TreeAncestor {
public:
    vector> ance;
    const static int MAX_MAX=16;
    TreeAncestor(int n, vector& parent) {
        ance=vector>(n,vector(MAX_MAX,-1));
        for(int i=0;i>i)&1){
                node=ance[node][i];
                if(node==-1){
                    return -1;
                }
            }
        }
        return node;
    }
};

/**
 * Your TreeAncestor object will be instantiated and called as such:
 * TreeAncestor* obj = new TreeAncestor(n, parent);
 * int param_1 = obj->getKthAncestor(node,k);
 */

 LeetCode刷题笔记_第4张图片

 709.转换成小写字母

LeetCode刷题笔记_第5张图片

 

class Solution {
public:
    string toLowerCase(string s) {
        int len=s.size();
        for(int i=0;i二进制表示为100 0001

        32的二进制表示为 010 0000 

        100 0001|010 0000=110 0001->97(a)
 */

 

你可能感兴趣的:(leetcode,笔记,算法)