
leetcode
文章平均质量分 56
渊渊大魔王
这个作者很懒,什么都没留下…
展开
-
226. Invert Binary Tree
Problem:Solution:这是一道基于二叉树的遍历比较简单的问题,使用中序方式遍历二叉树,同时将遍历中的visit()改写为用于交换结点左右孩子的函数即可。class Solution {public: TreeNode* invertTree(TreeNode* root) { if(root == NULL) { return原创 2017-02-16 09:22:53 · 195 阅读 · 0 评论 -
169. Majority Element
Problem:Solution:求给定数组中出现次数超过n/2的元素,首先想到的是暴力法,也就是说遍历数组对每个元素的出现次数进行统计,如果出现次数一旦大于n/2即返回该书,此方法的时间复杂度为O(n^2)class Solution {public: int majorityElement(vector& nums) { int len = num原创 2017-02-25 10:46:38 · 214 阅读 · 0 评论 -
409. Longest Palindrome
Problem:Solution:对于给定的字符串,找出由该字符串中所给字母组成的最长的回文串的长度。首先,统计各字符出现的次数,使用一个长度为'z'-'A'+1的数组即可,然后遍历整个数组,对于偶数个数的字符直接加以来,对于最多的奇数个数的字符直接加(构造回文串时放在中间),对于其余的奇数个数的字符先减1变为偶数个数再相加。class Solution {public:原创 2017-02-25 13:55:50 · 285 阅读 · 0 评论 -
217. Contains Duplicate
Problem:Solution:可以使用暴力法,但是时间会超出限制class Solution {public: bool containsDuplicate(vector& nums) { int len = nums.size(); for (int i = 0;i < len;i++) {原创 2017-02-25 15:20:11 · 178 阅读 · 0 评论 -
206. Reverse Linked List
Problem:Solution:题目要求反转一个单链表,没有头结点的话稍微麻烦一点,需要两个辅助指针,一个指向已经完成反转的最后一个元素,开始时指向head,另一个用来暂存当前需要反转元素的下一个,以避免链表断链。这种方式类似于“头插法”,具体实施如下:/** * Definition for singly-linked list. * struct ListNode {原创 2017-02-26 10:51:50 · 212 阅读 · 0 评论 -
268. Missing Number
Problem:Solution:找出给定数组中缺失的那个数,数组中的各元素不重复,范围为0到n. 首先下可能会到的是比较暴力的时间复杂度为O(n^2)的方法,即对每个0到n的整数都在给定数组中搜索看有无和它相等的元素,如果有,则它就是丢失的那个整数,如果没有,那么n+1则为丢失的元素。class Solution {public: int missingNumber原创 2017-02-26 12:46:03 · 196 阅读 · 0 评论 -
350. Intersection of Two Arrays II
Problem:Solution:在“349. Intersection of Two Arrays”问题的基础上稍作变动,349中不会显示重复元素,此题所有重复的交集元素都必须显示。只需先对两数组进行排序,剩下的工作就简单很多了,可以在O(n)时间内完成。class Solution {public: vector intersect(vector& nums1,原创 2017-02-26 13:43:06 · 192 阅读 · 0 评论 -
476. Number Complement
Problem:Solution:题目要求将给定整数的二进制码变反后,输出新的二进制码所代表的整数。我的策略是先利用除2取余法将所给正整数的二进制编码存放在一个字符串变量中,然后对该字符串进行遍历,采用二进制转十进制的方法将其转换为一个十进制数。需要注意的是代码中用到了求x的y次方的函数pox(x,y).class Solution {public: int fi原创 2017-02-26 14:47:08 · 324 阅读 · 0 评论 -
500. Keyboard Row
Problem:Solution:判断给定字符串数组中的单词能否有由且仅由某一排键盘上的字母构成。我想到的方法是依次拿每个单词和row1、row2、row3中的字母进行比较判断,循环要嵌套三次,最外层循环表示依次选取的单词,第二层循环表示依次选取的单词中的字母,最里层循环表示一个键盘行中的字母。其中第二层循环要写三个,表示分别和row1、row2、row3进行比较。这里要注意的一点原创 2017-02-26 17:22:52 · 281 阅读 · 0 评论 -
506. Relative Ranks
Problem:Solution:求所给整数数组中各元素的相对大小,最大的为“gold”,第二大为“silver”依次类推。我想到的办法是创建一个辅助数组ss,用来记录各元素的相对大小,然后遍历这个辅助数组将结果存放到string数组res中进行输出。这种方式的时间复杂度为O(n^2),空间复杂度为O(n)class Solution {public: vector原创 2017-02-27 13:52:42 · 273 阅读 · 0 评论 -
100. Same Tree
Problem:Solution:判断两棵二叉树是否相等,显然采用递归方式比较简单,但递归方式往往又是晦涩难懂的。这道题的递归算是比较简单,首先我们要搞清楚可能的情况有哪些:1、如果当前访问的两个结点都为空,那显然他们是相等的;2、如果两个结点一个为空另一个不为空,那么显然不相等;3、如果两个结点都不为空但他们的value不行等,那他们也不相等;4、如果两个结点都不原创 2017-02-25 10:16:23 · 240 阅读 · 0 评论 -
237. Delete Node in a Linked List
Problem:Solution:编程的话,思想真的很重要,要是说删除node->next那谁都会,关键是此题并没有给出node的前一个结点,那怎么办?其实仔细一想,我们可以转变成删node的下一个结点,即先把node->next的值赋给node,再把它删去,就相当于删了nodeclass Solution {public: void deleteNode(ListN原创 2017-02-24 17:02:49 · 161 阅读 · 0 评论 -
283. Move Zeroes
Problem:Solution:题中明确说明不能创建该数组的copy,从其返回值类型void也可以看出,需要的是在原数组基础上进行操作。Edition1:class Solution {public: void moveZeroes(vector& nums) { vector result; int count =原创 2017-02-22 10:43:40 · 193 阅读 · 0 评论 -
167. Two Sum II - Input array is sorted
Problem:Solution:题目要求是在给定数组中找出num1+num2=target的num1和num2的下标index,且假设对于每个输入的target只有一组nums的和与之对应,同一个元素不得使用两次。Edition1:class Solution {public: vector twoSum(vector& numbers, int tar原创 2017-02-22 11:56:24 · 235 阅读 · 0 评论 -
1. Two Sum
Problem:Solution:class Solution {public: vector twoSum(vector& numbers, int target) { vector ss; for (int i = 0;i < numbers.size();i++) { for (int原创 2017-02-22 16:05:05 · 212 阅读 · 0 评论 -
455. Assign Cookies
Problem:Solution:使用sort()函数先将kids数组与cookies数组进行升序排列,然后在按照greed和size从小到大进行分配。class Solution {public: int findContentChildren(vector& g, vector& s) { int result = 0; int i原创 2017-02-22 17:26:17 · 202 阅读 · 0 评论 -
383. Ransom Note
Problem:Solution:开始时我误解了这道题的意思,我以为是关于字符串匹配的一道题,后来发现并非如此,题目的原意是“一个劫匪索要赎金,但为了防止身份被发现需要从杂志中剪下相应字母拼起来”,实质上就是判断ransomNote数组中的某个元素个数是否小于或等于magazine数组中对应元素的个数。我想到的一个方法就是创建辅助数组统计给定数组中每个元素的个数,然后相比较原创 2017-02-23 12:10:26 · 269 阅读 · 0 评论 -
404. Sum of Left Leaves
Problem:Solution:看到树,必然想到要用递归算法,本题的递归方式为:1、若root为空,则返回0;2、若root的左子树root->left为叶子结点,此时的root->left正是我们需要计算其值的目标结点,返回root->left->val + 对root的右子树的递归访问3、若为其他情况,则返回对root的左右子树分别的递归访问之和/** *原创 2017-02-23 13:23:21 · 208 阅读 · 0 评论 -
349. Intersection of Two Arrays
Problem:Solution:求两个集合的交集,思路很简单,对第一个集合中的每一个元素在第二个集合中进行查找,如果两个集合中都有同一个元素,则将它添加进结果,要注意结果集合中元素不能重复class Solution {public: vector intersection(vector& nums1, vector& nums2) { vector s原创 2017-02-23 14:15:53 · 374 阅读 · 0 评论 -
387. First Unique Character in a String
Problem:Solution:这道题的意思是查找第一个在给定字符串中只出现过一次的元素的下标,最简单的方法就是拿选定元素依次和每个比较,看是否有重复,这种算法的时间复杂度为O(n^2)class Solution {public: int firstUniqChar(string s) { int m = s.size();原创 2017-02-23 15:49:05 · 338 阅读 · 0 评论 -
121. Best Time to Buy and Sell Stock
Problem:Solution:看到问题我首先想到的是最笨的方法,即把每个数和其后面的数作差,记录最大的差值,这种方法的时间复杂度为o(n^2)class Solution {public: int maxProfit(vector& prices) { int m = prices.size(); int max = 0;原创 2017-02-23 16:14:14 · 256 阅读 · 0 评论 -
520. Detect Capital
Problem:Solution:检查大写字母的使用是否合法。题中给出了三种合法的情况,我们只需拿给定的单词与这三种情况一一比较即可,不难。520未免让我这个挫逼不合格程序员遐想连篇,一段美妙的故事已经在脑海中构建完成class Solution {public: bool detectCapitalUse(string word) { int len原创 2017-02-27 14:45:11 · 232 阅读 · 0 评论