60、排列序列,61、旋转链表——LeetCode

news2024/9/22 3:37:19

60、排列序列

题目

给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

  1. "123"

  2. "132"

  3. "213"

  4. "231"

  5. "312"

  6. "321"

给定 n 和 k,返回第 k 个排列。

示例 1:

输入:n = 3, k = 3
输出:"213"

Code

class Solution {
    public String getPermutation(int n, int k) {
        int[] factorial = new int[n];
        factorial[0] = 1;
        for (int i = 1; i < n; ++i) {
            factorial[i] = factorial[i - 1] * i;
        }

        --k;
        StringBuffer ans = new StringBuffer();
        int[] valid = new int[n + 1];
        Arrays.fill(valid, 1);
        for (int i = 1; i <= n; ++i) {
            int order = k / factorial[n - i] + 1;
            for (int j = 1; j <= n; ++j) {
                order -= valid[j];
                if (order == 0) {
                    ans.append(j);
                    valid[j] = 0;
                    break;
                }
            }
            k %= factorial[n - i];
        }
        return ans.toString();
    }
}

61、旋转链表

题目

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

示例:

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

解题思路

  1. 理解问题:题目要求将链表向右旋转k个位置。例如,对于链表[1, 2, 3, 4, 5],k=2,旋转后应得到[4, 5, 1, 2, 3]。

  2. 特殊情况处理:如果链表为空、只有一个节点或k为0,则无需旋转,直接返回原始头节点。

  3. 计算链表长度:遍历链表以确定其长度。

  4. 调整k值:如果k大于链表长度,使用k % 长度来找到实际需要旋转的节点数。

  5. 找到旋转断开点:遍历链表,找到第(长度 - k)个节点,该节点的下一个节点将是旋转后链表的新头节点。

  6. 执行旋转:将找到的节点的next设置为null,切断链表。然后将链表的末尾节点连接到原始头节点,形成旋转后的链表。

解题过程

  1. 初始化:创建一个指针current用于遍历链表,两个指针newHeadtail分别用于存储新头节点和末尾节点。

  2. 计算长度:使用current遍历链表,计算并存储链表长度。

  3. 特殊情况:如果链表长度小于等于1或k为0,直接返回原始头节点。

  4. 调整k:如果k大于链表长度,更新k为k % 长度。

  5. 找到新头节点:使用两个指针slowfastfast移动速度是slow的k倍,当fast到达链表末尾时,slow所在位置的下一个节点即为新头节点。

  6. 断开并连接链表:将slownext设置为null,切断链表。然后将current(末尾节点)的next指向原始头节点,完成旋转。

复杂度

  • 时间复杂度:O(n),其中n是链表的长度。需要遍历整个链表来确定长度和找到旋转点。

  • 空间复杂度:O(1),只需要几个额外的指针变量,不依赖于输入大小。

Code

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if (head == null || head.next == null || k == 0) {
            return head;
        }

        int length = 1;
        ListNode current = head;
        while (current.next != null) {
            current = current.next;
            length++;
        }

        k = k % length;
        if (k == 0) {
            return head;
        }

        current = head;
        for (int i = 1; i < length - k; i++) {
            current = current.next;
        }

        ListNode newHead = current.next;
        current.next = null;
        ListNode tail = newHead;
        while (tail.next != null) {
            tail = tail.next;
        }
        tail.next = head;
        
        return newHead;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1994307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c#--有关DataGridView表格控件绑定数据源后的无数据、无法更新、闪烁及如何绑定图片等问题的总结

使用绑定数据源的方式绑定数据 1.DataGridview.Rows.Clear()&#xff0c;提示“不能清除此列表”。 用数据源绑定的DataGridView不能用Rows.Clear()清除&#xff0c;手动添加的是能够用clear()的。所以将datasource设置为null就可以清空数据。 2.DataSource为NULL&#xff0…

IP地址封装类(InetAddress类)

文章目录 前言一、IP地址是什么&#xff1f;二、IP地址封装类 1.常用方法2.实操展示总结 前言 当我们想要获取到通信对方的IP地址、主机地址等信息时&#xff0c;我们可以使用InetAddress类。InetAddress类在java的net包中。 一、IP地址是什么&#xff1f; IP地址 (Internet Pr…

人工智能算法岗找实习经验(一)简历撰写

首先分享简历撰写&#xff0c;下面简历仅供参考。 分为教育经历、个人能力、项目经历和竞赛经历4个部分。因为找的是算法岗&#xff0c;所以没有涉及太多技术和项目之外的东西。 教育经历 教育经历就是简单介绍下大学、专业、GPA还有就是和人工智能算法岗相关的专业课。 个…

【Python-实操】LabelMe to YOLOv8 Converter

LabelMe to YOLOv8 Converter 这是一个 Python 脚本&#xff0c;用于将 LabelMe 标注工具导出的 JSON 文件转换为 YOLOv8 格式的标注文件&#xff0c;并同时在图像上绘制标注的多边形。 功能 读取 LabelMe JSON 文件。解码并显示图像。从 classes.txt 文件加载类别标签。将多…

超有效!这样选的宠物空气净化器真能去浮毛?一款家电助力呼吸道

我那哥们儿&#xff0c;最近家里多了个毛茸茸的小成员——一只小猫。他对这猫好得不得了&#xff0c;俩人几乎是形影不离。可问题来了&#xff0c;小猫一长大&#xff0c;那毛啊&#xff0c;掉得满屋子都是。哥们儿最近就老抱怨&#xff0c;说晚上睡觉喉咙不舒服&#xff0c;问…

LVS是什么?以及LVS-NAT以及DR模式实验

