力扣(763.56)补9.27

763.划分字母区间

怎么说呢,说是贪心,我依然感受不到。。。

这题难度正常,能做出来,我也没优化时间复杂度,问就是不太会,hhhhh只做了200题的小chicken。

class Solution {

public:

    vector partitionLabels(string s) {

        int hash[26]={0};

        vector a;     

        for(int i=0;i<26;i++)

        hash[i]=-1;

        for(int i=0;i

            hash[s[i]-'a']=i;

        }

        int left=0,right=0;

        while(right

        right=hash[s[left]-'a'];

        for(int i=left;i<=right;i++){

            right=max(hash[s[i]-'a'],right);   

            // printf("%d ",right-left+1);        

        }

        a.push_back(right-left+1);        

        left=right+1;

        }        

        return a;

    }

};

56.合并区间

我是把他当滑动窗口做的。

这题基本思路倒是容易有,但是细节问题还是有tm的一大堆。还好力扣会提供未过的用例,要不然真的不知道哪里会错。

class Solution {

public:

    vector> merge(vector>& intervals) {

        int left=0,right=0,i=0;

        vector> ans;

        int len=intervals.size();

        sort(intervals.begin(),intervals.end());

        left=intervals[0][0];

        right=intervals[0][1];

        // if(intervals.size()==1){

        // ans.push_back({left,right});

        // return ans;}

        if(i==len-1){

            ans.push_back({left,right});

        return ans;

        }

        while(i

        if(len-1&&right>=intervals[i+1][1]){

            i++;

            if(i==len-1){

                ans.push_back({left,right});

            }

        }    

        else if(i=intervals[i+1][0]){

            i++;

            right=intervals[i][1];

            if(i==len-1){

                ans.push_back({left,right});

            }

        }

        else if(i

            ans.push_back({left,right});

            // printf("%d %d\n",left,right);

            i++;          

            left=intervals[i][0];

            right=intervals[i][1];

            if(i==len-1){

                ans.push_back({left,right});

            }

        }

        } 

        return ans;

    }

};

 

 

你可能感兴趣的:(力扣,c++,算法,leetcode,贪心算法)