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

举报
不脱发的程序猿 发表于 2020/12/28 00:29:23 2020/12/28
【摘要】 目录 第1题:移除重复节点 第2题:FizzBuzz 第3题:根据数字二进制下1的数目排序 第4题:最小差值1 第5题:斐波那契数 第6题:数组的相对排序 第7题:解码字母到整数映射 第8题:最长特殊序列1 第9题:单值二叉树 第10题:查找常用字符 力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案...

目录

第1题:移除重复节点

第2题:FizzBuzz

第3题:根据数字二进制下1的数目排序

第4题:最小差值1

第5题:斐波那契数

第6题:数组的相对排序

第7题:解码字母到整数映射

第8题:最长特殊序列1

第9题:单值二叉树

第10题:查找常用字符


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

第1题:移除重复节点

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. struct ListNode* removeDuplicateNodes(struct ListNode* head){
  9. char *map = malloc(20001);
  10. memset(map, 0, 20001);
  11. struct ListNode *pre;
  12. struct ListNode *cur = head;
  13. while(cur){
  14. if(map[cur->val] == 0){
  15. map[cur->val] = 1;
  16. pre = cur;
  17. }
  18. else {
  19. pre->next = cur->next; // 删除这个重复的节点
  20. }
  21. cur = cur->next;
  22. }
  23. free(map);
  24. return head;
  25. }

运行效率如下所示:


第2题:FizzBuzz

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. char ** fizzBuzz(int n, int* returnSize){
  5. char** res = (char**)malloc(sizeof(char*)*n);
  6. char* s;
  7. for(int i = 0,m = 0;i < n;i++)
  8. {
  9. m = i+1;
  10. if(m%3==0 && m%5!=0)
  11. {
  12. s = (char*)malloc(sizeof(char)*5);
  13. strcpy(s,"Fizz");
  14. res[i] = s;
  15. }
  16. else if(m%3!=0 && m%5==0)
  17. {
  18. s = (char*)malloc(sizeof(char)*5);
  19. strcpy(s,"Buzz");
  20. res[i] = s;
  21. }
  22. else if(m%3==0 && m%5==0)
  23. {
  24. s = (char*)malloc(sizeof(char)*9);
  25. strcpy(s,"FizzBuzz");
  26. res[i] = s;
  27. }
  28. else
  29. {
  30. s = (char*)malloc(sizeof(char)*11);
  31. sprintf(s,"%d",m);
  32. res[i] = s;
  33. }
  34. }
  35. *returnSize = n;
  36. return res;
  37. }

运行效率如下所示:


第3题:根据数字二进制下1的数目排序

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. int onefigure(int num){
  5. int fi = 0;
  6. while(num != 0){
  7. if((num & 1) == 1){
  8. fi++;
  9. }
  10. num >>= 1;
  11. }
  12. return fi;
  13. }
  14. int cmp(const void * a, const void * b){
  15. int c = *(int *)a,d = *(int*)b;
  16. int f1 = 0, f2 = 0;
  17. f1 = onefigure(c);
  18. f2 = onefigure(d);
  19. if(f1 == f2){
  20. return c - d;
  21. }
  22. return f1 - f2;
  23. }
  24. int* sortByBits(int* arr, int arrSize, int* returnSize){
  25. *returnSize = arrSize;
  26. qsort(arr,arrSize,sizeof(int), cmp);
  27. return arr;
  28. }

运行效率如下所示:


第4题:最小差值1

试题要求如下:

回答(C语言):


  
  1. int smallestRangeI(int* A, int ASize, int K){
  2. int min,max,aver;
  3. min=max=A[0];
  4. for(int i=0;i<ASize;i++){
  5. if(max<A[i])max=A[i];
  6. if(min>A[i])min=A[i];
  7. }
  8. aver=(min+max)/2;
  9. if(abs(max-aver)<=K&&abs(min-aver)<=K)
  10. return 0;
  11. return max-min-K-K;
  12. }

运行效率如下所示:


第5题:斐波那契数

试题要求如下:

