力扣笔试题系列(一)

1、给你两个字符串 word1word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。

objectivec 复制代码
char * mergeAlternately(char * word1, char * word2){
    int len1 = strlen(word1);
    int len2 = strlen(word2);
    char *merge_word = malloc(len1+len2+1);

    int i , j = 0;
    if(len1 <= len2){
      
        for(i = 0; i < len1; i++){
            merge_word[j++] = word1[i];
            merge_word[j++] = word2[i];
        }

        if(len1 < len2){
            for(i = len1; i < len2; i++)
            merge_word[j++] = word2[i];
        }

    }
    else{
        for(i = 0; i < len2; i++){
            merge_word[j++] = word1[i];
            merge_word[j++] = word2[i];
        }

        for(i = len2; i < len1; i++){
            merge_word[j++] = word1[i];
        }
     
    }
    
    merge_word[len1+len2] = '\0';
    return merge_word;
}

给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。

对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。

objectivec 复制代码
bool* kidsWithCandies(int* candies, int candiesSize, int extraCandies, int* returnSize) {
    int max_candies = 0;
    int i = 0;
    
    for(i = 0; i < candiesSize; i++){
        if(max_candies < candies[i]){
            max_candies = candies[i];
        }
    }

    bool *candies_res = malloc(sizeof(bool)*candiesSize);
    *returnSize = candiesSize;

    for(i = 0 ; i < candiesSize; i++){
        if(candies[i] + extraCandies >= max_candies){
            candies_res[i] = true;
        }
        else{
            candies_res[i] = false;
        }
    }

    return candies_res;
}

假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

给你一个整数数组 flowerbed 表示花坛,由若干 01 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n,能否在不打破种植规则的情况下种入 n朵花?能则返回 true ,不能则返回 false

示例 1:

复制代码
输入:flowerbed = [1,0,0,0,1], n = 1
输出:true
objectivec 复制代码
bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n) {
    int unflower_count = 0;
    int i , j = 0;

    if(flowerbedSize ==1){
        if(!flowerbed[0]){
            j++;
        }
    }
    else{
        for(i = 0; i < flowerbedSize; i++){
            if(i == 0 && !flowerbed[i] && !flowerbed[i+1] ){
                j++;
                continue;
            }

            if(!flowerbed[i]){
                unflower_count ++;
            }
            else{
                unflower_count = 0;
            }

            if(unflower_count == 3){
                j++;
                i--;
                unflower_count = 0;
            }

            if(i == flowerbedSize-2 && flowerbed[i] == flowerbed[i+1] ){
                j++;
                break;
            }
        }
    }

    if(j >= n){
        return true;
    }
    return false;
}

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 'a''e''i''o''u',且可能以大小写两种形式出现不止一次。

示例 1:

复制代码
输入:s = "hello"
输出:"holle"
objectivec 复制代码
char* reverseVowels(char* s) {
    int len = strlen(s);
    char * word = malloc(len*sizeof(char)+1);
    unsigned i , j, count= 0;
   
    //memset(word_location, -1, len*sizeof(int));
    unsigned  * word_location = malloc(len*sizeof(unsigned));
    if(NULL == word_location){
        free(word);
        return NULL;
    }
    strcpy(word, s);
    for(i = 0 ; i < len; i ++){
        char lower_c = tolower(s[i]);
        if (lower_c == 'a' || lower_c == 'e' || lower_c == 'i' || lower_c == 'o' || lower_c == 'u') {
            word_location[count++] = i;
        }    
    } 

    if(count == 1){
        word[word_location[0]] = s[word_location[0]];
    }
    else{
        for(i = 0 ; i < count/2; i++){
            j = count -1-i;
            word[word_location[i]] = s[word_location[j]];
            word[word_location[j]] = s[word_location[i]];
        }
    }

    free(word_location);

    return word;
}
相关推荐
To_OC29 分钟前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
想吃火锅10056 天前
【leetcode】121.买卖股票的最佳时机js/c++
算法·leetcode·职场和发展
凌波粒6 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
退休倒计时6 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
小欣加油6 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒6 天前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode
凌波粒6 天前
LeetCode--46.全排列(回溯算法)
数据结构·算法·leetcode
吃着火锅x唱着歌6 天前
LeetCode 2530.执行K次操作后的最大分数
数据结构·算法·leetcode
sheeta19986 天前
LeetCode 每日一题笔记 日期:2026.06.16 题目:3612. 字符串特殊符号处理
笔记·算法·leetcode
CoderYanger6 天前
A.每日一题:2095. 删除链表的中间节点
java·数据结构·程序人生·leetcode·链表·面试·职场和发展