https://leetcode.com/problemset/algorithms/上面的题目,每天做几道题目,大体从准确率高至低做下去
编程语言为c语言,因为跑的最快…
237 | Delete Node in a Linked List | 47.8% | Easy |
Supposed the linked list is 1 -> 2 -> 3 -> 4
and you are given the third node
with value 3
, the linked list should become 1
-> 2 -> 4
after calling your function.
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ void deleteNode(struct ListNode* node) { if(node->next != NULL){ node->val = node->next->val; node->next=node->next->next; } }删除给定的节点,只需要将当前节点的val改成下个节点的值,这时候相当于有两个相同值的节点,再将当前节点的next指针指向下下个节点,也就是跳过第二个相同的节点就好了。
104 | Maximum Depth of Binary Tree | 45.1% | Easy |
Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ int maxDepth(struct TreeNode* root) { if(root == NULL) // 递归出口 return 0; int depthLeft = maxDepth(root->left); int depthRight = maxDepth(root->right); return depthLeft > depthRight ? (depthLeft + 1) : (depthRight + 1); }求二叉树的深度,使用递归的思想,将root想做普通节点,任何节点的深度都是左右节点较深的那个值+1,除了树叶(深度为0,也是递归的结束条件)
136 | Single Number | 45.0% | Medium |
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
int singleNumber(int* nums, int numsSize) { if (nums == 0 || numsSize < 1) return 0; int key = nums[0]; for (int i = 1; i < numsSize; ++i) { key ^= nums[i]; } return key; }难点在于数组规模增大,运行时间只能线性增长。
将数组的所有元素进行异或运算,相同的元素异或等于0,唯一的元素与0异或等于自己。
100 | Same Tree | 41.5% | Easy |
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool isSameTree(struct TreeNode* p, struct TreeNode* q) { if(!p && !q) return true; //NULL together, the same,skip the remaining code if(!p || !q) return false; //one is NULL but the other is not return (p->val == q->val) && isSameTree(p->left, q->left) && isSameTree(p->right, q->right); }跟104题类似,使用递归的思想,二叉树相同,意味着从根节点开始,必须符合对应节点的值相同+左节点为根节点的树相同+右节点为根节点的树相同
先判断!p&&!q同时为树叶节点,两个为相同的树
如果不同时为树叶节点,则判断两者是否有一方是树叶节点,如果是,则他们不是一样的树
对根节点运行算法就可以得出结果
版权声明:本文为博主原创文章,未经博主允许不得转载。
怒刷leetcode的题目(1)237、104、136、100
原文地址:http://blog.csdn.net/edwardwayne/article/details/46971767