写在前面:
今天LeetCode 的每日一题质量一般(才不是我看都看不懂),
所以只好去刷一刷质量有保障的剑指 Offer 了。
题目1:剑指 Offer 03. 数组中重复的数字 - 力扣(Leetcode)
题目的接口:
class Solution { public: int findRepeatNumber(vector& nums) { } };
解题思路:
其实我第一个想到的是暴力的O(N平方)的解法,
但是想来也不会那么简单让我过,
所以就放弃这个解法了。
思路:
用哈希表记录出现的数字,然后当他再次出现的时候返回即可。
代码:
class Solution { public: int findRepeatNumber(vector& nums) { //建一个哈希表 unordered_map map; //遍历数组 for(int ret : nums) { //如果该数字再次出现就返回 if(map[ret] == 1) { return ret; } //记录出现过的数字 map[ret] = 1; } //因为数组中一定有重复数字,随便返回一个值过检查 return 1; } };
过啦!!!
题目2:剑指 Offer 06. 从尾到头打印链表 - 力扣(Leetcode)
题目的接口:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: vector reversePrint(ListNode* head) { } };
解题思路:
遍历链表,然后放进一个栈里,
再把栈里的元素放进一个数组里,就完成逆序了。
最后返回那个数组即可。
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: vector reversePrint(ListNode* head) { //建一个栈 stack st; //遍历链表并放进栈里 while(head != nullptr) { st.push(head); head = head->next; } vector v; //把栈的值取出,放进vector while(!st.empty()) { v.push_back(st.top()->val); st.pop(); } return v; } };
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。