首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >每日三题-下一个排列、颜色分类、寻找重复数

每日三题-下一个排列、颜色分类、寻找重复数

作者头像
才疏学浅的木子
发布于 2022-11-20 08:45:59
发布于 2022-11-20 08:45:59
19400
代码可运行
举报
文章被收录于专栏:CSDN文章CSDN文章
运行总次数:0
代码可运行

👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: 算法 🌈 算法类型Hot100题 🌈 ❤️ 支持我:👍点赞 🌹收藏 🤟关注

每日三题

下一个排列

解法一

双向遍历 先找出最大的索引 k 满足 nums[k] < nums[k+1],如果不存在,就翻转整个数组; 再找出另一个最大索引 l 满足 nums[l] > nums[k]; 交换 nums[l] 和 nums[k]; 最后翻转 nums[k+1:]。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public void nextPermutation(int[] nums) {
        int len = nums.length;
        if(len <= 1) return;
        int index = -1;
        for(int i = len-1;i>0;i--){
            if(nums[i-1] < nums[i]){
                index = i-1;
                break;
            }
        }
        if(index == -1){ // 说明这是递减序列
            int left = 0;
            int right = len-1;
            while(left < right){
                int temp = nums[right];
                nums[right] = nums[left];
                nums[left] = temp;
                left++;
                right--;
            }
        }else{
            for(int i = len-1;i > index;i--){
                if(nums[i] > nums[index]){
                    int temp = nums[i];
                    nums[i] = nums[index];
                    nums[index] = temp;
                    Arrays.sort(nums,index+1,len);
                    return;
                }
            }
            
        }
        return;
    }
}

颜色分类

方法一

排序 冒泡、快速等都可以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public void sortColors(int[] nums) {
        Arrays.sort(nums);
    }
}

方法二

双指针

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public void sortColors(int[] nums) {
        int len = nums.length;
        if(len <= 1) return;
        int p0 = 0,p2 = len-1;
        for(int i = 0;i < len;i++){
            while(i <= p2 && nums[i] == 2){
                int t = nums[p2];
                nums[p2--] = nums[i];
                nums[i] = t;
            }
            if(nums[i] == 0){
                int t = nums[i];
                nums[i] = nums[p0];
                nums[p0++] = t;
            }
        }
        return;
    }
}

寻找重复数

解法一

原地Hash 将值为x的放到下标为x-1处

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public int findDuplicate(int[] nums) {
        // num[i] = i+1
        for(int i = 0;i < nums.length;i++){
            while(nums[i] != i+1){
                //值为nums[i]的应该放在nums[nums[i]-1] 处
                if(nums[i] == nums[nums[i]-1]) return nums[i];
                int t = nums[nums[i]-1];
                nums[nums[i]-1] = nums[i];
                nums[i] = t;
            }
        }
        return 0;
    }
}

解法二

