mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2026-03-13 10:02:05 +08:00
更新 problem 41、725
This commit is contained in:
@@ -5,10 +5,14 @@
|
||||
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
|
||||
|
||||
For example,
|
||||
|
||||
```c
|
||||
"A man, a plan, a canal: Panama" is a palindrome.
|
||||
"race a car" is not a palindrome.
|
||||
```
|
||||
|
||||
Note:
|
||||
|
||||
Note:
|
||||
Have you consider that the string might be empty? This is a good question to ask during an interview.
|
||||
|
||||
For the purpose of this problem, we define empty string as valid palindrome.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
Given a linked list, determine if it has a cycle in it.
|
||||
|
||||
Follow up:
|
||||
Follow up:
|
||||
Can you solve it without using extra space?
|
||||
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
Sort a linked list using insertion sort.
|
||||
|
||||

|
||||
|
||||
A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list.
|
||||
With each iteration one element (red) is removed from the input data and inserted in-place into the sorted list
|
||||
|
||||
@@ -6,11 +6,14 @@ Write a program to find the node at which the intersection of two singly linked
|
||||
|
||||
For example, the following two linked lists:
|
||||
|
||||

|
||||
|
||||
begin to intersect at node c1.
|
||||
|
||||
Example 1:
|
||||
|
||||

|
||||
|
||||
```c
|
||||
Input: intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
|
||||
Output: Reference of the node with value = 8
|
||||
@@ -19,6 +22,8 @@ Input Explanation: The intersected node's value is 8 (note that this must not be
|
||||
|
||||
Example 2:
|
||||
|
||||

|
||||
|
||||
```c
|
||||
Input: intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
|
||||
Output: Reference of the node with value = 2
|
||||
@@ -28,6 +33,8 @@ Input Explanation: The intersected node's value is 2 (note that this must not be
|
||||
|
||||
Example 3:
|
||||
|
||||

