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

举报
不脱发的程序猿 发表于 2021/01/01 00:09:25 2021/01/01
【摘要】 目录 第1题:搜索插入位置 第2题:外观数组 第3题:最大子序和 第4题:最后一个单词的长度 第5题:加一 第6题:二进制求和 第7题:求平方根 第8题:爬楼梯 第9题:删除排序链表中的重复元素 第10题:合并两个有序数组 力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。 第1题:...

目录

第1题:搜索插入位置

第2题:外观数组

第3题:最大子序和

第4题:最后一个单词的长度

第5题:加一

第6题:二进制求和

第7题:求平方根

第8题:爬楼梯

第9题:删除排序链表中的重复元素

第10题:合并两个有序数组


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

第1题:搜索插入位置

试题要求如下:

回答(C语言): 


  
  1. int searchInsert(int* nums, int numsSize, int target){
  2. int num=0;
  3. if(numsSize<=0)
  4. return 0;
  5. for(int i=0,j=1;i<numsSize;i++,j++){
  6. if(target<nums[0]){
  7. num=0;
  8. break;
  9. }
  10. else if(target>nums[numsSize-1]){
  11. num=numsSize;
  12. break;
  13. }
  14. else{
  15. if(nums[i]==target) {
  16. num=i;
  17. break;
  18. }
  19. if(target>nums[i] && target<nums[j]){
  20. num=j;
  21. break;
  22. }
  23. }
  24. }
  25. return num;
  26. }

第2题:外观数组

试题要求如下:

 回答(C语言): 


  
  1. char * countAndSay(int n){
  2. if(n==1)
  3. return "1";
  4. char *s=countAndSay(n-1);
  5. char *a=(char *)malloc(5000);
  6. char *ans=(char *)malloc(5000);
  7. int count=0;
  8. int l=strlen(s);
  9. int j=0;
  10. for(int i=0;i<l;i++){
  11. if(i == 0 || s[i]==s[i-1])
  12. count++;
  13. else{
  14. a[j++]='0'+count;
  15. a[j++]=s[i-1];
  16. count=1;
  17. }
  18. if (i == l - 1) {
  19. a[j++]='0'+count;
  20. a[j++]=s[i];
  21. }
  22. }
  23. a[j]='\0';
  24. ans = a;
  25. return ans;
  26. }

第3题:最大子序和

试题要求如下:

  回答(C语言): 


  
  1. int maxSubArray(int* nums, int numsSize){
  2. int max = nums[0];
  3. int b = 0;
  4. for(int i = 0; i < numsSize; i++){
  5. b += nums[i];
  6. if(b > max) max = b;
  7. if(b < 0) b = 0;
  8. }
  9. return max;
  10. }

第4题:最后一个单词的长度

 试题要求如下:

回答(C语言): 


  
  1. int lengthOfLastWord(char * s){
  2. int num=strlen(s);
  3. int len=0;
  4. if(num<=0)
  5. return 0;
  6. //重后往前,若有空格,则去掉空格
  7. //若全为空格则返回0
  8. while(s[--num]==' '){
  9. if(num==0){
  10. return 0;
  11. }
  12. }
  13. while(num>=0){
  14. if(s[num--]==' ')
  15. break;
  16. len++;
  17. }
  18. return len;
  19. }

第5题:加一

试题要求如下:

 回答(C语言): 


  
  1. int* plusOne(int* digits, int digitsSize, int* returnSize){
  2. int *buf=(int *)malloc((digitsSize + 1) * sizeof (int));
  3. for(int i=digitsSize-1;i>=0;i--){
  4. if(digits[i]+1==10){
  5. digits[i]=0;
  6. }
  7. else{
  8. digits[i]+=1;
  9. returnSize[0]=digitsSize;
  10. return digits;
  11. }
  12. }
  13. buf[0]=1;
  14. for(int i=0,j=1;i<digitsSize;i++,j++)
  15. buf[j]=digits[i];
  16. returnSize[0]=digitsSize+1;
  17. return buf;
  18. }

第6题:二进制求和

试题要求如下:

 回答(C语言): 


  
  1. char * addBinary(char * a, char * b){
  2. int num=0,len_a=strlen(a),len_b=strlen(b),len_long=0;
  3. if(len_a>=len_b){
  4. len_long=len_a+2;
  5. }
  6. else{
  7. len_long=len_b+2;
  8. }
  9. char *buf=(char *)malloc(sizeof(char)*(len_long)) ;
  10. buf[--len_long]='\0';
  11. buf[0]='0';
  12. while(len_long>0){
  13. num+=len_a>0?a[--len_a]-'0':0;
  14. num+=len_b>0?b[--len_b]-'0':0;
  15. if(num==0){
  16. num=0;
  17. buf[--len_long]='0';
  18. }
  19. else if(num==1){
  20. num=0;
  21. buf[--len_long]='1';
  22. }
  23. else if(num==2){
  24. num=1;
  25. buf[--len_long]='0';
  26. }
  27. else if(num==3){
  28. num=1;
  29. buf[--len_long]='1';
  30. }
  31. }
  32. if(buf[0]=='0')
  33. return buf+1;
  34. else
  35. return buf;
  36. }

第7题:求平方根

试题要求如下:

  回答(C语言): 


  
  1. int mySqrt(int x){
  2. //牛顿迭代法
  3. long r = x;
  4. while(r * r > x)
  5. {
  6. r = (r + x / r) / 2;//迭代
  7. }
  8. return (int)r;
  9. }

第8题:爬楼梯

试题要求如下:

   回答(C语言),算法说明:


  
  1. int climbStairs(int n){
  2. if (n == 1) {
  3. return 1;
  4. }
  5. int *dp=(int *)malloc(sizeof(int)*(n+1));
  6. dp[1] = 1;
  7. dp[2] = 2;
  8. for (int i = 3; i <= n; i++) {
  9. dp[i] = dp[i - 1] + dp[i - 2];
  10. }
  11. return dp[n];
  12. }

第9题:删除排序链表中的重复元素

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. struct ListNode* deleteDuplicates(struct ListNode* head){
  9. struct ListNode * p = head;
  10. struct ListNode * q;
  11. while(NULL != p)
  12. {
  13. while(NULL != p->next && p->val == p->next->val)
  14. {
  15. q = p->next;
  16. p->next = q->next;
  17. free(q);
  18. }
  19. p = p->next;
  20. }
  21. return head;
  22. }

第10题:合并两个有序数组

试题要求如下:

 回答(C语言):


  
  1. void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
  2. int p = m + n;
  3. m--;
  4. n--;
  5. while (n >= 0 && m >= 0) {
  6. nums1[--p] = nums1[m] <= nums2[n] ? nums2[n--] : nums1[m--];
  7. }
  8. while (n >= 0) {
  9. nums1[--p] = nums2[n--];
  10. }
  11. }

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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