c语言从开发到脱发,力扣(LeetCode)刷题,简单题(第6期)

目录

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

第1题:在排序数组中查找数字

试题要求如下:

75c18718eda14920b126632849a3b96a.png

回答(C语言):

int search(int* nums, int numsSize, int target){

int cou=0;

for(int i=0;i

{

if(nums[i]==target)

{

cou++;

}

}

return cou;

}

运行效率如下所示:

afe07b9056049c8e0987efe6a0e20106.png

第2题:0~n-1中缺失的数

试题要求如下:

20987250c81e920a43e4b5be2a2fbfe9.png

回答(C语言):

int missingNumber(int* nums, int numsSize){

for(int i=0;i

if(nums[i]!=i){

return i;

}

}

return nums[numsSize-1]+1;

}

运行效率如下所示:

50f1f885d06b6ab92c2456a973943c85.png

第3题:反转单次顺序

试题要求如下:

526581303859232bb3d76fa8d7b714f4.png

回答(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;

}

运行效率如下所示:

421407b1d6787a1a55a09338ecccde6c.png

第4题:和为S的两个数

试题要求如下:

00732a44c6e26a2f1638cd1ecc0d8263.png

回答(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

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;

}

运行效率如下所示:

82f4f125cae00b792e85f56a12b8f02d.png

第5题:和为S的连续正数序列

试题要求如下:

8322b7352cd958f20c1ad08f2cfdf2bb.png

回答(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;

}

运行效率如下所示:

0b97a907648dcdaa1aa1d11c04ee4b64.png

第6题:左旋转字符串

试题要求如下:

c3e059687829b79af8f0704c7974c06b.png

回答(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

data_buf[j++]=s[i];

}

for(int i=0;i

data_buf[j++]=s[i];

}

data_buf[len]='\0';

return data_buf;

}

运行效率如下所示:

7cc0b8b2213157d8c5fbdcb9cee93b85.png

第7题:滑动窗口的最大值

试题要求如下:

74520d694b876ae7d0a74be4de99daad.png

回答(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

num=nums[i];

for(int j=i+1;j<=i+k-1;j++){

if(num

num=nums[j];

}

data_buf[i]=num;

}

*returnSize=numsSize+1-k;

return data_buf;

}

运行效率如下所示:

da40306e87ed7afbe833e45ace3239e8.png

第8题:扑克牌中的顺子

试题要求如下:

9a100b5de2bf465b0c89d84b6ec3a88b.png

回答(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

{

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;

}

运行效率如下所示:

71d7b809bce5f3845051f54793fe26cb.png

第9题:圆圈中最后剩下的数字

试题要求如下:

8232e69cb98e72c1618cf5b84055f5e7.png

回答(C语言):

//约瑟夫环

int lastRemaining(int n, int m){

int res=0;

for(int i=2;i<=n;i++)

res=(res+m)%i;

return res;

}

运行效率如下所示:

9040dc421d0315f164c681b21a24c250.png

第10题:不用加、减、乘、除做加法运算

试题要求如下:

e4b74217d6c9016b3cb723f2d2966070.png

回答(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;

}

运行效率如下所示:

e2404e40d7347bf9c933396944537ca3.png

本文分享 CSDN - 不脱发的程序猿。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值