力扣(LeetCode)刷题,简单题(第6期)

举报
不脱发的程序猿 发表于 2021/01/01 23:19:14 2021/01/01
【摘要】 目录 第1题:在排序数组中查找数字 第2题:0~n-1中缺失的数 第3题:反转单次顺序 第4题:和为S的两个数 第5题:和为S的连续正数序列 第6题:左旋转字符串 第7题:滑动窗口的最大值 第8题:扑克牌中的顺子 第9题:圆圈中最后剩下的数字 第10题:不用加、减、乘、除做加法运算 力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看...

目录

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

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

第3题:反转单次顺序

第4题:和为S的两个数

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

第6题:左旋转字符串

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

第8题:扑克牌中的顺子

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

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


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

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

试题要求如下:

回答(C语言):


  
  1. int search(int* nums, int numsSize, int target){
  2. int cou=0;
  3. for(int i=0;i<numsSize;i++)
  4. {
  5. if(nums[i]==target)
  6. {
  7. cou++;
  8. }
  9. }
  10. return cou;
  11. }

运行效率如下所示:


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

试题要求如下:

回答(C语言):


  
  1. int missingNumber(int* nums, int numsSize){
  2. for(int i=0;i<numsSize;i++){
  3. if(nums[i]!=i){
  4. return i;
  5. }
  6. }
  7. return nums[numsSize-1]+1;
  8. }

运行效率如下所示:


第3题:反转单次顺序

试题要求如下:

回答(C语言):


  
  1. /**
  2. * 去除重复空格,反转整个字符串,再逐个反转单个单词
  3. *
  4. */
  5. void reverse(char* s, int i, int j){
  6. while(i < j){
  7. char c = s[i];
  8. s[i] = s[j];
  9. s[j] = c;
  10. i++; j--;
  11. }
  12. }
  13. char * reverseWords(char * s){
  14. int i, j, len, flag = 0;
  15. i = j = 0;
  16. while(s[j]){
  17. if(s[j] != ' '){
  18. if(flag == -1 && i > 0){
  19. s[i++] = ' ';
  20. }
  21. s[i++] = s[j++];
  22. flag = 1;
  23. }else{
  24. j++;
  25. flag = -1;
  26. }
  27. }
  28. s[i] = '\0';
  29. reverse(s, 0, i-1);
  30. len = i;
  31. i = 0;
  32. for(j = 0; j <= len; j++){
  33. if(s[j] == ' ' || s[j] == '\0'){
  34. reverse(s, i, j-1);
  35. i = j+1;
  36. }
  37. }
  38. return s;
  39. }

运行效率如下所示:


第4题:和为S的两个数

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. int* twoSum(int* nums, int numsSize, int target, int* returnSize){
  5. int i=0,j=numsSize-1;
  6. int* data_buf=(int*)malloc(sizeof(int)*2);
  7. memset(data_buf,0,sizeof(data_buf));
  8. *returnSize=2;
  9. while(i<j){
  10. if(nums[i]+nums[j]==target){
  11. data_buf[0]=nums[i];
  12. data_buf[1]=nums[j];
  13. break;
  14. }
  15. if(nums[i]+nums[j]>target)
  16. j--;
  17. else
  18. i++;
  19. }
  20. return data_buf;
  21. }

运行效率如下所示:


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

试题要求如下:

回答(C语言):


  
  1. int** findContinuousSequence(int target, int* returnSize, int** returnColumnSizes){
  2. int count = 0;
  3. int MAXN = (int)sqrt(2.0 * target - 0.25); // 确定最大可能的连续值
  4. int SQUARE = MAXN * (MAXN + 1) / 2;
  5. int **res = (int**)malloc(MAXN * sizeof(int*));
  6. int *col = (int*)malloc(MAXN * sizeof(int));
  7. if (target <= SQUARE) SQUARE -= MAXN--; // 连续和大于目标值时减一
  8. while(MAXN > 0) {
  9. if ((target - SQUARE) % (MAXN + 1) == 0) {
  10. int *tmp = (int *)malloc((MAXN + 1) * sizeof(int));
  11. for (int j = 0; j < MAXN + 1; j++) {
  12. *(tmp + j) = (target - SQUARE) / (MAXN + 1) + j;
  13. }
  14. *(res + count) = tmp;
  15. *(col + count) = MAXN + 1;
  16. count++;
  17. }
  18. SQUARE -= MAXN--;
  19. }
  20. *returnSize = count;
  21. *returnColumnSizes = col;
  22. return res;
  23. }

运行效率如下所示:


第6题:左旋转字符串

试题要求如下:

回答(C语言):


  
  1. char* reverseLeftWords(char* s, int n){
  2. int j=0;
  3. int len=strlen(s);
  4. char *data_buf=(char *)malloc(sizeof(char)*(len+1));
  5. for(int i=n;i<len;i++){
  6. data_buf[j++]=s[i];
  7. }
  8. for(int i=0;i<n;i++){
  9. data_buf[j++]=s[i];
  10. }
  11. data_buf[len]='\0';
  12. return data_buf;
  13. }

运行效率如下所示:


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

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. int* maxSlidingWindow(int* nums, int numsSize, int k, int* returnSize){
  5. if(nums==NULL || numsSize<=0){
  6. *returnSize=0;
  7. return nums;
  8. }
  9. int* data_buf=(int *)malloc(sizeof(int)*(numsSize+1-k));
  10. int num=0;
  11. for(int i=0;i<numsSize+1-k;i++){
  12. num=nums[i];
  13. for(int j=i+1;j<=i+k-1;j++){
  14. if(num<nums[j])
  15. num=nums[j];
  16. }
  17. data_buf[i]=num;
  18. }
  19. *returnSize=numsSize+1-k;
  20. return data_buf;
  21. }

运行效率如下所示:


第8题:扑克牌中的顺子

试题要求如下:

回答(C语言):


  
  1. int cmp ( const void *a , const void *b )
  2. {
  3. return *(int *)a > *(int *)b;
  4. }
  5. bool isStraight(int* nums, int numsSize){
  6. int zero=0;
  7. qsort(nums,5,sizeof(int),cmp);
  8. for(int i=0;i<numsSize-1;i++)
  9. {
  10. if(nums[i]==0){
  11. zero++;
  12. continue;
  13. }
  14. if(nums[i]==nums[i+1])
  15. return false;
  16. if(nums[i]!=nums[i+1]+1)
  17. zero-=nums[i+1]-nums[i]-1;
  18. }
  19. return zero>=0;
  20. }

运行效率如下所示:


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

试题要求如下:

回答(C语言):


  
  1. //约瑟夫环
  2. int lastRemaining(int n, int m){
  3. int res=0;
  4. for(int i=2;i<=n;i++)
  5. res=(res+m)%i;
  6. return res;
  7. }

运行效率如下所示:


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

试题要求如下:

回答(C语言):


  
  1. int add(int a, int b){
  2. int temp=0;
  3. while(a!=0){
  4. temp=a^b;
  5. a=((unsigned int)(a&b)<<1);
  6. b=temp;
  7. }
  8. return b;
  9. }

运行效率如下所示:

文章来源: handsome-man.blog.csdn.net,作者:不脱发的程序猿,版权归原作者所有,如需转载,请联系作者。

原文链接:handsome-man.blog.csdn.net/article/details/104641452

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。