496 LeetCode 下一个更大的元素I

题目描述:
496 LeetCode 下一个更大的元素I_第1张图片
496 LeetCode 下一个更大的元素I_第2张图片
思路:方法一:最简单的暴力法:1、先写一个函数,用来查找与nums1中的数对应相等的nums2中的数的下标;2、按要求进行查找;
方法二:使用哈希表;1、先求出num2中的所有数,比它大的第一个数;然后存到哈希表里面;2、遍历nums1中的数在哈希表里面查找;

代码如下:

class Solution {
public:
    int sub(int n,vector<int>num){
        int k=0,temp=0;
        while(k<num.size()){
            if(num[k]==n){
            temp=k;
            break;}
            else k++;
        }
         return temp;
    }
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
    vector<int>res;
    for(int i=0;i<nums1.size();i++){
        if(sub(nums1[i],nums2)==nums2.size()-1)
            res.push_back(-1);
        if(sub(nums1[i],nums2)<nums2.size()-1){
            int j=sub(nums1[i],nums2)+1;
            while(j<=nums2.size()-1){
                 if(nums2[j]>nums1[i]){
                 res.push_back(nums2[j]);  
                 break;}
                j++;
            }
            if(j==nums2.size()){
            res.push_back(-1); } 
        }
    } 
    return res;
    } 
};

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
    vector<int>res;
    map<int,int>bet;
     for(int i=0;i<nums2.size();i++){
         if(i<nums2.size()-1){
             int j=i+1;
         for( j;j<nums2.size();j++){
             if(nums2[j]>nums2[i]){
             bet[nums2[i]]=nums2[j];
             break;}
         }
         if(j==nums2.size())
         bet[nums2[i]]=-1;
         }
         if(i==nums2.size()-1)
          bet[nums2[i]]=-1;
     }
     for(int i=0;i<nums1.size();i++){
         res.push_back(bet[nums1[i]]);
     }
    return res;
    } 
};

你可能感兴趣的:(leetcode)