力扣(LeetCode)刷題,簡單題(第8期)

目錄

第1題:存在重複元素

第2題:2的冪

第3題:移動零

第4題:缺失數字

第5題:第一個錯誤的版本

第6題:按摩師

第7題:3的冪

第8題:求1+2+...+n

第9題:數值變爲0的步數

第10題:有多少小於當前數字的數


力扣(LeetCode)定期刷題,每期10道題,業務繁重的同志可以看看我分享的思路,不是最高效解決方案,只求互相提升。

第1題:存在重複元素

試題要求如下:

回答(C語言):

int compare(const void *a, const void *b){
    return *(int*)a - *(int*)b;
}

bool containsDuplicate(int* nums, int numsSize){
    qsort(nums, numsSize, sizeof(int), compare);
    for(int i = 0; i < numsSize - 1; i++){
        if(nums[i] == nums[i+1]){
            return true;
        }
    }
    return false;
}

運行效率如下所示:


第2題:2的冪

試題要求如下:

回答(C語言):

bool isPowerOfTwo(int n){
    while(n%2==0&&n>1){
        n=n/2;
    }

    if(n==1){
        return true;
    }
    else{
        return false;
    }
}

運行效率如下所示:


第3題:移動零

試題要求如下:

回答(C語言):

void moveZeroes(int* nums, int numsSize){

    for(int i=0,j = 0,temp=0; j < numsSize;++j) {
        if(nums[j] != 0) {
            temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
            ++i;
        }
    }
}

運行效率如下所示:


第4題:缺失數字

試題要求如下:

回答(C語言):

int missingNumber(int* nums, int numsSize){
    int ans = numsSize*(numsSize + 1)/2, i;

    for(i = 0; i < numsSize; i++){
        ans -= nums[i];
    }
    return ans;
}

運行效率如下所示:


第5題:第一個錯誤的版本

試題要求如下:

回答(C語言):

// Forward declaration of isBadVersion API.
bool isBadVersion(int version);

int firstBadVersion(int n) {
    long low=1;
    long high=n;
    
    while(low<high){
        long mid=(low+high)/2;
        if(!isBadVersion(mid)){
            low=mid+1;
        }
        else{
            high=mid;
        }
    }
    return low;
}

運行效率如下所示:


第6題:按摩師

試題要求如下:

回答(C語言):

//設dp[i]表示第i個房屋之前的最高金額,則求dp[numsSize-1]即可。
//狀態轉移方程:

//dp[0] = nums[0]
//dp[1] = max(nums[1], nums[0])
//dp[i] = max(dp[i-2] + nums[i], dp[i-1])(i>=2)

int massage(int* nums, int numsSize){
    if(!nums || numsSize == 0)
        return 0;

    if(numsSize == 1)
        return nums[0];

    int *dp = (int*)malloc(sizeof(int) * numsSize);
    dp[0] = nums[0];
    dp[1] = fmax(nums[1], nums[0]);

    for(int i = 2; i < numsSize; i++){
        dp[i] = fmax(dp[i-2] + nums[i], dp[i-1]);
    }
    
    return dp[numsSize - 1];
}

運行效率如下所示:


第7題:3的冪

試題要求如下:

回答(C語言):

bool isPowerOfThree(int n){
    if (n == 0) 
        return false;

    while(n%3==0){
        n/=3;
    }

    if(n==1)
        return true;
    
    return false;
}

運行效率如下所示:


第8題:求1+2+...+n

試題要求如下:

回答(C語言):

//(1)如果多個變量均非0(包括None、False等),那麼返回最後一個變量的值。如3 and 2 and 'a'的返回值爲'a';
//(2)如果多個變量中存在0值,則返回第一個0值。如1 and 'a' and 0 and None的返回值爲0。


int sumNums(int n){
    int res = n;
    n && (res += sumNums(n-1));
    return res;
}

運行效率如下所示:


第9題:數值變爲0的步數

試題要求如下:

回答(C語言):

int numberOfSteps (int num){
    int cou=0;
    
    while(num!=0){
        if(num%2==0){
            num/=2;
        }
        else{
            num-=1;
        }
        cou++;
    }

    return cou;
}

運行效率如下所示:


第10題:有多少小於當前數字的數

試題要求如下:

回答(C語言):

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize){
    int* data_buf=(int*)malloc(sizeof(int)*(numsSize+1));
    memset(data_buf,'\0',sizeof(int)*(numsSize+1));

    for(int i=0;i<numsSize;i++){
        for(int j=0;j<numsSize;j++){
            if(nums[j]<nums[i])
                data_buf[i]++;
        }
    }

    data_buf[numsSize]='\0';
    *returnSize=numsSize;

    return data_buf;
}

運行效率如下所示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章