中文


[leetcode] Remove Duplicates from Sorted List II

Remove Duplicates from Sorted List II Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. For example, Given 1->2->3->3->4->4->5, return 1->2->5. Given 1->1->1->2->3, return 2->3. 困倦时不要解题,这题做了3遍才AC。 一个bonus,删掉多余的node,以免内存溢出。 我用了superHead的技巧,不用再单独判断链表的起始情况。 查看当前节点和下一个节点,如果相同,将isDuplicated置1.当遇到当前节点和下一节点不同时,看isDuplicated的值,如果是1,则忽略掉它,把isDuplicated置0.如果是0,证明当前节点没有重复,连入结果链表中。 /** * Definition for singly-linked list. * struct ListNode { […]


理解RESTful架构

刚刚读了一篇博文,关于RESTful架构的理解。觉得讲得不错,作一下笔记。 原文链接:http://www.ruanyifeng.com/blog/2011/09/restful.html REST的全称为Representational State Transfer 表现层状态的转化。 实际上这句话省略了一个主语,就是resource。 资源的表现层状态的转化。 资源是一种信息实体,它可以有多种外在的表现形式,我们把资源具体呈现出来的形式,叫做它的表现层。 互联网通讯的HTTP协议,是一个无状态协议。如果客户端想要操作服务器,必须通过某种手段,让服务端发生状态转化,这种转化是建立在表现层之上的,所以就是表现层状态转化。 HTTP协议里有四个表示操作方式的动词:GET,POST,PUT,DELETE。 GET用于获取资源 POST用于新建资源(也可用于更新资源) PUT用于更新资源 DELETE用于删除资源。 设计误区 URI代表的是一种资源实体,客户端与服务端之间,传递这种资源的表现层。 所以,URI中不应包含动词。动词应该放在HTTP协议中。 比如,某个URI是/posts/show/1其中show是动词,这个URI就设计错了。应该用GET表示show这个动作,URI应该写成/posts/1 如果一些动作是HTTP那四个动词表示不了的,那应该把动作做成一种资源。比如网上汇款,从账户1向帐户2汇款500元。 POST /accounts/1/transfer/500/to/2 正确的写法应把transfer改为名词transaction。把具体的信息写在post数据里。资源不能是动词,但可以是一种服务。 POST /transaction from=1&to=2&amount=500.00   需要指出,HTTP的四种动作中。GET,PUT,DELETE,HEAD,是幂等(Idempotent)的。无论对一个资源操作了多少次,返回的数据均相同。 评论补充 楼主的理解非常的好, 有一些我想补充, 顺别回答其它一些朋友的问题. 根据理查德森模型 (http://martinfowler.com/articles/richardsonMaturityModel.html), REST架构的成熟度有3个等级: Level 0 POX (这个就不算REST了) Level 1 Resources Level 2 Http verbs Level 3 Hypermedia Controls […]


[leetcode] Remove Duplicates from Sorted Array II

Remove Duplicates from Sorted Array II Follow up for “Remove Duplicates”: What if duplicates are allowed at most twice? For example, Given sorted array A = [1,1,1,2,2,3], Your function should return length = 5, and A is now [1,1,2,2,3]. 很奇怪的题,和此题的第一代没有本质区别。 只要增加一个变量count记录当前已经出现的相同数字的个数。 如果count>2,不移动start,如果小于等于2,copy A[i] to A[start++]。 class Solution { public: int […]


[leetcode] Simplify Path

Given an absolute path for a file (Unix-style), simplify it. For example, path = “/home/”, => “/home” path = “/a/./b/../../c/”, => “/c” click to show corner cases. Corner Cases: Did you consider the case where path = “/../”? In this case, you should return “/”. Another corner case is the […]


[leetcode] Add Binary

Add Binary Given two binary strings, return their sum (also a binary string). For example, a = “11” b = “1” Return “100”. 二进制加法,注意进位。和字符串访问时的末尾对齐。 class Solution { public: string addBinary(string a, string b) { if(a.empty()) return b; else if(b.empty()) return a; int carry = 0; string sum; int i = […]


[leetcode] Plus One

Plus One Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. Show Tags 注意进位,从vector末尾扫向开头。 class Solution { public: vector<int> plusOne(vector<int> &digits) { if(digits.size() == 0) return digits; […]