目录 NAT LVS LVS集群的类型&#xff1a; LVS-NAT模式实验 环境准备&#xff1a; 实验步骤&#xff1a; LVS-DR模式实验 题目&#xff1a; 环境准备&#xff1a; 实验步骤&#xff1a; LVS-防火墙标签解决轮询调度问题 环境准备&#xff1a; 实验步骤&#xff1…

springboot疫情隔离酒店管理系统的开发--论文源码调试讲解

1系统成功运行案例 2 相关技术介绍 2.1 B/S模式 B/S模式是一种比较常用的网络结构模式[7]。B/S模式是由MVC结构组成&#xff0c;即模型、视图、控制器是构成该模式的主要结构[8]。模型主要是指业务模型&#xff0c;视图是面向用户而显示的相关界面&#xff0c;控制器主要是控制…

使用 defineNuxtComponent`定义 Vue 组件

title: 使用 defineNuxtComponent定义 Vue 组件 date: 2024/8/9 updated: 2024/8/9 author: cmdragon excerpt: 摘要&#xff1a;本文介绍了在Nuxt 3中使用defineNuxtComponent辅助函数定义类型安全的Vue组件的方法&#xff0c;适用于习惯Options API的开发者。defineNuxtCo…

【Deep-ML系列】Feature Scaling Implementation(特征缩放:standardization min-max)

题目链接&#xff1a;Deep-ML import numpy as np def feature_scaling(data: np.ndarray) -> (np.ndarray, np.ndarray):mean np.mean(data, axis0)std np.std(data, axis0)standardized_data (data - mean) / stdmaxnum np.max(data, axis0)minnum np.min(data, axi…

嵌入式人工智能(OpenCV-基于树莓派的人脸识别与入侵检测)

1、人脸识别 人脸识别是一种技术&#xff0c;通过检测、跟踪和识别人脸上的关键特征&#xff0c;以确认人脸的身份。它通常用于安保系统、身份验证、社交媒体和人机交互等领域。 人脸识别技术的基本原理是先通过图像处理和计算机视觉算法&#xff0c;提取人脸的特征点和特征描…

代理模式Proxy

一、代理模式&#xff08;Proxy&#xff09; 1.代理模式的定义 代理模式给某一个对象提供一个代理对象&#xff0c;并由代理对象控制对真实对象的访问&#xff0c;起到对代理对象已有功能的增强 通俗的来讲代理模式就是我们生活中常见的中介。 2.作用 中介隔离作用&#x…

2024 年的 Node.js 生态系统

数据来源于 Node.js Toolbox&#xff0c;网站展示了 Node.js 生态系统中积极维护且流行的库。

在 Duo S 上使用 TDL SDK 高效部署人脸检测模型

TDL SDK 是一款集成算法开发包&#xff0c;提供了便捷的编程接口&#xff0c;使开发者们能够更快、高效地将各种深度学习技术应用于自己的产品和服务中。无论开发者是否是深度学习领域的专家&#xff0c;有了TDL SDK作为助手&#xff0c;都能轻松构建智能应用。 Milk-V DuoS 是…

7.4.分支限界法概率算法近似算法数据挖掘算法智能优化算法

了解&#xff0c;没有考过&#xff0c;基本上不会考 分支限界法 分支限界法&#xff1a;与回溯法类似&#xff0c;同样是在问题的解空间树上搜索问题解的一种算法&#xff0c;它常以广度优先或以最小耗费&#xff08;最大效益&#xff09;优先的方式搜索问题的解空间树。回溯…

【AI大模型】LangChain框架:示例选择器与输出解析器携手,编织NLP高效精准之网

文章目录 前言一、示例选择器1.介绍及应用2.自定义示例选择器案例&#xff1a;AI点评姓名 3.基于长度的示例选择器案例&#xff1a;对输入内容取反 4.基于最大边际相关性(MMR)的示例选择器案例&#xff1a;得到输入的反义词 5.基于n-gram重叠的示例选择器6.综合案例 二、输出解…

深入探索String AOP想详情

一.AOP的概述 AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC&#xff09; Q:什么是AOP&#xff1f; A:Aspect Oriented Programming&#xff08;⾯向切⾯编程&#xff09; 什么是⾯向切⾯编程呢? 切⾯就是指某⼀类特定问题, 所以AOP也可以理解为⾯向特定⽅法编程. 什么是⾯向特…

鸿蒙HarmonyOS开发:@Observed装饰器和@ObjectLink装饰器:监听嵌套类对象属性变化

文章目录 一、装饰器二、概述三、限制条件四、装饰器说明五、Toggle组件1、子组件2、接口3、ToggleType枚举4、事件 六、示例演示1、代码2、效果 一、装饰器 State装饰器&#xff1a;组件内状态Prop装饰器&#xff1a;父子单向同步Link装饰器&#xff1a;父子双向同步Provide装…

Linux云计算 |【第二阶段】NETWORK-DAY1

主要内容&#xff1a; 计算机网络概述、网络拓扑结构、OSI参考模型、eNSP、交换机及原理 一、计算机网络概述 计算机网络是指将多台计算机或设备通过通信线路连接起来&#xff0c;以便它们能够相互交换信息和共享资源的系统。计算机网络的目的是实现数据通信和资源共享&#…

生成式人工智能安全评估体系构建

文章目录 前言一、人工智能安全治理的现状1.1 国际安全治理现状1.2 国内安全治理现状二、构建人工智能安全评估体系1.1 需要对生成式人工智能技术的安全性、可靠性、可控性、公平性等维度进行全面的考量。1.2 应对生成式人工智能全维度风险。1.3 在体系化应对框架中,应明确法律…

[Meachines] [Easy] Traverxec Nostromo RCE+SSH-私钥RSA解密+journalctl权限提升

信息收集 IP AddressOpening Ports10.10.10.165TCP:22,80 $ nmap -p- 10.10.10.165 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION …