2018-07-15

521.最长特殊序列

题目描述

给定两个字符串,你需要从这两个字符串中找出最长的特殊序列。最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。

子序列可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。

输入为两个字符串,输出最长特殊序列的长度。如果不存在,则返回 -1。

示例 :

输入: “aba”, “cdc”
输出: 3
解析: 最长特殊序列可为 “aba” (或 “cdc”)

思路

这个题坑就坑在题意上,把题意理解了的话,就是下面这个意思:
如果两个字符串相等,那么没有;
如果不相等,返回两字符串中的最大长度

代码

class Solution {
public:
    int findLUSlength(string a, string b) {
        return a == b ? -1 : max(a.size(), b.size());
    }
};

258. 各位相加

题目描述

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

示例:

输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。

思路

没什么难的

代码一(递归版本)

class Solution {
public:
    int addDigits(int num) {
        if(num/10 == 0)
            return num;
        return addDigits(num%10 + addDigits(num/10));
    }
};

代码二(循环版本)

class Solution {
public:
    int addDigits(int num) {
        while(num/10)
        {
            num = num%10 + num/10;
        }
        return num;       
    }
};

代码三(进阶)

就是找规律啦LOL,不好找,看的Hint,然后又看的维基百科

class Solution {
public:
    int addDigits(int num) {
        return num-9*((num-1)/9);
    }
};

496. 下一个更大元素 I

题目描述

给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。

nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。

示例 1:

输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
输出: [-1,3,-1]
解释:
对于num1中的数字4,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。
对于num1中的数字1,第二个数组中数字1右边的下一个较大数字是 3。
对于num1中的数字2,第二个数组中没有下一个更大的数字,因此输出 -1。
示例 2:

输入: nums1 = [2,4], nums2 = [1,2,3,4].
输出: [3,-1]
解释:
对于num1中的数字2,第二个数组中的下一个较大数字是3。
对于num1中的数字4,第二个数组中没有下一个更大的数字,因此输出 -1。

思路

题目已经把处理步骤说的很清楚了

代码

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
        vector<int> ret;
        for(int i = 0;i<findNums.size();i++)
        {
            vector<int>::iterator pos = find(nums.begin(),nums.end(),findNums[i]);
            pos++;
            while(pos!=nums.end())
            {
                if(*pos>findNums[i])
                {
                    ret.push_back(*pos);
                    break;
                }
                pos++;
            }
            if(pos==nums.end())
                ret.push_back(-1);
        }
        return ret;
    }
};
    原文作者:美不胜收oo
    原文地址: https://www.jianshu.com/p/73ccb7325075
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