目錄
力扣(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;
}
運行效率如下所示: