力扣(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 == nums){
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 != 0) {
temp = nums;
nums = nums;
nums = 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;
}
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个房屋之前的最高金额,则求dp即可。
//状态转移方程:
//dp = nums
//dp = max(nums, nums)
//dp = max(dp + nums, dp)(i>=2)
int massage(int* nums, int numsSize){
if(!nums || numsSize == 0)
return 0;
if(numsSize == 1)
return nums;
int *dp = (int*)malloc(sizeof(int) * numsSize);
dp = nums;
dp = fmax(nums, nums);
for(int i = 2; i < numsSize; i++){
dp = fmax(dp + nums, dp);
}
return dp;
}
运行效率如下所示:
第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<nums)
data_buf++;
}
}
data_buf='\0';
*returnSize=numsSize;
return data_buf;
} 运行效率如下所示:
页:
[1]