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

举报
不脱发的程序猿 发表于 2020/12/31 22:56:51 2020/12/31
【摘要】 目录 第1题:反转图像 第2题:上升下降字符串 第3题:合并两个排序链表 第4题:和为0的N个唯一整数 第5题:反转二叉树 第6题:高度检查器 第7题:距离值 第8题:自除数 第9题:最大数值 第10题:反转字符串 力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。 第1题:反转图像...

目录

第1题:反转图像

第2题:上升下降字符串

第3题:合并两个排序链表

第4题:和为0的N个唯一整数

第5题:反转二叉树

第6题:高度检查器

第7题:距离值

第8题:自除数

第9题:最大数值

第10题:反转字符串


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

第1题:反转图像

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Return an array of arrays of size *returnSize.
  3. * The sizes of the arrays are returned as *returnColumnSizes array.
  4. * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
  5. */
  6. int** flipAndInvertImage(int** A, int ASize, int* AColSize, int* returnSize, int** returnColumnSizes){
  7. int num=0,data_buf=0;
  8. for(int i=0;i<ASize;i++){
  9. num=AColSize[i]-1;
  10. for(int j=0;j<AColSize[i];j++,num--){
  11. if(j<num){
  12. data_buf=A[i][j];
  13. A[i][j]=A[i][num];
  14. A[i][num]=data_buf;
  15. }
  16. }
  17. for(int j=0;j<AColSize[i];j++){
  18. A[i][j]=!A[i][j];
  19. }
  20. }
  21. *returnSize=ASize;
  22. *returnColumnSizes=AColSize;
  23. return A;
  24. }

运行效率如下所示:


第2题:上升下降字符串

试题要求如下:

回答(C语言):


  
  1. char * sortString(char * s){
  2. int* cnt = (int*)malloc(sizeof(int)*26);
  3. memset(cnt,0,sizeof(int)*26);
  4. int len = strlen(s);
  5. int i = len,j=0;
  6. while(i--) cnt[ s[i] - 'a']++;
  7. for(i = 0;i<len;){
  8. for(j = 0 ; j<26&&i<len ; j++){
  9. if(cnt[j]>0){
  10. s[i++] = 'a' + j;
  11. cnt[j]--;
  12. }
  13. }
  14. for(j=25 ; j>=0 && i<len ; j--){
  15. if(cnt[j]>0){
  16. s[i++] = 'a' + j;
  17. cnt[j]--;
  18. }
  19. }
  20. }
  21. return s;
  22. }

运行效率如下所示:


第3题:合并两个排序链表

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
  9. if (NULL == l1)
  10. return l2;
  11. if (NULL == l2)
  12. return l1;
  13. if (l1->val > l2->val)
  14. {
  15. l2->next=mergeTwoLists(l1, l2->next);
  16. return l2;
  17. }
  18. else
  19. {
  20. l1->next=mergeTwoLists(l1->next, l2);
  21. return l1;
  22. }
  23. }

运行效率如下所示:


第4题:和为0的N个唯一整数

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. int* sumZero(int n, int* returnSize){
  5. int* data_buf=(int*)malloc(sizeof(int)*(n));
  6. memset(data_buf,0,sizeof(int)*(n));
  7. *returnSize=n;
  8. for(int i=0,j=n-1;i<n/2;i++,j--){
  9. data_buf[i]=i+1;
  10. data_buf[j]=-(i+1);
  11. }
  12. return data_buf;
  13. }

运行效率如下所示:


第5题:反转二叉树

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * struct TreeNode *left;
  6. * struct TreeNode *right;
  7. * };
  8. */
  9. struct TreeNode* invertTree(struct TreeNode* root){
  10. if(root==0) return 0;
  11. struct TreeNode* tmp=root->left;
  12. root->left=invertTree(root->right);
  13. root->right=invertTree(tmp);
  14. return root;
  15. }

运行效率如下所示:


第6题:高度检查器

试题要求如下:

回答(C语言):


  
  1. int cmp(const void *a, const void *b)
  2. {
  3. return *(int*)a - *(int*)b;
  4. }
  5. int heightChecker(int* heights, int heightsSize){
  6. int ans = 0, tmp[heightsSize];
  7. for(int i = 0;i < heightsSize;++i)
  8. tmp[i] = heights[i];
  9. qsort(tmp, heightsSize, sizeof(int), cmp);
  10. for(i = 0;i < heightsSize;++i)
  11. {
  12. if(tmp[i] != heights[i])
  13. ++ans;
  14. }
  15. return ans;
  16. }

运行效率如下所示:


第7题:距离值

试题要求如下:

回答(C语言):


  
  1. int findTheDistanceValue(int* arr1, int arr1Size, int* arr2, int arr2Size, int d){
  2. int ans = 0;
  3. for(int i = 0,j = 0;i < arr1Size;++i)
  4. {
  5. for(j = 0;j < arr2Size && abs(arr1[i] - arr2[j]) > d;++j);
  6. if(j >= arr2Size)
  7. ++ans;
  8. }
  9. return ans;
  10. }

运行效率如下所示:


第8题:自除数

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. int* selfDividingNumbers(int left, int right, int* returnSize){
  5. int len = right-left+1;
  6. int index=0;
  7. int *returnNum = (int *)malloc(sizeof(int)*(len+1));
  8. memset(returnNum, 0, sizeof(int)*(len+1));
  9. for(int i=left; i<=right; i++){
  10. int flag=0, num=1, tmp=i;
  11. while(tmp > 0){
  12. num = tmp%10;
  13. if(num == 0 || i%num != 0){
  14. flag = 1;
  15. }
  16. tmp /= 10;
  17. }
  18. if(flag == 0)
  19. returnNum[index++] = i;
  20. }
  21. *returnSize = index;
  22. return returnNum;
  23. }

运行效率如下所示:


第9题:最大数值

试题要求如下:

回答(C语言):


  
  1. /* a-b, k等于结果的符号位 */
  2. /* k=1, b>a, 返回b*1 + a*0 */
  3. /* k=0, b<=a, 返回b*0 + a*1 */
  4. int maximum(int a, int b){
  5. long k = (((long)a - (long)b) >> 63) & 1;
  6. return b * k + a * (k ^ 1);
  7. }

运行效率如下所示:


第10题:反转字符串

试题要求如下:

回答(C语言):


  
  1. void reverseString(char* s, int sSize){
  2. int i=0,j=sSize-1;
  3. char data_buf;
  4. while(i<j){
  5. data_buf=s[i];
  6. s[i]=s[j];
  7. s[j]=data_buf;
  8. i++;
  9. j--;
  10. }
  11. }

运行效率如下所示:

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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