当前位置:网站首页>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}
}
边栏推荐
猜你喜欢
R language [import and export of dataset]
Dynamic planning solution ideas and summary (30000 words)
Navicat連接Oracle數據庫報錯ORA-28547或ORA-03135
传统数据库逐渐“难适应”,云原生数据库脱颖而出
Appium automation test foundation - Summary of appium test environment construction
wordpress切换页面,域名变回了IP地址
QQ电脑版取消转义符输入表情
WordPress switches the page, and the domain name changes back to the IP address
Matrixdb V4.5.0 was launched with a new mars2 storage engine!
LeetCode 0108. Convert an ordered array into a binary search tree - the median of the array is the root, and the left and right of the median are the left and right subtrees respectively
随机推荐
快速使用Amazon MemoryDB并构建你专属的Redis内存数据库
Matrixdb V4.5.0 was launched with a new mars2 storage engine!
剑指 Offer II 058:日程表
LeetCode 0108.将有序数组转换为二叉搜索树 - 数组中值为根,中值左右分别为左右子树
1041 Be Unique
JS quickly converts JSON data into URL parameters
Sqlmap tutorial (II) practical skills I
One question per day 1765 The highest point in the map
Introduction to LVS [unfinished (semi-finished products)]
数据可视化图表总结(二)
QQ电脑版取消转义符输入表情
Overview of variable resistors - structure, operation and different applications
SPI 详解
Redis publish subscribe command line implementation
QQ computer version cancels escape character input expression
WordPress switches the page, and the domain name changes back to the IP address
In depth analysis of for (VaR I = 0; I < 5; i++) {settimeout (() => console.log (I), 1000)}
leetcode-6109:知道秘密的人数
【Rust 笔记】15-字符串与文本(下)
SQLMAP使用教程(一)