Leetcode-每日一题769. 最多能完成排序的块(贪心)

简介: 需要怎么分割序列才是个问题,题目其实给了提示因为序列里的数只能是[0, n-1]所以选择[l, r] 连续的序列中的数一定是 [l, r] 这段区间的数字,所以我们只需要遍历数组,去找这段区间内最大的数字,即边界值r,因为他才是决定边界的数字,每次我们到达了r这个位置就表示下一段区间。

31726ac61319486b94a75c2cc195a070.png


题目链接:点击跳转


思路


方法一、贪心


这题的意思很简单,意思是需要分多少段连续的序列,使每段序列都排序,最后排序完整体大的序列也是排序完的状态。


例如:[1, 0, 2, 3, 4]可以分成[1,0]、[2]、[3]、[4]四段序列,排序完整合就是一个排序完的状态[0, 1, 2, 3, 4]的序列。


需要怎么分割序列才是个问题,题目其实给了提示因为序列里的数只能是[0, n-1]所以选择[l, r] 连续的序列中的数一定是 [l, r] 这段区间的数字,所以我们只需要遍历数组,去找这段区间内最大的数字,即边界值r,因为他才是决定边界的数字,每次我们到达了r这个位置就表示下一段区间。


代码示例


func maxChunksToSorted(arr []int) int {
    ans, idx := 0, 0
    for i := 0; i < len(arr); i++ {
        idx = max(idx, arr[i])
        if idx == i {
            ans++
        }
    }
    return ans
}
func max(a, b int) int{
    if a > b {
        return a
    }
    return b
}

d124643b2a0b474a8b6ac21eef9c9f31.png


复杂度分析


  • 时间复杂度:O(N),其中N表示数组的长度,遍历arr数组需要O(N)的时间。
  • 空间复杂度:O(1),不需要额外申请空间。
目录
相关文章
|
3月前
|
机器学习/深度学习
leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)
leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)
21 0
|
1月前
|
存储 JavaScript
leetcode82. 删除排序链表中的重复元素 II
leetcode82. 删除排序链表中的重复元素 II
22 0
|
1月前
leetcode83. 删除排序链表中的重复元素
leetcode83. 删除排序链表中的重复元素
10 0
|
1月前
|
索引
力扣1859 将句子排序
力扣1859 将句子排序
|
3月前
leetcode:217. 存在重复元素(先排序再比较邻位)
leetcode:217. 存在重复元素(先排序再比较邻位)
16 0
|
3月前
|
算法 测试技术 C#
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
|
3月前
leetcode-148:排序链表
leetcode-148:排序链表
25 0
|
21天前
|
机器学习/深度学习 算法
力扣刷题日常(一)
力扣刷题日常(一)
20 2
|
1月前
|
存储 索引
《LeetCode》—— LeetCode刷题日记
《LeetCode》—— LeetCode刷题日记
|
1月前
|
搜索推荐
《LeetCode》——LeetCode刷题日记3
《LeetCode》——LeetCode刷题日记3