From 73bb201a61e83e8609fff34fb1580e7ca509a9b5 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Thu, 5 Apr 2018 14:13:14 +0800 Subject: [PATCH] auto commit --- "notes/Leetcode \351\242\230\350\247\243.md" | 27 +++++++++++++++++++ notes/SQL.md | 24 ++++++++--------- ...64\346\200\247\345\215\217\350\256\256.md" | 4 +-- ...56\351\242\230\345\210\206\346\236\220.md" | 2 +- ...73\347\273\237\345\216\237\347\220\206.md" | 4 --- ...31\350\241\250\350\276\276\345\274\217.md" | 2 ++ 6 files changed, 43 insertions(+), 20 deletions(-) diff --git "a/notes/Leetcode \351\242\230\350\247\243.md" "b/notes/Leetcode \351\242\230\350\247\243.md" index 66522aef35..695cd7f2e5 100644 --- "a/notes/Leetcode \351\242\230\350\247\243.md" +++ "b/notes/Leetcode \351\242\230\350\247\243.md" @@ -4231,6 +4231,33 @@ public ListNode deleteDuplicates(ListNode head) { } ``` +**删除链表的倒数第 n 个节点** + +[Leetcode : 19. Remove Nth Node From End of List (Medium)](https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/) + +```html +Given linked list: 1->2->3->4->5, and n = 2. +After removing the second node from the end, the linked list becomes 1->2->3->5. +``` + +```java +public ListNode removeNthFromEnd(ListNode head, int n) { + ListNode newHead = new ListNode(-1); + newHead.next = head; + ListNode fast = newHead; + while (n-- > 0) { + fast = fast.next; + } + ListNode slow = newHead; + while (fast.next != null) { + fast = fast.next; + slow = slow.next; + } + slow.next = slow.next.next; + return newHead.next; +} +``` + **交换链表中的相邻结点** [Leetcode : 24. Swap Nodes in Pairs (Medium)](https://leetcode.com/problems/swap-nodes-in-pairs/description/) diff --git a/notes/SQL.md b/notes/SQL.md index a1bf2937c7..d582dca206 100644 --- a/notes/SQL.md +++ b/notes/SQL.md @@ -330,7 +330,7 @@ FROM mytable 可以对同一分组数据使用汇总函数进行处理,例如求分组数据的平均值等。 -指定的分组字段除了能让数组按该字段进行分组,也可以按该字段进行排序,例如按 col 字段排序并分组数据: +指定的分组字段除了能按该字段进行分组,也可以按该字段进行排序,例如按 col 字段排序并分组数据: ```sql SELECT col, COUNT(*) AS num @@ -338,29 +338,29 @@ FROM mytable GROUP BY col; ``` -WHERE 过滤行,HAVING 过滤分组。行过滤应当先与分组过滤; +GROUP BY 是按照分组字段进行排序,ORDER BY 也可以以汇总字段来进行排序。 ```sql SELECT col, COUNT(*) AS num FROM mytable -WHERE col > 2 GROUP BY col -HAVING COUNT(*) >= 2; +ORDER BY num; ``` -GROUP BY 的排序结果为分组字段,而 ORDER BY 也可以以聚集字段来进行排序。 +WHERE 过滤行,HAVING 过滤分组。行过滤应当先与分组过滤; ```sql SELECT col, COUNT(*) AS num FROM mytable +WHERE col > 2 GROUP BY col -ORDER BY num; +HAVING COUNT(*) >= 2; ``` 分组规定: 1. GROUP BY 子句出现在 WHERE 子句之后,ORDER BY 子句之前; -2. 除了汇总计算语句的字段外,SELECT 语句中的每一字段都必须在 GROUP BY 子句中给出; +2. 除了汇总字段外,SELECT 语句中的每一字段都必须在 GROUP BY 子句中给出; 3. NULL 的行会单独分为一组; 4. 大多数 SQL 实现不支持 GROUP BY 列具有可变长度的数据类型。 @@ -374,7 +374,7 @@ ORDER BY num; SELECT * FROM mytable1 WHERE col1 IN (SELECT col2 - FROM mytable2); + FROM mytable2); ``` 下面的语句可以检索出客户的订单数量,子查询语句会对第一个查询检索出的每个客户执行一次: @@ -390,7 +390,7 @@ ORDER BY cust_name; # 十五、连接 -连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON 而不是 Where。 +连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON 而不是 WHERE。 连接可以替换子查询,并且比子查询的效率一般会更快。 @@ -463,8 +463,8 @@ from employee natural join department; ```sql select Customers.cust_id, Orders.order_num - from Customers left outer join Orders - on Customers.cust_id = Orders.curt_id; +from Customers left outer join Orders +on Customers.cust_id = Orders.curt_id; ``` 如果需要统计顾客的订单数,使用聚集函数。 @@ -522,9 +522,7 @@ WHERE col5 = val; ## 使用存储过程的好处 1. 代码封装,保证了一定的安全性; - 2. 代码复用; - 3. 由于是预先编译,因此具有很高的性能。 ## 创建存储过程 diff --git "a/notes/\344\270\200\350\207\264\346\200\247\345\215\217\350\256\256.md" "b/notes/\344\270\200\350\207\264\346\200\247\345\215\217\350\256\256.md" index 8913ff3b08..ecac4a1e7d 100644 --- "a/notes/\344\270\200\350\207\264\346\200\247\345\215\217\350\256\256.md" +++ "b/notes/\344\270\200\350\207\264\346\200\247\345\215\217\350\256\256.md" @@ -58,7 +58,7 @@ Two-phase Commit(2PC)。