- 博客(27)
- 资源 (6)
- 收藏
- 关注
原创 LeetCode---Sort List
题目大意:给出一个链表,将其排序。要求时间复杂度为O(nlogn),空间复杂度为常数。 算法思想: 1.如果链表为空,直接返回。 2.遍历链表,已链表中的元素之作为键,节点指针作为该节点对应的值,将这个对组放入multimap容器中。 3.利用multimap的特性对链表中的元素进行排序。 4.遍历容器,将容器中排完序的节点串成链表。 5.将尾节点置空,返回链表。 代码如下: cl
2015-09-30 19:27:26 305
原创 LeetCode---Swap Nodes in Pairs
题目大意:给出一个链表,成对的交换相邻两个元素的节点,要求不能够修改每个节点的值。 算法思想: 1.对于给出的链表判断其节点个数,如果小于2则直接返回链表。 2.设置4个节点指针,分别指向前驱节点,当前节点,后继节点,缓存节点指针。 3.由于没有表头节点,则对于头两个节点单独进行交换。 4.遍历链表,根据先继承后修改的原则,交换相邻的两个节点。移动后继节点时要注意,如果当前节点为空,则后
2015-09-30 17:10:35 311
原创 LeetCode---Merge Two Sorted Lists
题目大意:给出两个排序了的链表,要求将它们合并成一个链表,新链表由给出的两个链表拼接而成。 算法思想: 1.判断给出的链表是否有空链表,若有则直接返回不空的。 2.选取两个链表中第一格元素较小的节点做为新链表的头结点。 3.遍历两个链表,将节点值小的节点插入新链表知道,有一个链表遍历完为止。 4.将非空的链表接在新链表的末尾。 5.返回合并后的链表。 代码如下: /** * De
2015-09-29 20:44:35 320
原创 LeetCode---Missing Number
题目大意:给出一个数组,包含n个不同的元素,每个元素的取值范围为[0,n].找出该数组中遗漏的那个元素。 算法思想: 1.首先对数组排序。 2.遍历数组比较元素值和其索引是否相同不相同则返回该索引。 3.当数组遍历完后则返回n(此时数组遗漏了n) 代码如下: class Solution { public: int missingNumber(vector& nums) {
2015-09-28 17:16:35 321
原创 LeetCode---Maximum Subarray
题目大意: 给出一个数组,求出该数组中的最大字段和。数组中的元素可能为正也可能为负。 算法思想: a[j]表示数组中的元素,b[j]表示从0到j的子段和,他可能为b[j-1]+a[j],也可能为a[j]。则b[j]=max{b[j-1]+a[j],a[j]},遍历数组找出最大的b[j]即可。 代码如下: class Solution { public: int maxSubArr
2015-09-28 15:12:28 282
原创 LeetCode---Reverse Linked List
题目大意:给出一个单链表,使其逆转。 算法思想: 如果链表为空直接返回,设置3个指针,前驱指针,后继指针,当前遍历指针,然后遍历链表,遵循先继承再修改的原则转换每个节点的后继指针。当链表遍历完后,前驱节点为为头节点。返回修改后的链表。 代码如下: /** * Definition for singly-linked list. * struct ListNode { * in
2015-09-27 20:37:48 235
原创 Leetcode---Remove Duplicates from Sorted List
题目大意:给出一个已排序了的链表,删除之中重复出现的元素,保证每个元素只出现一次。 算法思想: 1.设置两个指针,一个指向前驱节点,一个指向当前遍历的节点。 2.如果链表为空直接返回。遍历链表,比较前驱节点的元素和当前节点的元素是否相同,如果相同的则做标记,如果不相同则判断是否有标记,如果有则删除重复元素,如果没有标记则移动指针,继续遍历链表。 3.当链表遍历完后判断是否有标记存在
2015-09-27 19:47:00 257
原创 LeetCode---Single Number II
题目大意:给出一个数组,数组中的每个元素都出现3次,只有一个出现1次找出那个出现1次的元素。 算法思想: 1.对数组中的元素进行排序。 2.遍历数组中的每个元素。 1>.当前元素与前驱元素相同的时候计数器+1,并且mod3; 2>.如果当前元素与前驱元素不相同的时候且计数器不为0, 则直接返回
2015-09-26 17:16:35 297
原创 LeetCode---anagram
题目大意:给出两个字符串s,t,判断和t是否有相同的字符,如果是则返回真,否则返回假。 算法思想: 将两个字符串先排序,然后再判断是否相等。 代码如下: class Solution { public: bool isAnagram(string s, string t) { sort(s.begin(),s.end()); sort(t.begin
2015-09-26 11:36:50 345
原创 LeetCode---Search Insert Position
题目大意: 给出一个已经排序的数组和一个目标元素,找出目标元素在数组中出现的位置,如果目标元素未在数组中出现则给出目标元素应该在数组中插入的位置。 算法思想: 遍历数组,对于数组中的每个元素进行判断,当其等于目标元素时返回该元素的索引;如果数组中没有目标元素则返回第一格大于目标元素的索引;如果没有元素大于目标元素则返回数组的末尾。 代码如下: class Solution { publi
2015-09-26 11:22:27 265
原创 LeetCode---Two Sum
题目大意:给出一个数组和一个目标数字,从数组中找出两个元素之和等于目标数字,最后返回这两个元素的索引。索引1必须小于索引2 算法思想: 遍历数组将数组中的元素和索引存入multimap中,然后再次遍历数组,判断target-nums[i]是否在map中,如果在则判断该索引是否和nums[i]的索引相同,如果不相同则返回这两个数的索引,反之继续遍历数组。 代码如下: class Soluti
2015-09-26 10:32:31 273
原创 LeetCode---Populating Next Right Pointers in Each Node
题目大意: 给出一个二叉树,使得二叉树中每个节点都有一个指针指向其右边的节点。如果节点不存在右边的节点则指针为空。 算法思想: 1.判断根节点是否为空,不空则将更节点和其层号放入队列。 2.当队列不空时,取队头元素cp的并将其移出队列,再取队列一个元素temp. 3.判断temp所记录的节点是否为空且该节点的层号是否和cp的层号相同,如果相同cp的右边节点为temp,否则cp的右边节点为
2015-09-25 16:48:25 251
原创 LeetCode---Majority Element
题目大意:给出一个数组,大小为n,找出其中出现n/2次的元素。 算法思想: 利用一个map容器对数组中的每个元素进行计数,最后遍历map找出主要元素。 代码如下: class Solution { public: int majorityElement(vector& nums) { vector::iterator pos; map intin
2015-09-25 11:39:54 262
原创 LeetCode---Linked List Cycle
题目大意: 给出一个链表,判断其中是否存在环。 算法思想: 利用一个map容器对每个节点做标记,遍历链表中的每个节点,如果该节点做过标记则存在环。 代码如下: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNo
2015-09-24 21:04:55 273
原创 LeetCode---Binary Tree Inorder Traversal
题目大意:给出一个二叉树,返回其中序遍历的序列。 算法思想: 当节点不空的时候,先递归遍历左子树,然后将节点值放入容器中,然后在递归遍历右子树,最会返回容器。 代码如下: /** * Definition for a binary trene node. * struct TreeNode { * int val; * TreeNode *left; *
2015-09-24 02:28:48 296
原创 LeetCode---Binary Tree Preorder Traversal
题目大意:给出一个二叉树,返回其前序遍历。 算法思想: 如果当前节点不空,将节点放入容器,然后递归遍历左右子树。 代码如下: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *
2015-09-24 02:19:33 286
原创 leetCode---Single Number III
题目大意:给出一个数组,数组中绝对有两个元素只出现过一次,其他的元素都出现过两次,找出这两个出现过一次的元素。 算法思想: 1.利用map容器对数组中的元素计数。 2.找出个数为1的元素。 代码如下: class Solution { public: vector singleNumber(vector& nums) { map numIndex;
2015-09-24 01:59:04 314
原创 LeetCode---Excel Sheet Column Number
题目大意:给出Excel表中出现的列标题,输出相应的列值。如 A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 算法思想: 1.设置一个初值sum=0; 2.从左向右扫描string,每次sum等于当前的字符值+sum*26,即迭代器每向右移动一次sum扩大26倍。 代码如下:
2015-09-24 00:42:52 217
原创 LeetCode---Contains Duplicate
题目大意:给出一个数组,判断数组中是否有重复元素,如果有返回真,否则返回假。 算法思想: 1.强数组元素排序。 2.设置两个迭代器,比较相邻的两个元素,如果相同返回真,否则移动两个迭代器继续比较。 3.当数组遍历完后,返回假。 代码如下: class Solution { public: bool containsDuplicate(vector& nums) {
2015-09-23 20:44:18 314
原创 LeetCode---Number of 1 Bits
题目大意:给出一个无符号整数,返回该整数二进制表示时各位含有1的个数。 算法思想: 采用bitset容器,声明一个32位的bitset,然后用n初始化它,最后返回转换为二进制时含有1的个数。 代码如下: class Solution { public: int hammingWeight(uint32_t n) { bitset num(n); re
2015-09-23 20:19:28 286
原创 LeetCode---Invert Binary Tree
题目大意:转换二叉树,交换二叉树的左右子树。 算法思想: 采用递归。当根节点为空的时候,返回空;否则,交换二叉树的左右子树,返回根节点。 代码如下: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *ri
2015-09-23 16:23:13 268
原创 LeetCode---Same Tree
题目大意: 给出两颗二叉树,判断他们是否相等。相等的二叉树具有相同的结构和节点元素值。 算法思想: 递归。让节点都非空的时候返回(p->val==q->val)&&isSameTree(p->left,q->left)&&isSameTree(p->right, q->right)的布尔值,当节点都为空的时候返回True,否则返回false. 代码如下: /** * Definitio
2015-09-21 17:41:07 270
原创 LeetCode---Add Digits
题目大意:给出一个非负整数,重复相加其各位数字直至相加之和小于10. 算法思想: 采用递归,当num 代码如下: class Solution { public: int addDigits(int num) { if(num<10) return num; return addDigits(num%10+num/10); } };
2015-09-21 16:39:08 265
原创 LeetCode---Move Zeroes
题目大意:给出一个数组,将数组中的0移至数组末尾,操作过程中不改变运算的相对顺序。 算法思想: 设置一个游标k,从零开始,然后扫描数组,如果元素不是0则将其移动到游标所指向的位置,游标值+1,如国元素是0则跳过;当所有元素扫描完后,将数组末尾用0补齐。 代码如下: class Solution { public: void moveZeroes(vector& nums) {
2015-09-21 16:13:28 330
原创 LeetCode---Maximum Depth of Binary Tree
题目大意:给出一个二叉树,求出该二叉树的最大深度。最大深度是指从根节点沿着最长路径到叶子节点的节点数。 算法思想: 采用递归遍历二叉树的方法,求出其左右子树的最大深度+1. 代码如下: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;
2015-09-21 15:21:44 339
原创 LeetCode---Submission Details
题目大意:给出一个一维数组,该数组中每个元素的值都出现过两次只有一个元素值只出现一次,现在找出这个元素。要求在线性时间内完成,不适用额外的空间。 算法思想: 1.对数组排序 2.遍历数组,比较相邻的两个元素值是否相同,若相同则比较下一组相邻元素,若不相同则返回该元素。注意迭代器的值每次递增2 代码如下: class Solution { public: int singleNum
2015-09-18 16:35:37 528
原创 LeetCode---Delete Node in a Linked List
题目大意:给出一个链表中的节点,在链表中删除该节点,如果是尾节点则不删除。如:链表 1 -> 2 -> 3 -> 4 要删除链表中值为3的节点,则操作后的链表为1 -> 2 -> 4。 算法思想: 1.设置一个前驱节点和一个后继节点。 2.判断后继节点是否为空,若为空则是尾节点直接返回。否则遍历链表。 3.从要删除节点开始,一次将后继节点中的值向前移动,直到遍历完链表为止。 4.删除链表
2015-09-18 12:21:17 332
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人