Leetcode
文章平均质量分 66
牛遛遛
这个作者很懒,什么都没留下…
展开
-
【LeetCode-229】Majority Element II(C++)
题目要求:给出一个长度为n的数组,找出数组中所有出现次数大于n/3的元素。要求时间复杂度为O(n),空间复杂度为O(1)。问题解答:1.时间复杂度为O(n),空间复杂度为O(n)。用STL中的map,将数组中各个元素出现的个数存起来。代码很简单,但是空间复杂度不满足要求。class Solution {public: vector majorityElement(vector原创 2016-12-21 10:03:23 · 341 阅读 · 0 评论 -
【LeetCode-145】Binary Tree Postorder Traversal(C++)
题目要求:完成二叉树的后序遍历(递归的方式很简单,请尝试用循环的方式来完成)解决方法:1.递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x原创 2016-09-17 17:20:04 · 362 阅读 · 0 评论 -
【LeetCode-94】Binary Tree Inorder Traversal(C++)
题目要求:完成二叉树的中序遍历。解题方法:1.递归。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL原创 2016-09-17 15:55:47 · 406 阅读 · 0 评论 -
【LeetCode-144】Binary Tree Preorder Traversal(C++)
题目要求:完成二叉树的前序遍历。解题方法:1.递归的方法。很简单。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), le原创 2016-09-17 15:33:42 · 267 阅读 · 0 评论 -
【LeetCode-111】Minimum Depth of Binary Tree(C++)
题目要求:给出一棵树,求出这棵树的最小深度,最小深度的意思是从该棵树的根节点到叶子节点的最短路径上的节点个数。解题方法:相当于树的层序遍历,用两个队列来实现树中层次的划分,每遍历完一层,并且遍历的时候没有遇到叶子节点,就把深度值加一。只要遍历的过程中遇到了叶子节点,就返回深度值。/** * Definition for a binary tree node. * struct Tree原创 2016-09-17 12:27:17 · 287 阅读 · 0 评论 -
【LeetCode-257】Binary Tree Paths(C++)
题目要求:要求输出一个二叉树的所有从根节点到叶子节点的路径。解题方法:1. 可以用递归的方法实现,将根节点的左右子树所输出的两个数组合并为一个数组,并将得到的数组的每一个string元素头部加上"to_string(root->va)->l",其中to_string()是C++中的一个可以将int型转换为string类型的函数。/** * Definition for a binar原创 2016-09-17 11:46:55 · 640 阅读 · 0 评论 -
【LeetCode-102】Binary Tree Level Order Traversal(C++)
题目要求:二叉树的层序遍历,给出一棵树,返回一个存储着数组的数组v,每个层的节点组成一个数组,所有层的节点数组组成v。解题方法:用两个队列来实现,一个队列用来存储上一层的节点,另一个队列用来存储下一层的节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo原创 2016-09-16 20:17:33 · 261 阅读 · 0 评论 -
【LeetCode-225】 Implement Stack using Queues(C++)
题目要求:用队列实现站的push,pop,empty,top的四个函数。解题思路:用两个队列来实现。class Stack {public: // Push element x onto stack. void push(int x) { if(q1.size()>=0&&q2.size()==0) q1.push(x);原创 2016-09-03 17:59:25 · 461 阅读 · 0 评论 -
【LeetCode-232】 Implement Queue using Stacks(C++)
题目要求:用站实现队列的插入,删除,返回队头元素和判断是否为空四种操作。解题方法:用两个栈实现队列。代码如下:class Queue {public: // Push element x to the back of queue. void push(int x) { s1.push(x); } // Removes the elemen原创 2016-09-03 17:37:16 · 616 阅读 · 0 评论 -
【LeetCode-101】 Symmetric Tree(C++)
题目要求:判断一棵二叉树是不是轴对称。解题方法:递归的方法(用循环实现现在不想写,有点困,等回头写了之后再来改博客)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeN原创 2016-09-03 16:34:52 · 375 阅读 · 0 评论 -
【LeetCode-66】Plus One(C++)
题目要求:给出一个数组vector,表示一个数。将这个数加上1,返回加上1之后所得到的数组。解决方法:很简单,直接贴代码。class Solution {public: vector plusOne(vector& digits) { int end=digits.size()-1; if(digits[end]!=9){原创 2016-09-03 15:15:21 · 528 阅读 · 0 评论 -
【LeetCode-387】First Unique Character in a String(C++)
题目要求:找到一个字符串中第一个不重复的字符,假设字符串中的所有字符均为小写字母。解题方法:与前面的389,383的解题思路一样,由于字符串中的字符全部为小写字母,故用一个大小为26的数组来存储每个字母出现的次数。然后在从字符串中的第一个字符开始依次判断其出现次数是否为1。class Solution {public: int firstUniqChar(string s) {原创 2016-09-02 17:34:48 · 687 阅读 · 0 评论 -
【LeetCode-338】Counting Bits(C++)
题目要求:给出一个非负整数num,求出0-num范围内的(num+1)个整数,每个整数的二进制表达中1的位数。Follow Up:时间复杂度为O(n*sizeof(integer))的解法很简单,要求实现时间复杂度为O(n)的算法。解题方法:1. 时间复杂度为O(n*sizeof(integer))的算法。程序如下,一共有n+1个数,每个数都要一位一位的判断是否为1,所以时间复杂度为O(n原创 2016-09-18 21:09:58 · 423 阅读 · 0 评论 -
【LeetCode-260】Single Number(C++)
题目要求:给出一个数组,这个数组中只有两个数是只有一个的,其余的数都有两个。如 num=[1,2,1,3,2,5],要求返回这两个不重复的数,返回[3,5]。解题方法:1. 一开始想到的方法就是用C++中的STL容器set。循环判断数组中的数,如果set中不存在这个数,就将这个数存到set中,如果set中已经存在,就将这个数删掉。当循环完后,set中将会只剩下不重复的两个数。class原创 2016-09-18 22:57:32 · 266 阅读 · 0 评论 -
【LeetCode-228】Summary Ranges(C++)
题目要求:给出一个已经排好序的整型数组,然后将这个数组中连续的整数转化为区间形式,[0,1,2,4,5,7]---> ["0->2","4->5","7"]问题解答:只需要遍历一次数组即可。class Solution {public: vector summaryRanges(vector& nums) { int n=nums.size();原创 2016-12-20 21:13:27 · 300 阅读 · 0 评论 -
【LeetCode-120】Triangle(C++)
题目要求:给出一个三角形的二维数组,即第一行有一个元素,第二行有两个元素……求出从上到下的最短路径。从上到下选择数组元素的时候只能选择相邻的两个元素。问题解答:动态规划算法,采用自底向上的方法.假设用nums二维数组来存储从上到下面每一个元素的最短路径,则nums[i][j]=min(nums[i-1][j-1],nums[i-1][j])+triangle[i][j]。为了使空间复杂度降到O原创 2016-12-20 18:33:05 · 699 阅读 · 0 评论 -
【LeetCode-442】Find All Duplicates in an Array(C++)(
题目要求:给出一个整型数组nums,长度为n,则数组中的元素在1~n之间,有些元素出现了两次,有些元素出现了1次,找出那些出现了两次的数。问题解答:1. 时间复杂度为O(n),空间复杂度为O(n)的解法。利用一个长度为n的数组temp,初始化为0,遍历数组nums[i],判断temp[nums[i]-1]是否为0,如果是,则说明nums[i]第一次出现,将temp[nums[i]-1]置为原创 2016-12-20 16:10:51 · 298 阅读 · 0 评论 -
【LeetCode-209】Minimum Size Subarray Sum(C++)
题目要求:给出一个数组nums和一个正整数s,求nums的子数组中和大于s的长度最小的子数组的长度。问题解答:用两个指针,left和right,从left位置开始的和大于s的子数组的长度。然后把这个长度存起来,left++。在找到以left位置开始的和大于s的子数组的长度,和之前存起来的长度相比较,取最小值。一直到right指向最后一个位置的后一个位置,且sumclass Solution原创 2016-12-20 11:22:08 · 323 阅读 · 0 评论 -
【LeetCode-448】 Find All Numbers Disappeared in an Array(C++)
题目要求:给出一个整形数组,长度为n,数组中的整数都在1~n之间,有些数出现一次,有些数出现两次,求出那些没出现的数的集合。问题解答:1.时间复杂度为O(n),空间复杂度为O(n)的做法。定义一个长度为n的数组temp,全都初始化为0。然后遍历给出的数组,令temp[nums[i]-1]=-1。最后遍历数组temp,那些值为0的数的位置加上1就是所要求的没有出现的数。class Sol原创 2016-12-20 09:47:13 · 2273 阅读 · 1 评论 -
【LeetCode-414】Third Maximum Number(C++)
题目要求:找到一个数组中的第三大的不重复的数,如果第三大的数不存在就返回最大数。问题解答:用了STL中的set容器,利用了set的去重和自动排序功能。class Solution {public: int thirdMax(vector& nums) { int l=nums.size(); set> s;//使s按照从大到小的顺序排列原创 2016-12-19 22:43:16 · 399 阅读 · 0 评论 -
【LeetCode-154】Find Minimum in Rotated Sorted Array II(C++)
题目要求:找出已排序的旋转数组中的最小值,数组中可能存在重复的数。问题解答:这道题剑指offer上面有讲,用二分查找算法来做,如果index1,index2,mid指向的值相等,则不能判断mid指向的值是属于前面的递增部分还是后面的递增部分。因此需要用顺序查找来做,所以如果数组中有重复元素,则时间复杂度会由O(logn)变为O(n)。class Solution {public:原创 2016-12-21 10:44:19 · 254 阅读 · 0 评论 -
【LeetCode-112】Path Sum(C++)
题目要求:判断一棵二叉树中是否存在一个从根到叶子的路径,使得这条路径上所有数之和为给定的值sum。解题思路:很简单的递归实现。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2016-09-08 11:45:06 · 359 阅读 · 0 评论 -
【LeetCode-119】 Pascal's Triangle II(C++)
题目要求:返回杨辉三角的第k行。解题方法:1.第一种方法就是根据杨辉三角的构成方式,每一行的元素等于上一行元素的左右两个数之和,然后将每一行都算出来循环计算。class Solution {public: vector getRow(int rowIndex) { vector result(rowIndex+1,1); if(rowIndex原创 2016-09-08 11:34:45 · 940 阅读 · 0 评论 -
【LeetCode-26】 Remove Duplicates from Sorted Array(C++)
题目要求:删除一个已排序的数组中重复的元素,并返回删除之后数组中的元素个数。解答方法:从第一个元素开始依次判断该元素是否与下一个元素相等,若相等则删除,若不等则指针往后挪一位开始判断下一个元素。class Solution {public: int removeDuplicates(vector& nums) { if (nums.empty()) return 0; i原创 2016-09-07 16:13:01 · 175 阅读 · 0 评论 -
【LeetCode-19】Remove Nth Node From End of List(C++)
题目要求:给出一个单链表,要求删除该单链表中从后面数的第n个节点。解决方法:首先遍历链表,得到链表中的节点个数num。则num-n+1就是从头开始数的需要删除的节点位置。然后再从头开始遍历到第num-n个节点p2,用p2->next=p2->next->next;删除掉第num-n+1个节点。/** * Definition for singly-linked list. * stru原创 2016-09-10 11:41:12 · 258 阅读 · 0 评论 -
【LeetCode-383】Ransom Note(C++)
题目要求:给出两个字符串,判断其中一个字符串可不可以由另一个字符串中的部分或全部字母组成。解题方法:与389题的思路一样,心情不好不想写思路,直接贴代码。class Solution {public: bool canConstruct(string ransomNote, string magazine) { int lc[26]={0}; fo原创 2016-09-02 17:12:09 · 592 阅读 · 0 评论 -
【LeetCode-389】Find the Difference(C++)
题目要求:给出两个字符串,已知这两个字符串之中只有一个字符不同,输出这个字符。解决方法:很简单的一道题目,心情不好不想写思路,直接贴代码。(我就是任性不服来打我)class Solution {public: char findTheDifference(string s, string t) { int lc[26]={0}; for(int i原创 2016-09-02 17:00:03 · 1071 阅读 · 0 评论 -
【LeetCode-342】 Power of Four(C++)
题目要求:要求写一个函数判断一个int型数num是不是4的幂。解题思路: 可以用循环和不循环两种方式实现。 第一种:循环。任一个数如果是4的幂,则重复除以4的话最后会得到一个1。例:64/4=16,16/4=4,4/4=1。且除的过程中全部都是整除,没有余数。可以用这个思 路判断num是不是4的幂。原创 2016-05-11 21:09:21 · 719 阅读 · 0 评论 -
【LeetCode-1】 Two Sum(C++)
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution.Example:Given nums =原创 2016-05-24 18:43:49 · 310 阅读 · 0 评论 -
【LeetCode-242】Valid Anagram(C++)
题目要求:给出两个字符串s和t,写一个函数判断这两个字符串是否所含字母相同,顺序可以不同。 例如:“s = "anagram", t = "nagaram", 返回true。s = "rat", t = "car", 返回false。解题思路:将两个字符串排序,判断排序过后的s和t是否相等,若相等,则返回true,否则返回false。原创 2016-01-17 21:54:40 · 677 阅读 · 0 评论 -
【LeetCode-258】Add Digits(C++)
题目要求:给出一个非负整数num,重复的将num各个位上的数字加在一起,一直得到的结果是个位数。 如:num=38,则3+8=11,1+1=2。最后得到个位数字2. 令:你可以不用循环和递归完成这道题吗?并要求其时间复杂度为O(1)解题思路:方法1:本来我是按照最一般的方法来做的,就是将38转换为字符串,然后字符串原创 2016-01-17 13:21:58 · 664 阅读 · 0 评论 -
【LeetCode-263】Ugly Number(C++)
题目要求:写程序判断给出的数是不是ugly number。 Ugly number是一个质因数只包含2,3,5的正整数。比如6和8均是ugly number,而14不是ugly number,因为其质因子包含7。 注意:1通常被认为是ugly number。解题思路:首先要了解什么是质因数,质因数是指能整除给定正整原创 2016-01-16 21:15:31 · 742 阅读 · 0 评论 -
【LeetCode-303】Range Sum Query - Immutable(c++)
Given an integer array nums, find the sum of the elements between indicesi and j (i ≤ j), inclusiveExample:Given nums = [-2, 0, 3, -5, 2, -1]sumRange(0, 2) -> 1sumRange(2, 5) -> -1sumRange原创 2015-11-13 18:27:54 · 508 阅读 · 0 评论 -
【LeetCode-299】Bulls and Cows
问题描述: Bulls and Cows这个问题从本质上来讲就是给你两个字符串,让你求出这两个字符串中字符相同且位置相同的字符个数以及字符相同且位置不同的字符个数。记两个字符串分别为secret和guess1.求两个字符串中字符相同且位置相同的字符个数。 这个问题比较简单,因为求的是字符相同且位置相同的字符串个数,所以只需要一个for循环对secret和guess字符串进行遍历,看原创 2015-11-14 16:00:37 · 503 阅读 · 0 评论 -
【LeetCode-292】 Nim Game(C++)
题目要求: 你和你的小伙伴你们两个人正在玩这样一个游戏:桌子上有一堆石子,你们两个轮流从这堆石子里面拿出去1—3个,谁最后一个把所有的石子全部拿光,就算谁赢。要求你第一个拿。注意,你和你的小伙伴你们两个都特别聪明,都特别会玩这个游戏。现在给出石子的数量,要求你写一个函数来判断你是不是一定会赢。假如现在桌子上有4个石子,那么不管你是拿1个2个还是3个,剩下的都会被你的小伙伴一次性的全部拿走原创 2015-11-15 16:04:25 · 461 阅读 · 0 评论 -
【LeetCode-283】Move Zeroes(C++)
题目要求: 给出一个数组,要求写一个函数把数组中所有的0全部挪到数组的最后面,同时保持数组中非0元素的顺序不变。比如给出一个数组nums=[0,1,0,3,12]。调用函数之后nums变为[1,3,12,0,0]。 注意:要在原数组上完成元素的移动,不能进行数组的复制。使总的操作次数最小。解题思路: 首先要遍历一次数组,用一个vector容器记录原创 2015-11-16 18:17:28 · 445 阅读 · 0 评论 -
【LeetCode-290】Word Pattern(C++)
题目要求: 给你两个字符串,其中一个是模式字符串pattern,一个是string字符串str。判断str字符串是否符合pattern字符串所表达的模式。比如:pattern = "abba", str = "dog cat cat dog" 则返回true。pattern = "abba", str = "dog cat cat fish" 则返回false。patter原创 2015-11-16 16:10:02 · 1464 阅读 · 0 评论 -
【LeetCode-326】Power of three 下(C++)
尝试不用递归和循环的方法来完成这道题目(具体题目要求见上篇)解题思路:如果不用循环和递归的话,能想到的最一般的解法就是用log函数,log(n)/log(3)就表示以3为底的n的对数,我照这个思路写,一直AC不了,查了一下应该是浮点数的舍入问题,我看别人的用JAVA写的就可以AC,但是用C++写不可以。上网上查了一下也没有找到比较好的解决方案。最后看到了一个解法:任何一个3的i次方一定能被最大原创 2016-01-16 15:38:42 · 543 阅读 · 0 评论 -
【LeetCode-278】 First Bad Version(C++)
题目要求:你是一个产品经理领导一个队伍研发一款产品,但是产品的最终版本在质量检测的时候出现了质量上的问题,称之为一个Bad Version。但是每个版本的产品都是基于上一个产品所研发的,如果一个版本出了问题(一个Bad Vesion)那么后续的所有版本都将出问题。假设你有n个版本[1,2,3…,n],你现在想找到第一个出问题的版本。你可以用一个API bool isBadVersion(ver原创 2016-05-11 21:32:41 · 372 阅读 · 0 评论 -
【LeetCode-223】 Rectangle Area(C++)
题目要求:求两个矩形所围成的总面积,每个矩形均由左下角的点坐标和右上点的坐标定义。如下图:解题思路:其实就是简单的数学问题,首先判断两矩阵是不是相交,如果不相交,直接将两矩阵的面积相加;如果相交,则将两矩阵面积相加在减去公共区域的面积。代码实现:class Solution {public: int computeArea(int A, int B, int C, int原创 2016-05-11 22:20:23 · 603 阅读 · 0 评论