leetcode
文章平均质量分 53
AC_0_summer
这个作者很懒,什么都没留下…
展开
-
leetcode-Reorder List-143
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…You must do this in-place without altering the nodes' values.For example,Given {1,2,3,4}, reorder it to原创 2016-06-08 22:16:21 · 436 阅读 · 0 评论 -
leetcode-Reverse Integer-7
又一个很蠢的解法:重点在于整数int的范围,当逆向后如果越界了返回的结果是0,所以在计算的过程中要判断是否越界,我也不知道自己是怎么糊涂的过的。蒙混过关。class Solution {public: int reverse(int x) { if(x==0) return x; int ok=1; if(x<0){原创 2016-05-28 20:49:45 · 334 阅读 · 0 评论 -
leetcode-ZigZag Conversion-6
很蠢的解法:申请一个1000*1000的数组,先把字符串排列好,然后按行遍历数组,如果此处不为空就添加到ans。其中因为不确定列要遍历到多少为止试了很多都不行,就直接暴力设为1000了,代码中可以看到我的注释。class Solution {public: string convert(string s, int numRows) { if(numRows==1) re原创 2016-05-28 20:11:15 · 362 阅读 · 0 评论 -
leetcode-Insertion Sort List-147
插入排序。空间O1,时间ON^2注意指针使用,RE了几次/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Sol原创 2016-06-09 00:31:22 · 416 阅读 · 0 评论 -
leetcode-Delete Node in a Linked List-237
一开始没读懂题题意是没有给链表,只给一个节点并保证这个节点不是最末尾的,要求删除这个节点做法是将后一个节点的内容(值和next)复制给这个节点,然后删除后一个节点/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * List原创 2016-06-09 00:42:50 · 337 阅读 · 0 评论 -
leetcode-Odd Even Linked List-328
把链表的第奇数个节点方在一起,第偶数的节点在后半部分,要求空间O1,时间ON看的这位网友的,思考为什么这样空间是O1http://www.cnblogs.com/pkuYang/p/5135542.html/** * Definition for singly-linked list. * struct ListNode { * int val; * Lis原创 2016-06-09 15:37:59 · 407 阅读 · 0 评论 -
leetcode-Sort List-148
用NlgN的时间对链表进行排序,对空间没有要求。这个复杂度有归并排序和快排,但是快排要求从两头扫描,链表做不到归并排序:两个两个一组排,之后再四个四个一组排,最后是两个有序表合并,递归/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next原创 2016-06-09 16:52:04 · 491 阅读 · 0 评论 -
leetcode-Merge k Sorted Lists-23(未完待续)
合并k个有序链表每次合并相邻两个就行,直接用一趟归并排序的函数,时间k*max(length),空间ON,因为在一趟归并排序时要用一个单独的链表存储结果/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(in原创 2016-06-09 17:05:57 · 558 阅读 · 0 评论 -
leetcode-Plus One-66
将vector的加一,主要是vector的用法。直接用insert,不需要重新申请一个数组class Solution {public: vector plusOne(vector& digits) { int c=1; for(int i=digits.size()-1;i>=0;i--){ int tmp=digits[i]原创 2016-06-11 00:00:53 · 353 阅读 · 0 评论 -
leetcode-Intersection of Two Arrays-349
这题的意思其实是求集合的交集,就用set,之后函数返回再用vector的构造函数把set转化成vector。http://www.cnblogs.com/grandyang/p/5507129.htmlclass Solution {public: vector intersection(vector& nums1, vector& nums2) { set s(nu原创 2016-07-18 23:26:43 · 332 阅读 · 0 评论 -
leetcode-Intersection of Two Arrays II-350
求模板类的交集,这次是真正的交集,不删除重复元素原先想把两个模板类的元素放进multiset中,然后用set_intersetion求交集,但是OUTPUT LIMIT EXCEED,可能是输出的容器容量小的原因(猜测)所以只能用笨办法/*1,1,2,3,4,4 这题要注意的是这种情况1,4,4,4*/class Solution {public: vector in原创 2016-07-19 21:49:41 · 477 阅读 · 0 评论 -
leetcode-Wiggle Sort II-324
对数组进行摆动排序排序、分成两半、依次从两段的后端往前取数 O(nlgn) 空间:O(n)class Solution {public: void wiggleSort(vector& nums) { sort(nums.begin(), nums.end()); int mid=(nums.size()+1)/2; int s=原创 2016-07-19 23:07:21 · 570 阅读 · 0 评论 -
leetcode-Best Time to Buy and Sell Stock-121
a[i]代表第i天商品的价格,问如果我买入一次再卖出一次,能得到的最大利润。 直观的做法是二重循环,枚举第i天买入,然后枚举大于第i天卖出,计算利润更新最大值。 利用贪心思想可得线性做法:假设第i天买入,那么肯定选第i天以后商品价格最大的那天卖出,因此从后往前遍历,更新最大的价格,同时减去当前价格就是当天买入能得到的最大利润,只需遍历一遍。class Solution {public:原创 2016-08-27 21:08:23 · 614 阅读 · 0 评论 -
leetcode-House Robber-198(dp)
输入一个数组,每个元素代表每个房子的价值,不能抢相邻的两个房子,求抢劫的最大值 和这道二叉树的树形dp是一个系列: http://blog.csdn.net/AC_0_summer/article/details/52210957 也是维护两个dp,dp1[i]表示抢第i个房子,dp2[i]表示不抢第i个房子; dp1[i]=dp2[i-1]+nums[i];dp2[i]=max(dp1[i原创 2016-08-28 22:02:23 · 646 阅读 · 0 评论 -
leetcode-Reverse Bits-190
输入一个无符号整数,求按位逆向之后的结果。位运算class Solution {public: uint32_t reverseBits(uint32_t n) { int ans=0; for(int i=1;i<=32;i++){ ans<<=1; if(n&1) ans++; n>原创 2016-08-28 22:15:21 · 633 阅读 · 0 评论 -
leetcode-Longest Substring Without Repeating Characters-3
找出字符串的最长不重复子串的长度 直观的做法是枚举以每个元素为开头的最长不重复子串,更新长度,时间复杂度是ON^2,空间O1 更高效的做法:用一个hash表保存每个字符最后出现的下标,用一个指针i,表名当前最长不重复子串的首位置,遍历字符串,在hash表中找到当前字符最后一次出现的位置记为k,如果k>=i,说明当前字符在当前最长不重复子串中出现过了,那么更新i和hash[s[j]]。只需遍历一遍原创 2016-08-29 00:10:16 · 585 阅读 · 0 评论 -
leetcode-Contains Duplicate III-220
输入一个数组,求是否存在abs(i-j)<=k使得abs(nums[i]-nums[j])<=t 既要比较元素值又要比较下标,可以二重循环,但是这题的本意肯定不在此 我的做法: set自定义数据类型和比较函数,如果nums[i]不同就按照升序排列,如果nums[i]相同按照下标降序排列 然后用两个指针,开始都指向开头,it指向当前判断的元素,it2指向it之前的元素: 1.如果it和it2原创 2016-09-02 14:15:19 · 658 阅读 · 0 评论 -
leetcode-String to Integer (atoi)-8
这题目首先你要理解atoi函数的功能,然后去自己实现。输入一个字符串,第一个非空字符是+、- 或者数字,否则直接输出0;正号后面还可以带一个负号,负号后面也可以带一个正号,然后后面必须是连续的数字,遇到非数字就停止。除了字符的格式还有就是注意整数的范围,INT_MAX,INT_MIN。我判断的地方不是很到位,所以后来直接在前面判断读入的数字的个数,如果超过10个,直接返回最大整数或最小整数原创 2016-05-28 23:38:31 · 491 阅读 · 0 评论 -
leetcode-Palindrome Number-9
不能用多余的空间不是不能设置变量了,只是不能用数组了。尾部的先取余后除,头部的先除后取余。class Solution {public: bool isPalindrome(int x) { if(x<0) return false; if(x<10) return true; int cnt=0; int tmp=x;原创 2016-05-29 00:26:29 · 353 阅读 · 0 评论 -
leetcode-Linked List Cycle II-142
返回有环的链表的环开始的节点。这位网友写得很好http://www.cnblogs.com/x1957/p/3406448.html/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :原创 2016-06-08 21:33:08 · 378 阅读 · 0 评论 -
leetcode-Reverse Linked List II-92
画图思考有两个端点,所以要四个指针保存考虑m=1和n=len情况/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */cla原创 2016-06-06 22:38:38 · 585 阅读 · 0 评论 -
leetcode-Partition List-86
1.把链表中小于x的节点归到前部分,大于等于x的节点在后一部分。不改变前半部分和后半部分内部节点的相对位置2.这题要画图理解指针!!看代码思考3.我的做法是创建两个新的链表,分别将小于的和大于等于的串起来,最后将两个链表连接。空间复杂度ON,时间复杂度ON,遍历一遍链表。/** * Definition for singly-linked list. * struct ListNo原创 2016-06-06 20:52:03 · 452 阅读 · 0 评论 -
leetcode-Remove Duplicates from Sorted List II-82
只留下链表中出现了一次的节点。也只需要遍历一遍,只是要多用一个指针prere,当遇到出现两次以上的节点时方便回退。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(N原创 2016-06-05 23:46:49 · 404 阅读 · 0 评论 -
leetcode-Rotate List-61
链表向右移动k位。先成环,然后在len-k处打断。遍历两遍,第一遍找到尾指针,第二遍找到第len-k个节点,将循环链表打断/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), ne原创 2016-06-05 23:28:48 · 387 阅读 · 0 评论 -
leetcode-Add Two Numbers-2
两个链表代表两个非负数,求和。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:原创 2016-06-05 23:05:37 · 342 阅读 · 0 评论 -
leetcode-Palindrome Linked List-234
用ON的时间复杂度和O1的空间复杂度判断链表是否为回文。参照网友的博客,用快慢法求得链表中点,然后逆向后半段链表,之后比较就好了。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x)原创 2016-06-05 22:39:15 · 467 阅读 · 0 评论 -
leetcode-Reverse Linked List-206
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* re原创 2016-06-05 22:16:39 · 322 阅读 · 0 评论 -
leetcode-Remove Linked List Elements-203
删除指定值的节点/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: Li原创 2016-06-05 11:39:10 · 376 阅读 · 0 评论 -
leetcode-Intersection of Two Linked Lists-160
网上看到两种方法:1.找出两个链表的长度,然后长的那个先走lenmax-lenmin步,之后一起遍历,找到相同的就返回。这个得遍历两次链表。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :原创 2016-06-05 00:57:36 · 354 阅读 · 0 评论 -
leetcode-Linked List Cycle-141
确定链表是否有环。经典题目,有环是说尾指针指向了链表中的某个节点。用两个指针,一个走两步,一个走一步,如果相遇就说明有环,就是一个周期的问题。如果没有环,走两步的指针走到头就结束遍历,如果有环,两个指针相遇了就结束。如果有环,要走多久有空自己算一下。/** * Definition for singly-linked list. * struct ListNode { * int原创 2016-06-05 00:13:07 · 401 阅读 · 0 评论 -
leetcode-Remove Duplicates from Sorted List-83
删除重复的节点。只需要遍历一遍。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public原创 2016-06-04 23:32:03 · 328 阅读 · 0 评论 -
leetcode-Swap Nodes in Pairs-24
将链表的相邻两个节点交换。看的网友chkkch的博客。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Soluti原创 2016-06-04 19:25:43 · 355 阅读 · 0 评论 -
leetcode-Merge Two Sorted Lists-21
又是一个经典的问题,合并两个有序的链表。用归并排序,两个指针分别扫描一遍。复杂度O(n)。链表、指针的使用要小心。顺序很重要。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x),原创 2016-05-31 22:37:38 · 479 阅读 · 0 评论 -
leetcode-Remove Nth Node From End of List-19
删除链表的倒数第n个节点双指针思想/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {pub原创 2016-05-30 23:46:25 · 364 阅读 · 0 评论 -
leetcode-Valid Parentheses-20
判断一串括号是否有效。栈的经典用法。class Solution {public: bool isValid(string s) { stack st; int len=s.length(); for(int i=0;i<len;i++){ if(s[i]==']'||s[i]==')'||s[i]=='}'原创 2016-05-31 20:53:59 · 295 阅读 · 0 评论 -
leetcode-House Robber III-337(树形dp)
The thief has found himself a new place for his thievery again. There is only one entrance to this area, called the “root.” Besides the root, each house has one and only one parent house. After a tour,原创 2016-08-15 14:36:05 · 1017 阅读 · 0 评论