当前位置:网站首页>Leetcode divide and conquer / dichotomy
Leetcode divide and conquer / dichotomy
2022-07-05 06:13:00 【Dawnlighttt】
List of articles
q23 Merge k A sort list
Answer key
Use the idea of partition to solve , Merge sort . Because there is k A linked list , So traverse the linked list array , Then sort them one by one .
func mergeKLists(lists []*ListNode) *ListNode {
if len(lists) == 0 {
return nil
}
if len(lists) == 1 {
return lists[0]
}
var L *ListNode
L = mergeList(lists[0], lists[1])
for i := 2; i < len(lists); i++ {
L = mergeList(L, lists[i])
}
return L
}
func mergeList(L1, L2 *ListNode) *ListNode {
L := &ListNode{
}
curr := L
var next *ListNode
for L1 != nil && L2 != nil {
if L1.Val < L2.Val {
next = L1.Next
curr.Next = L1
L1.Next = nil
L1 = next
} else {
next = L2.Next
curr.Next = L2
L2.Next = nil
L2 = next
}
curr = curr.Next
}
if L1 != nil {
curr.Next = L1
}
if L2 != nil {
curr.Next = L2
}
return L.Next
}
q33 Search rotation sort array
Answer key
In this question , Arrays are not globally ordered , But partial order , But it can still be solved by dichotomy .
You can find that when we rotate the array , There must be a part of the array that is ordered , For example, in the example : The array becomes [4, 5, 6] and [7, 0, 1, 2] Two parts , And the left side of it [4, 5, 6] The array of this part is ordered .
So in the loop, we can check the mid Separate sides , Which side is orderly , And decide target Is it on the orderly side , If not on the orderly side , It must be on the other side . Through this idea, we finally get the answer .
func search(nums []int, target int) int {
n := len(nums)
if n == 0 {
return -1
}
if n == 1 {
if target == nums[0] {
return 0
} else {
return -1
}
}
l, r := 0, n - 1
for l <= r {
mid := (l + r) / 2
if nums[mid] == target {
return mid
}
// If the left side is in order
if nums[0] <= nums[mid] {
// If target Just in the left section
if nums[0] <= target && target < nums[mid] {
r = mid - 1
} else {
l = mid + 1
}
// If the right side is in order
} else {
// If target Just in the right section
if nums[mid] < target && target <= nums[n - 1] {
l = mid + 1
} else {
r = mid - 1
}
}
}
return -1
}
q34 Find the first and last positions of the elements in the sort array
Answer key
First use two points to find the value target The subscript midIndex, And then to midIndex Is the midpoint , Look left and right for target The left and right borders of .
func searchRange(nums []int, target int) []int {
l, r, midIndex, n := 0, len(nums) - 1, -1, len(nums)
for l <= r {
mid := (l + r) / 2
if nums[mid] == target {
midIndex = mid
break
}
if nums[mid] < target && target <= nums[n - 1] {
l = mid + 1
} else {
r = mid - 1
}
}
if midIndex == -1 {
return []int{
-1, -1}
}
start, end := 0, 0
for i := midIndex; i >= 0; i--{
if nums[i] == target {
start = i
} else {
break
}
}
for i := midIndex; i <= n - 1; i++{
if nums[i] == target {
end = i
} else {
break
}
}
return []int{
start, end}
}
边栏推荐
- 【云原生】微服务之Feign自定义配置的记录
- 1041 Be Unique
- [rust notes] 17 concurrent (Part 2)
- leetcode-1200:最小绝对差
- 1.15 - 输入输出系统
- Règlement sur la sécurité des réseaux dans les écoles professionnelles secondaires du concours de compétences des écoles professionnelles de la province de Guizhou en 2022
- Usage scenarios of golang context
- Appium foundation - use the first demo of appium
- Leetcode-6109: number of people who know secrets
- Daily question 1189 Maximum number of "balloons"
猜你喜欢
做 SQL 性能优化真是让人干瞪眼
leetcode-6108:解密消息
传统数据库逐渐“难适应”,云原生数据库脱颖而出
数据可视化图表总结(一)
Arduino 控制的 RGB LED 无限镜
Introduction et expérience de wazuh open source host Security Solution
1.14 - 流水线
On the characteristics of technology entrepreneurs from Dijkstra's Turing Award speech
6. Logistic model
Navicat连接Oracle数据库报错ORA-28547或ORA-03135
随机推荐
Introduction and experience of wazuh open source host security solution
【Rust 笔记】14-集合(下)
Appium基础 — 使用Appium的第一个Demo
wordpress切换页面,域名变回了IP地址
Dichotomy, discretization, etc
Appium automation test foundation - Summary of appium test environment construction
SPI 详解
1040 Longest Symmetric String
SQLMAP使用教程(二)实战技巧一
1.13 - RISC/CISC
Data visualization chart summary (I)
Leetcode-556: the next larger element III
leetcode-1200:最小绝对差
Leetcode array operation
Data visualization chart summary (II)
Erreur de connexion Navicat à la base de données Oracle Ora - 28547 ou Ora - 03135
【Rust 笔记】15-字符串与文本(上)
MatrixDB v4.5.0 重磅发布,全新推出 MARS2 存储引擎!
Typical use cases for knapsacks, queues, and stacks
Spark中groupByKey() 和 reduceByKey() 和combineByKey()