题目:剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 - 力扣(Leetcode)
题目的接口:
class Solution { public: vector exchange(vector& nums) { } };
解题思路:
方法1:
我的思路比较暴力,也是最容易想到的思路:
建一个vector,
第一次遍历数组,把奇数插入进去,
第二次遍历数组,把偶数插入进去,
然后返回即可。
这种方法最简单。
方法2:
其实我还想到一种方法,原地完成:
只需要遍历一次数组,遇到偶数与数组尾部交换,
然后让尾指针++即可。
不过我用的是第一种方法。
代码:
class Solution { public: vector exchange(vector& nums) { vector v; //第一次遍历,尾插奇数 for(auto e : nums) { if(e % 2 == 1) { v.push_back(e); } } //第二次遍历,尾插偶数 for(auto e : nums) { if(e % 2 == 0) { v.push_back(e); } } return v; } };
过啦!!!
题目:剑指 Offer 24. 反转链表 - 力扣(Leetcode)
题目的接口:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { } };
解题思路:
这道题看完后,我有两种思路,
第一种是将链表的数据逆置;
第二种是将链表的指针逆置;
我个人感觉将链表的指针逆置更容易,效率也更高一些,
具体思路就是将原头结点指向空,
双指针遍历链表逆置指针即可。
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { //判断链表是否为空 if(head == nullptr) { return head; } //设置双指针 ListNode* cur = head->next; ListNode* prev = head; //将头结点指向空 head->next = nullptr; //遍历链表,逆置指针指向 while(cur) { ListNode*tmp = prev; prev = cur; cur = cur->next; prev->next = tmp; } return prev; } };
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。