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

举报
不脱发的程序猿 发表于 2020/12/31 23:17:16 2020/12/31
【摘要】 目录 第1题:二进制中1的个数 第2题:打印从 1 到最大的 n 位十进制数 第3题:删除链表的节点 第4题:调整数组顺序使奇数位于偶数前面 第5题:链表中倒数第K个节点 第6题:反转链表 第7题:二叉树的镜像 第8题:顺时针打印矩阵 第9题:数组中出现次数超过一半的数 第10题:最小的K个数 力扣(LeetCode)定期刷题,每期10道题,业务繁重的...

目录

第1题:二进制中1的个数

第2题:打印从 1 到最大的 n 位十进制数

第3题:删除链表的节点

第4题:调整数组顺序使奇数位于偶数前面

第5题:链表中倒数第K个节点

第6题:反转链表

第7题:二叉树的镜像

第8题:顺时针打印矩阵

第9题:数组中出现次数超过一半的数

第10题:最小的K个数


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

第1题:二进制中1的个数

试题要求如下:

回答(C语言):


  
  1. int hammingWeight(uint32_t n) {
  2. int cou=0;
  3. while(n>0){
  4. if(n%2==1){ //注意是二进制
  5. cou++;
  6. }
  7. n/=2;
  8. }
  9. return cou;
  10. }

运行效率如下所示:


第2题:打印从 1 到最大的 n 位十进制数

试题要求如下:

回答(C语言):


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

 运行效率如下所示:


第3题:删除链表的节点

试题要求如下:

回答(C语言):


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

运行效率如下所示:


第4题:调整数组顺序使奇数位于偶数前面

试题要求如下:

回答(C语言):


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

运行效率如下所示:


第5题:链表中倒数第K个节点

试题要求如下:

回答(C语言):


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

运行效率如下所示:


第6题:反转链表

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. struct ListNode* reverseList(struct ListNode* head){
  9. struct ListNode *cur = NULL,*pre = head,*t;
  10. while (pre != NULL) {
  11. t = pre->next;
  12. pre->next = cur;
  13. cur = pre;
  14. pre = t;
  15. }
  16. return cur;
  17. }

运行效率如下所示:


第7题:二叉树的镜像

试题要求如下:

回答(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* mirrorTree(struct TreeNode* root){
  10. if (root==NULL) {
  11. return NULL;
  12. }
  13. struct TreeNode* right = mirrorTree(root->right);
  14. struct TreeNode* left = mirrorTree(root->left);
  15. root->left = right;
  16. root->right = left;
  17. return root;
  18. }

运行效率如下所示:


第8题:顺时针打印矩阵

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
  5. if(matrixSize==0){
  6. *returnSize=0;
  7. return 0;
  8. }
  9. int cycle=0,row=0,column=0,k=0;
  10. *returnSize=matrixSize*(*matrixColSize);
  11. int *res=malloc(*returnSize * sizeof(int));
  12. while(k<*returnSize){
  13. res[k++]=matrix[row][column];
  14. if(row==cycle&&(column<*matrixColSize-cycle-1)) column++;
  15. else if((column==*matrixColSize-cycle-1)&&(row<matrixSize-cycle-1)) row++;
  16. else if((row==matrixSize-cycle-1)&&column>cycle) column--;
  17. else if(column==cycle&&(row>cycle+1)) row--;
  18. else{
  19. cycle++;
  20. column++;
  21. }
  22. }
  23. return res;
  24. }

运行效率如下所示:


第9题:数组中出现次数超过一半的数

试题要求如下:

回答(C语言):


  
  1. int majorityElement(int* nums, int numsSize){
  2. int key = nums[0];
  3. int count = 0;
  4. for (int i = 0; i < numsSize; i++)
  5. {
  6. if(nums[i] == key)
  7. count++;
  8. else
  9. count--;
  10. if(count <= 0)
  11. {
  12. key = nums[i+1];
  13. }
  14. }
  15. return key;
  16. }

运行效率如下所示:


第10题:最小的K个数

试题要求如下:

回答(C语言):


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

运行效率如下所示(逻辑简单,效率惨不忍睹!):

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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