leetcode-每日一题899. 有序队列(思维题)

简介: 当k = 1时,我们每次取 i 个首字符并将其移动到字符串末尾,对比找最小的字典序字符串即可

fc2644700400415281108602bd80cf7d.png


题目链接:https://leetcode.cn/problems/orderly-queue/


思路


方式一、思维


计算字典序最小的字符串,我们需要讨论k = 1 和 k > 1时两种情况


当k = 1时,我们每次取 i 个首字符并将其移动到字符串末尾,对比找最小的字典序字符串即可


当k > 1时,一定可以经过移动将字符串s变成字符串按照升序排序


代码示例


func orderlyQueue(s string, k int) string {
    if k == 1{
        ans := s
        for i := 1; i < len(s); i++{
            s = s[1:] + s[:1]
            if s < ans{
                ans = s
            }
        }
        return ans
    }
    ans := []byte(s)
    sort.Slice(ans, func(i, j int) bool {return ans[i] < ans[j]})
    return string(ans)
}


复杂度分析


  • 时间复杂度:O(n2),其中n时字符串长度

。当k = 1时,需要遍历n个字符串排列,每个字符串需要O(n)来判断是否为字典序最小,需要O(n2)的时间

。当k > 1时,对字符串进行排序,需要O(n logn)的时间


  • 空间复杂度:O(n),其中n时字符串长度,需要额外申请O(n)的空间
目录
相关文章
|
2月前
|
算法
LeetCode刷题---21.合并两个有序链表(双指针)
LeetCode刷题---21.合并两个有序链表(双指针)
|
4月前
【Leetcode 1944】队列中可以看到的人数 —— 单调栈
解题思路:维持一个单调递增栈来辅助计算每个人能够看到的人数。从右往左遍历数组,对于每个人,我们将其身高与栈顶元素的身高进行比较。如果当前人的身高比栈顶元素的身高高,则栈顶元素无法被当前人看到,将其出栈,并累计计数
|
4月前
|
Go
golang力扣leetcode 406.根据身高重建队列
golang力扣leetcode 406.根据身高重建队列
47 0
|
4月前
|
存储
leetcode:232. 用栈实现队列
leetcode:232. 用栈实现队列
19 0
|
4月前
|
Java 索引
leetcode-406:根据身高重建队列
leetcode-406:根据身高重建队列
26 0
LeetCode | 21. 合并两个有序链表
LeetCode | 21. 合并两个有序链表
LeetCode | 232. 用栈实现队列
LeetCode | 232. 用栈实现队列
|
26天前
【力扣】21. 合并两个有序链表
【力扣】21. 合并两个有序链表
|
2月前
|
存储
leetcode1944. 队列中可以看到的人数
leetcode1944. 队列中可以看到的人数
16 0
|
2月前
|
C语言
反转链表、链表的中间结点、合并两个有序链表【LeetCode刷题日志】
反转链表、链表的中间结点、合并两个有序链表【LeetCode刷题日志】

热门文章

最新文章