回答(C语言):


  
  1. int fib(int N){
  2. int a = 0,b = 1,c = 0;
  3. if(N == 0){
  4. return a;
  5. }
  6. if(N == 1){
  7. return b;
  8. }
  9. for(int i = 2;i <= N;i++){
  10. c = a+b;
  11. a = b;
  12. b = c;
  13. }
  14. return c;
  15. }

运行效率如下所示:


第6题:数组的相对排序

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. int* relativeSortArray(int* arr1, int arr1Size, int* arr2, int arr2Size, int* returnSize){
  5. int arr[1001]={0};
  6. int i,j=0;
  7. //记录arr1数字出现的次数次数
  8. for(i=0;i<arr1Size;i++){
  9. arr[arr1[i]]++;
  10. }
  11. //找到在arr2和arr1都出现的数字
  12. for(i=0;i<arr2Size;i++){
  13. while(arr[arr2[i]]>0){
  14. arr1[j]=arr2[i];
  15. j++;
  16. arr[arr2[i]]--;
  17. }
  18. }
  19. //找arr1有,arr2没有的
  20. for(i=0;i<1001;i++){
  21. while(arr[i]>0){
  22. arr1[j++]=i;
  23. arr[i]--;
  24. }
  25. }
  26. *returnSize=arr1Size;
  27. return arr1;
  28. }

运行效率如下所示:


第7题:解码字母到整数映射

试题要求如下:

回答(C语言):


  
  1. char * freqAlphabets(char * s){
  2. int num = 0,cou = 0;
  3. char * data_buf = (char *)malloc(sizeof(char) * 1000);
  4. for(int i = 0;i < strlen(s);){
  5. if(s[i+1] != '\0' && s[i+2] == '#')
  6. {
  7. num = (s[i]-'0') * 10;
  8. num += s[i+1]-'0';
  9. data_buf[cou++] = 'a'+(num-1);
  10. i += 3;
  11. }
  12. else
  13. {
  14. data_buf[cou++] = 'a'+((s[i]-'0')-1);
  15. i++;
  16. }
  17. }
  18. data_buf[cou] = '\0';
  19. return data_buf;
  20. }

运行效率如下所示:


第8题:最长特殊序列1

试题要求如下:

回答(C语言):


  
  1. int findLUSlength(char * a, char * b){
  2. int alen=strlen(a),blen=strlen(b);
  3. if (strcmp(a,b)==0)
  4. return -1;
  5. return alen>blen?alen:blen;
  6. }

运行效率如下所示:


第9题:单值二叉树

试题要求如下:

回答(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. bool RecureTree(struct TreeNode* n, int m){
  10. if (n == NULL) {
  11. return true;
  12. }
  13. if (n->val != m) {
  14. return false;
  15. }
  16. return RecureTree(n->left, m) & RecureTree(n->right, m);
  17. }
  18. bool isUnivalTree(struct TreeNode* root){
  19. return RecureTree(root, root->val);
  20. }

运行效率如下所示:


第10题:查找常用字符

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. char ** commonChars(char ** A, int ASize, int* returnSize)
  5. {
  6. char** ret = (char**)malloc(101 * sizeof(char*));
  7. int q = 0;
  8. for (int i = 0; i < 101; i++) {
  9. ret[i] = (char*)malloc(2 * sizeof(char));
  10. memset(ret[i], 0, 2);
  11. }
  12. int hash[100][128] = {0}; // 用于统计所有单词的字母出现情况
  13. for (int i = 0; i < ASize; i ++) {
  14. int j = 0;
  15. while (A[i][j]) {
  16. hash[i][A[i][j]]++;
  17. j++;
  18. }
  19. }
  20. for (int j = 0; j < 128; j++) {
  21. int min = hash[0][j];
  22. if (min == 0) {
  23. continue;
  24. }
  25. for (int i = 0; i < ASize; i++) {
  26. if (hash[i][j] < min) {
  27. min = hash[i][j];
  28. }
  29. }
  30. while (min) {
  31. ret[q++][0] = j;
  32. min--;
  33. }
  34. }
  35. *returnSize = q;
  36. return ret;
  37. }

运行效率如下所示:

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

原文链接:blog.csdn.net/m0_38106923/article/details/105704862

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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