快慢指针

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public int findDuplicate(int[] nums) {
        int slow = 0;
        int fast = 0;
        do{
            slow = nums[slow];
            fast = nums[nums[fast]];
        }while(slow != fast);
        slow = 0;
        while(slow != fast){
            slow = nums[slow];
            fast = nums[fast];
        }
        return slow;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​LeetCode刷题实战31:下一个排列
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3520
leetcode-31. 下一个排列
这道题非常有趣,好像在玩游戏,首先得理解好这道题的意图。下一个排列,我们可以理解为数字排列的下一个值,即大一点但无固定的尺度,即使用已有的数字排列。
灰太狼学Java
2022/06/17
1800
leetcode-31. 下一个排列
每日三题-盛最多水的容器、三数之和、移动零
👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: 算法 🌈 算法类型:Hot100题 🌈 ❤️ 支持我:👍点赞 🌹收藏 🤟关注 每日三题 盛最多水的容器 三数之和 移动零 盛最多水的容器 解法一 双指针 left指向左边,right指向右边 如果num[left] <= num[right] 那么left++反之righht– 因为盛水靠矮的一方 class Solution { public in
才疏学浅的木子
2022/11/20
2270
每日三题-盛最多水的容器、三数之和、移动零
力扣75——颜色分类
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
健程之道
2019/12/31
3830
【LeetCode 热题 100】只出现一次的数字 / 多数元素 / 颜色分类 / 寻找重复数
_小羊_
2025/06/12
690
【LeetCode 热题 100】只出现一次的数字 / 多数元素 / 颜色分类 / 寻找重复数
每日三题-跳跃游戏、根据身高重建队列、任务调度器
👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: 算法 🌈 算法类型:Hot100题 🌈 每日三题 跳跃游戏 根据身高重建队列 任务调度器 跳跃游戏 解法一 贪心 class Solution { public boolean canJump(int[] nums) { int maxPosition = 0; for(int i = 0;i < nums.length;i
才疏学浅的木子
2022/11/22
1960
每日三题-跳跃游戏、根据身高重建队列、任务调度器
LeetCode148|颜色分类
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
码农王同学
2021/01/15
2430
搞定大厂算法面试之leetcode精讲19.数组
搞定大厂算法面试之leetcode精讲19.数组 视频讲解(高效学习):点击学习 数组操作的时间复杂度 Access:O(1) Search:O(n) Insert: 平均O(n),最好的情况下O(1),也就是在数组尾部插入O(1),最坏的情况下O(n) Delete;平均O(n),最好的情况下O(1),也就是在数组尾部删除O(1),最坏的情况下O(n) 283. 移动零 (easy) 动画过大,点击查看 方法1:两次遍历 思路:遍历数组,定义索引j为数组的第一个位置,遇上非0元素,让
全栈潇晨
2021/12/04
4880
LeetCode 287. 寻找重复数(BitMap)
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
Michael阿明
2021/02/20
5480
LeetCode 287. 寻找重复数(BitMap)
leetcode刷题(22)——15. 三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
老马的编程之旅
2022/06/22
1900
leetcode-75. 颜色分类
  这道题是「荷兰国旗问题」的典型题目,由计算机科学家 Edsger Wybe Dijkstra 首先提出。   用一次遍历的话需要两个指针,先获取数组长度,定义两个指针 p0 和 p1 都指向第一个数,p0 是用来当找到 0 时进行交换的位置标记,同时维护 p0 和 p1 指针,同理 p1 则是用来当找到 1 时交换位置的标记,同时维护 p1 指针(疑惑:为什么这里 遇到 0 要维护两个指针,而遇到 1 只维护 p1 一个指针?接着往下看)。用 for 循环遍历数组,当遇到 0 或者 1 时,分别与标记位置进行交换,可用题目示例来举例,题目给的是 nums = [2,0,2,1,1,0],过程如表格所示:
灰太狼学Java
2022/06/17
2130
leetcode-75. 颜色分类
LeetCode-31-下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
benym
2022/07/14
2420
LeetCode-75-颜色分类
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
benym
2022/07/14
4540
LeetCode 高频 50 题:最优解笔记(附题解)
题目描述: 给定整数数组 nums 和目标值 target,在数组中找出和为目标值的两个整数,返回它们的索引。 示例: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 最优解思路: 使用哈希表存储元素值到索引的映射。遍历数组,对于每个元素 num,检查 target - num 是否在哈希表中。若存在则返回结果,否则将当前元素加入哈希表。 时间复杂度:O(n) 空间复杂度:O(n)
大熊计算机
2025/07/15
4210
【力扣刷题】31. 下一个排列
例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。
jayjay
2022/11/02
4900
【力扣刷题】31. 下一个排列
【力扣/牛客刷题】136. 只出现一次的数字 || 75. 颜色分类 || 215. 数组中的第K个最大元素
【题目分析】这个题我们可以通过异或来求。两个相同的数异或之后为0,让数组中的数全部异或。最后得到的就是单出来的数字。于是我们可以得到以下代码:
xxxflower
2023/04/16
2570
【力扣/牛客刷题】136. 只出现一次的数字 || 75. 颜色分类 || 215. 数组中的第K个最大元素
LeetCode 287.寻找重复数 - JavaScript
题目描述:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
心谭博客
2020/04/21
1.2K0
【LeetCode100】--- 寻找重复数
用户11288958
2025/01/21
1420
【LeetCode100】--- 寻找重复数
每日算法系列【LeetCode 287】寻找重复数
给定一个包含 个整数的数组 ,其数字都在 到 之间(包括 和 ),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
godweiyang
2020/03/24
7220
每日算法系列【LeetCode 287】寻找重复数
常见排序算法-冒泡排序、选择排序 、插入排序 、快速排序、 归并排序 、堆排序
👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: 算法 🌈 算法类型:排序算法 🌈 排序算法 冒泡排序 冒泡排序的优化 选择排序 插入排序 快速排序 归并排序 堆排序 冒泡排序 平均时间复杂度: o(n^2) 最好时间: o(n) 最坏时间: o(n^2) 空间复杂度: o(1) 是否稳定: 稳定 简单的冒泡排序 public int[] bubbleSort(int [] nums){
才疏学浅的木子
2022/11/20
1.1K0
常见排序算法-冒泡排序、选择排序 、插入排序 、快速排序、 归并排序 、堆排序
推荐阅读
相关推荐
​LeetCode刷题实战31:下一个排列
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档