力扣(LeetCode)刷题,简单题(第6期)
【摘要】 目录
第1题:在排序数组中查找数字
第2题:0~n-1中缺失的数
第3题:反转单次顺序
第4题:和为S的两个数
第5题:和为S的连续正数序列
第6题:左旋转字符串
第7题:滑动窗口的最大值
第8题:扑克牌中的顺子
第9题:圆圈中最后剩下的数字
第10题:不用加、减、乘、除做加法运算
力扣(LeetCode)定期刷题,每期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--;
-
else
-
i++;
-
}
-
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;
-
}
运行效率如下所示:

文章来源: handsome-man.blog.csdn.net,作者:不脱发的程序猿,版权归原作者所有,如需转载,请联系作者。
原文链接:handsome-man.blog.csdn.net/article/details/104641452
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)