力扣面试题(二)

给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。

如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。

bool increasingTriplet(int* nums, int numsSize) {
    int max = nums[0];
    int i = 0;
    int j = 0;
    int k = 0;
    int count = 1;
    for(i = 1; i < numsSize; i++){
        if(max < nums[i]){
            max = nums[i];
            count ++;

            if(count == 1){
                j = i;
            }
            else if(count == 2){
                k = i; 
                          
            }
            else{
                return true;
            }
            
            if(i == numsSize-1){
                i = j;

                if(i+1 < numsSize)
                    max = nums[i+1];
                j = i+1;
                count = 1;                    
            }    
            continue;
        }
        else{
            if(i == numsSize-1){                
                max = nums[j];
                
                i = k;
                if(k+1 == numsSize-1 || count == 1){
                    i = j+1;
                    if(i < numsSize)
                        max = nums[i];                    
                    count = 1;
                    j = i;

                } 
                else{
                    count = 1;
                }  
                          
            }
        }
    }      

    return false;             
}

还有另一种算法, INT_MAX代表的是无穷大:

bool increasingTriplet(int* nums, int numsSize) {
    if (numsSize < 3) {
        return false;
    }
    int first = nums[0], second = INT_MAX;
    for (int i = 1; i < numsSize; i++) {
        int num = nums[i];
        if (num > second) {
            return true;
        } else if (num > first) {
            second = num;
        } else {
            first = num;
        }
    }
    return false;

}

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 1:

输入:s = "the sky is blue"
输出:"blue is sky the"

 

char* reverseWords(char* s) {
    int len = strlen(s);
    char * words = malloc((len+1)*sizeof(char));
    int words_count = 0;
    int words_number= 0;
    int i,j = 0;

    for(i = len-1; i >= 0; i--){
        if(' ' != s[i]){
            words_count ++;
        }
        else if(words_count){  
            if(words_number){
                words[j++] = ' ';                    
            }         
            memcpy(words+j, &s[i+1], words_count);
            j += words_count; 
            words_number++;           
            words_count = 0;     
                                
              
        }

    }

    if(!words_count){      
        words[j] = '\0';
    }
    else{
        if(words_number){
            words[j++] = ' '; 
        }
        
        memcpy(words+j, &s[0], words_count*sizeof(char));
        words[j+words_count] = '\0';
    }

    return words;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值