|
||||
|
||||
```c
|
||||
Input: intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
|
||||
Output: null
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package leetcode
|
||||
|
||||
import "fmt"
|
||||
|
||||
/**
|
||||
* Definition for singly-linked list.
|
||||
* type ListNode struct {
|
||||
* Val int
|
||||
* Next *ListNode
|
||||
* }
|
||||
*/
|
||||
func splitListToParts(root *ListNode, k int) []*ListNode {
|
||||
res := make([]*ListNode, 0)
|
||||
if root == nil {
|
||||
for i := 0; i < k; i++ {
|
||||
res = append(res, nil)
|
||||
}
|
||||
return res
|
||||
}
|
||||
length := getLength(root)
|
||||
splitNum := length / k
|
||||
lengNum := length % k
|
||||
cur := root
|
||||
head := root
|
||||
pre := root
|
||||
fmt.Printf("总长度 %v, 分 %v 组, 前面 %v 组长度为 %v, 剩余 %v 组,每组 %v\n", length, k, lengNum, splitNum+1, k-lengNum, splitNum)
|
||||
if splitNum == 0 {
|
||||
for i := 0; i < k; i++ {
|
||||
if cur != nil {
|
||||
pre = cur.Next
|
||||
cur.Next = nil
|
||||
res = append(res, cur)
|
||||
cur = pre
|
||||
} else {
|
||||
res = append(res, nil)
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
for i := 0; i < lengNum; i++ {
|
||||
for j := 0; j < splitNum; j++ {
|
||||
cur = cur.Next
|
||||
}
|
||||
fmt.Printf("0 刚刚出来 head = %v cur = %v pre = %v\n", head, cur, head)
|
||||
pre = cur.Next
|
||||
cur.Next = nil
|
||||
res = append(res, head)
|
||||
head = pre
|
||||
cur = pre
|
||||
fmt.Printf("0 head = %v cur = %v pre = %v\n", head, cur, head)
|
||||
}
|
||||
for i := 0; i < k-lengNum; i++ {
|
||||
for j := 0; j < splitNum-1; j++ {
|
||||
cur = cur.Next
|
||||
}
|
||||
fmt.Printf("1 刚刚出来 head = %v cur = %v pre = %v\n", head, cur, head)
|
||||
pre = cur.Next
|
||||
cur.Next = nil
|
||||
res = append(res, head)
|
||||
head = pre
|
||||
cur = pre
|
||||
}
|
||||
return res
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type question725 struct {
|
||||
para725
|
||||
ans725
|
||||
}
|
||||
|
||||
// para 是参数
|
||||
// one 代表第一个参数
|
||||
type para725 struct {
|
||||
one []int
|
||||
n int
|
||||
}
|
||||
|
||||
// ans 是答案
|
||||
// one 代表第一个答案
|
||||
type ans725 struct {
|
||||
one []int
|
||||
}
|
||||
|
||||
func Test_Problem725(t *testing.T) {
|
||||
|
||||
qs := []question725{
|
||||
|
||||
question725{
|
||||
para725{[]int{1, 2, 3, 4, 5}, 7},
|
||||
ans725{[]int{1, 2, 3, 4, 5, 0, 0}},
|
||||
},
|
||||
|
||||
question725{
|
||||
para725{[]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, 3},
|
||||
ans725{[]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}},
|
||||
},
|
||||
|
||||
question725{
|
||||
para725{[]int{1, 1, 1, 1, 1}, 1},
|
||||
ans725{[]int{1, 1, 1, 1, 1}},
|
||||
},
|
||||
|
||||
question725{
|
||||
para725{[]int{}, 3},
|
||||
ans725{[]int{}},
|
||||
},
|
||||
|
||||
// question725{
|
||||
// para725{[]int{1, 2, 3, 2, 3, 2, 3, 2}, 0},
|
||||
// ans725{[]int{1, 2, 3, 2, 3, 2, 3, 2}},
|
||||
// },
|
||||
|
||||
// question725{
|
||||
// para725{[]int{1, 2, 3, 4, 5}, 5},
|
||||
// ans725{[]int{1, 2, 3, 4}},
|
||||
// },
|
||||
|
||||
// question725{
|
||||
// para725{[]int{}, 5},
|
||||
// ans725{[]int{}},
|
||||
// },
|
||||
|
||||
// question725{
|
||||
// para725{[]int{1, 2, 3, 4, 5}, 10},
|
||||
// ans725{[]int{1, 2, 3, 4, 5}},
|
||||
// },
|
||||
|
||||
// question725{
|
||||
// para725{[]int{1}, 1},
|
||||
// ans725{[]int{}},
|
||||
// },
|
||||
}
|
||||
|
||||
fmt.Printf("------------------------Leetcode Problem 725------------------------\n")
|
||||
|
||||
for _, q := range qs {
|
||||
_, p := q.ans725, q.para725
|
||||
res := splitListToParts(S2l(p.one), p.n)
|
||||
for _, value := range res {
|
||||
fmt.Printf("【input】:%v length:%v 【output】:%v\n", p, len(res), L2s(value))
|
||||
}
|
||||
fmt.Printf("\n\n\n")
|
||||
}
|
||||
fmt.Printf("\n\n\n")
|
||||
}
|
||||
55
Algorithms/725. Split Linked List in Parts/README.md
Normal file
55
Algorithms/725. Split Linked List in Parts/README.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# [725. Split Linked List in Parts](https://leetcode.com/problems/add-two-numbers-ii/)
|
||||
|
||||
## 题目
|
||||
|
||||
Given a (singly) linked list with head node root, write a function to split the linked list into k consecutive linked list "parts".
|
||||
|
||||
The length of each part should be as equal as possible: no two parts should have a size differing by more than 1. This may lead to some parts being null.
|
||||
|
||||
The parts should be in order of occurrence in the input list, and parts occurring earlier should always have a size greater than or equal parts occurring later.
|
||||
|
||||
Return a List of ListNode's representing the linked list parts that are formed.
|
||||
|
||||
Examples 1->2->3->4, k = 5 // 5 equal parts [ [1], [2], [3], [4], null ]
|
||||
|
||||
Example 1:
|
||||
|
||||
```c
|
||||
Input:
|
||||
root = [1, 2, 3], k = 5
|
||||
Output: [[1],[2],[3],[],[]]
|
||||
Explanation:
|
||||
The input and each element of the output are ListNodes, not arrays.
|
||||
For example, the input root has root.val = 1, root.next.val = 2, \root.next.next.val = 3, and root.next.next.next = null.
|
||||
The first element output[0] has output[0].val = 1, output[0].next = null.
|
||||
The last element output[4] is null, but it's string representation as a ListNode is [].
|
||||
```
|
||||
|
||||
Example 2:
|
||||
|
||||
```c
|
||||
Input:
|
||||
root = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], k = 3
|
||||
Output: [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
|
||||
Explanation:
|
||||
The input has been split into consecutive parts with size difference at most 1, and earlier parts are a larger size than the later parts.
|
||||
```
|
||||
|
||||
Note:
|
||||
|
||||
- The length of root will be in the range [0, 1000].
|
||||
- Each value of a node in the input will be an integer in the range [0, 999].
|
||||
- k will be an integer in the range [1, 50].
|
||||
|
||||
|
||||
|
||||
## 题目大意
|
||||
|
||||
把链表分成 K 个部分,要求这 K 个部分尽量两两长度相差不超过 1,并且长度尽量相同。
|
||||
|
||||
把链表长度对 K 进行除法,结果就是最终每组的长度 n。把链表长度对 K 进行取余操作,得到的结果 m,代表前 m 组链表长度为 n + 1 。相当于把多出来的部分都分摊到前面 m 组链表中了。最终链表是前 m 组长度为 n + 1,后 K - m 组链表长度是 n。
|
||||
|
||||
注意长度不足 K 的时候要用 nil 进行填充。
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user