- 博客(13)
- 收藏
- 关注
原创 二叉树的遍历(迭代写法)
前序遍历顺序 根 左 右/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int>
2020-07-17 21:18:29 264
原创 奇数值单元格的数目
题目代码class Solution {public: int oddCells(int n, int m, vector<vector<int>>& indices) { int r[51] = {0}, c[51] = {0}; for(int i = 0; i < indices.size(); i ++) { r[indices[i][0]] ++;
2020-07-11 17:27:21 135
原创 删除最外层的括号
题目思路因为是删除最外层的括号,所以最外层只有一层,所以先设两个变量L和R分别表示左括号和右括号的数量,把最外层的左括号先算进去,然后开始遍历字符串,因为一直有一个左括号被计算着所以遍历的时候左右括号的数量不相等,所以这时候的括号就算是内部括号了,相等的时候就说明外部括号找到了,重新定义初始变量。代码class Solution {public: string removeOuterParentheses(string S) { string l; int
2020-07-11 16:01:30 366
原创 旅行终点站
题目思路这其实是一个图的问题,paths数组中存储的是有向边,把所有的边放在一个图中会发现终点站只有入度,出度为零,所以通过寻找出度为零的点来确定终点站。代码class Solution {public: string destCity(vector<vector<string>>& paths) { map<string,int> graph; for(auto a : paths) {
2020-07-09 09:02:02 201 1
原创 访问所有点的最小时间
题目思路切比雪夫距离dx = abs(x1 - x0), dy = abs(y1 - y0)如果 dx < dy 先沿对角线移动dx次,再沿竖直移动dy - dx次,总共移动dx + (dy - dx) = dy 次如果 dx = dy 直接沿对角线移动dx次如果dx > dy 先沿对角线移动dy次,再沿水平移动dx - dy次,总共移动dy + (dx - dy) = dx次所有最少的移动次数就是最大的距离之差。代码class Solution {public:
2020-07-08 16:54:13 129
原创 有效的括号
题目思路从先向后遍历字符串,边遍历边匹配,遇见左括号就进栈,遇见有括号就和栈顶元素匹配,如果匹配成功则栈顶元素就出栈,如果匹配不成功就继续遍历。如果最后栈为空则说明匹配成功,否则就说明匹配不成功。代码class Solution {public: bool isValid(string s) { if(s.size() % 2 != 0)//如果字符串不是偶数就说明一定不匹配 { return false; }
2020-07-07 19:38:36 157
原创 将有序数组转换为二叉搜索树
题目代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* sortedArrayToB
2020-07-03 15:52:24 74
原创 反转链表Ⅱ
题目思路建立一个vector容器,遍历链表,把链表中的数值存入到vector容器中,在vector容器中对m和n之间的数据进行反转,最后建立一个新链表存储反转后的vector容器。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; *
2020-06-26 15:58:42 109
原创 删除链表中的节点
题目描述思路正常思路是找出要删除节点的上一个节点,然后改变节点的指针。但是题中只给出了要删除的节点,所以要把要删除的节点变为前一个节点,即把要删除的节点的值变为下一个节点的值,然后删除下一个节点。代码/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next; * ListNode(int x) : val(x), next(NULL) {}* };*/cl
2020-06-05 16:13:48 360
原创 相交链表
题目描述思路设置两个指针分别遍历两个单链表,如果单链表被遍历完则指针指向另一个单链表继续遍历。如果两个单链表相交则两个指针走过的路程是相同的,所以一定会在某一个点相交,这个相交的点就是两个单链表的交点。如果不想交则最后两个指针共同指向NULL。(自己把图画一下会更好理解)代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L
2020-06-05 15:52:51 109
原创 环形链表
题目描述思路设置两个指针——一个快指针,一个满指针。这个方法想高中物理上的追击问题。如果链表中有环路,则快指针会和慢指针相遇;如果两个指针不相遇则说明链表中没有环。代码class Solution{ public: bool hasCycle(ListNode *head) { if(head == NULL || head -> next == NULL) return false; ListNode *fast = head -> next;
2020-06-03 17:30:44 95
原创 LeetCode——删除排序链表中的重复元II
题目描述思路双指针算法。建立一个哑结点,使用两个指针,第一个指针从哑结点开始遍历,第二个指针从第一个节点开始遍历。当两个指针的下一个位置中的值不相等是,指针都向后移。如果两个指针的下一个位置的值相等,则第二个指针向后移,直到不相等位置,此时把第一个指针的下一个位置更新到第二个指针的下一个位置就可以把相同数字的节点删掉。代码class Solution {public: ListNode* deleteDuplicates(ListNode* head) { ListNode *d
2020-06-02 10:40:15 85
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人