力扣(LeetCode)刷题,简单题(第6期)
生活随笔
收集整理的這篇文章主要介紹了
力扣(LeetCode)刷题,简单题(第6期)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
第1題:在排序數組中查找數字
第2題:0~n-1中缺失的數
第3題:反轉單次順序
第4題:和為S的兩個數
第5題:和為S的連續正數序列
第6題:左旋轉字符串
第7題:滑動窗口的最大值
第8題:撲克牌中的順子
第9題:圓圈中最后剩下的數字
第10題:不用加、減、乘、除做加法運算
力扣(LeetCode)定期刷題,每期10道題,業務繁重的同志可以看看我分享的思路,不是最高效解決方案,只求互相提升。
第1題:在排序數組中查找數字
試題要求如下:
回答(C語言):
int search(int* nums, int numsSize, int target){int cou=0;for(int i=0;i<numsSize;i++){if(nums[i]==target){cou++;}}return cou;
}
運行效率如下所示:
第2題:0~n-1中缺失的數
試題要求如下:
回答(C語言):
int missingNumber(int* nums, int numsSize){for(int i=0;i<numsSize;i++){if(nums[i]!=i){return i;} }return nums[numsSize-1]+1;
}
運行效率如下所示:
第3題:反轉單次順序
試題要求如下:
回答(C語言):
/*** 去除重復空格,反轉整個字符串,再逐個反轉單個單詞**/void reverse(char* s, int i, int j){while(i < j){char c = s[i];s[i] = s[j];s[j] = c;i++; j--;}
}char * reverseWords(char * s){int i, j, len, flag = 0;i = j = 0;while(s[j]){if(s[j] != ' '){if(flag == -1 && i > 0){s[i++] = ' ';}s[i++] = s[j++];flag = 1;}else{j++;flag = -1;}}s[i] = '\0';reverse(s, 0, i-1);len = i;i = 0;for(j = 0; j <= len; j++){if(s[j] == ' ' || s[j] == '\0'){reverse(s, i, j-1);i = j+1;}}return s;
}
運行效率如下所示:
第4題:和為S的兩個數
試題要求如下:
回答(C語言):
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){int i=0,j=numsSize-1;int* data_buf=(int*)malloc(sizeof(int)*2);memset(data_buf,0,sizeof(data_buf));*returnSize=2;while(i<j){if(nums[i]+nums[j]==target){data_buf[0]=nums[i];data_buf[1]=nums[j];break;}if(nums[i]+nums[j]>target)j--;elsei++; }return data_buf;
}
運行效率如下所示:
第5題:和為S的連續正數序列
試題要求如下:
回答(C語言):
int** findContinuousSequence(int target, int* returnSize, int** returnColumnSizes){int count = 0;int MAXN = (int)sqrt(2.0 * target - 0.25); // 確定最大可能的連續值int SQUARE = MAXN * (MAXN + 1) / 2;int **res = (int**)malloc(MAXN * sizeof(int*));int *col = (int*)malloc(MAXN * sizeof(int));if (target <= SQUARE) SQUARE -= MAXN--; // 連續和大于目標值時減一while(MAXN > 0) {if ((target - SQUARE) % (MAXN + 1) == 0) { int *tmp = (int *)malloc((MAXN + 1) * sizeof(int)); for (int j = 0; j < MAXN + 1; j++) {*(tmp + j) = (target - SQUARE) / (MAXN + 1) + j;}*(res + count) = tmp;*(col + count) = MAXN + 1;count++;}SQUARE -= MAXN--;}*returnSize = count;*returnColumnSizes = col;return res;
}
運行效率如下所示:
第6題:左旋轉字符串
試題要求如下:
回答(C語言):
char* reverseLeftWords(char* s, int n){int j=0;int len=strlen(s);char *data_buf=(char *)malloc(sizeof(char)*(len+1));for(int i=n;i<len;i++){data_buf[j++]=s[i];}for(int i=0;i<n;i++){data_buf[j++]=s[i];}data_buf[len]='\0';return data_buf;
}
運行效率如下所示:
第7題:滑動窗口的最大值
試題要求如下:
回答(C語言):
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* maxSlidingWindow(int* nums, int numsSize, int k, int* returnSize){if(nums==NULL || numsSize<=0){*returnSize=0;return nums;}int* data_buf=(int *)malloc(sizeof(int)*(numsSize+1-k));int num=0;for(int i=0;i<numsSize+1-k;i++){num=nums[i];for(int j=i+1;j<=i+k-1;j++){if(num<nums[j])num=nums[j];}data_buf[i]=num;}*returnSize=numsSize+1-k;return data_buf;
}
運行效率如下所示:
第8題:撲克牌中的順子
試題要求如下:
回答(C語言):
int cmp ( const void *a , const void *b )
{ return *(int *)a > *(int *)b;
} bool isStraight(int* nums, int numsSize){int zero=0;qsort(nums,5,sizeof(int),cmp); for(int i=0;i<numsSize-1;i++){if(nums[i]==0){zero++;continue;}if(nums[i]==nums[i+1]) return false;if(nums[i]!=nums[i+1]+1)zero-=nums[i+1]-nums[i]-1;} return zero>=0;
}
運行效率如下所示:
第9題:圓圈中最后剩下的數字
試題要求如下:
回答(C語言):
//約瑟夫環int lastRemaining(int n, int m){int res=0;for(int i=2;i<=n;i++)res=(res+m)%i;return res;
}
運行效率如下所示:
第10題:不用加、減、乘、除做加法運算
試題要求如下:
回答(C語言):
int add(int a, int b){int temp=0;while(a!=0){temp=a^b;a=((unsigned int)(a&b)<<1);b=temp;}return b;
}
運行效率如下所示:
總結
以上是生活随笔為你收集整理的力扣(LeetCode)刷题,简单题(第6期)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全网仅此一篇:工业级压力传感器设计及实现
- 下一篇: 力扣(LeetCode)刷题,简单题(第