力扣爆刷第102天之hot100五连刷96-100

力扣爆刷第102天之hot100五连刷96-100

文章目录

      • 力扣爆刷第102天之hot100五连刷96-100
      • 一、136. 只出现一次的数字
      • 二、169. 多数元素
      • 三、75. 颜色分类
      • 四、31. 下一个排列
      • 五、287. 寻找重复数

一、136. 只出现一次的数字

题目链接:https://leetcode.cn/problems/single-number/description/?envType=study-plan-v2&envId=top-100-liked
思路:本题利用数学技巧,利用异或运算,一个数与0异或运算的结果还是它自身,此外,不同异或为1,相同为0,不同数异或会有一些大小变化,再进行相同数异或会减小掉变化。

class Solution {
    public int singleNumber(int[] nums) {
        int res = 0;
        for(int n : nums) {
            res ^= n;
        }
        return res;
    }
}

二、169. 多数元素

题目链接:https://leetcode.cn/problems/majority-element/description/?envType=study-plan-v2&envId=top-100-liked
思路:投票算法,当前数如果重复出现则加1,出现别的数则减1,为0换下一个数。

class Solution {
    public int majorityElement(int[] nums) {
        int count = 0, res = 0;
        for(int n : nums) {
            if(count == 0) {
                res = n;
            }
            count += n == res ? 1 : -1;
        }
        return res;
    }
}

三、75. 颜色分类

题目链接:https://leetcode.cn/problems/sort-colors/description/?envType=study-plan-v2&envId=top-100-liked
思路:3个数要排序,先0和1交换排序,然后再1和2交换排序。

class Solution {
    public void sortColors(int[] nums) {
        int zero = 0;
        for(int i = 0; i < nums.length; i++) {
            if(nums[i] == 0) {
                int temp = nums[zero];
                nums[zero] = nums[i];
                nums[i] = temp;
                zero++;
            }
        }
        int one = zero;
        for(int i = zero; i < nums.length; i++) {
            if(nums[i] == 1) {
                int temp = nums[one];
                nums[one] = nums[i];
                nums[i] = temp;
                one++;
            }
        }
    }
}

四、31. 下一个排列

题目链接:https://leetcode.cn/problems/next-permutation/description/?envType=study-plan-v2&envId=top-100-liked
思路:求下一个排列,是求下一个最小的大于它的值,基本原理从下图的5, 7, 6, 4处进行寻找,寻找最小的一个大于它的数,自然要从右边开始找,找第一个凹陷处,nums[i] < nums[i+1],此时i= 5,然后再从右边找第一个大于5 的数,为6,也就是nums[j]>nums[i],此刻这个6就是最小的一个大于它的数,然后交换,交换后[i, end]为单调递减,然后翻转即可。
在这里插入图片描述

class Solution {
    public void nextPermutation(int[] nums) {
        int i = nums.length - 2;
        while(i >= 0 && nums[i] >= nums[i+1]) {
            i--;
        }
        if(i >= 0) {
            for(int j = nums.length-1; j >= 0; j--) {
                if(nums[j] > nums[i]) {
                    swap(nums, i, j);
                    break;
                }
            }
        }
        
        reverse(nums, i+1, nums.length-1);
    }

    void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }

    void reverse(int[] nums, int i, int j) {
        while(i < j) {
            swap(nums, i, j);
            i++;
            j--;
        }
    }
}

五、287. 寻找重复数

题目链接:https://leetcode.cn/problems/find-the-duplicate-number/description/?envType=study-plan-v2&envId=top-100-liked
思路:寻找重复数,给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n)。这个是题目的描述,说明最大的数作为索引,也仅仅是数组结尾,所以可以把数组元素和索引建立联系,构建逻辑上的循环数组,和链表上的循环数组一样,使用快慢指针,慢的走一步,快的走两步,相遇就是环的入口,只不过此时拿到的是数组里的数,然后再有一个从起点出发,相遇即可拿到环的入口。

class Solution {
    public int findDuplicate(int[] nums) {
        int slow = 0, fast = 0;
        slow = nums[slow];
        fast = nums[nums[fast]];
        while(slow != fast) {
            slow = nums[slow];
            fast = nums[nums[fast]];
        }
        int one = 0;
        while(one != slow) {
            one = nums[one];
            slow = nums[slow];
        }
        return one;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv3学习

YOLOv3仅使用卷积层&#xff0c;使其成为一个全卷积网络&#xff08;FCN&#xff09;。文章中&#xff0c;作者提出一个新的特征提取网络&#xff0c;Darknet-53。正如其名&#xff0c;它包含53个卷积层&#xff0c;每个后面跟随着batch normalization层和leaky ReLU层。没有池…

基于springboot的医院医护人员排班系统

技术&#xff1a;springbootvuemysql 一、系统背景 本医护人员排班系统管理员&#xff0c;医护。管理员功能有个人中心&#xff0c;医院信息管理&#xff0c;医护信息管理&#xff0c;医护类型管理&#xff0c;排班信息管理&#xff0c;排班类型管理&#xff0c;科室信息管理&…

vivado 增量实施

增量实施 增量实现是指增量编译的实现阶段设计流程&#xff1a; •通过重用参考设计中的先前布局和布线&#xff0c;保持QoR的可预测性。 •加快地点和路线的编制时间或尝试最后一英里的计时关闭。 下图提供了增量实现设计流程图。该图还说明了增量合成流程。有关增量的更多…

一命通关广度优先遍历

前言 在这篇文章之前&#xff0c;已对非线性结构遍历的另一种方法——深度优先遍历进行了讲解&#xff0c;其中很多概念词都是共用的。为了更好的阅读体验&#xff0c;最好先在掌握或起码了解dfs的基础上&#xff0c;再来阅读本文章&#xff0c;否则因为会有很多概念词看不明白…

每日五道java面试题之mybatis篇(六)

目录&#xff1a; 第一题. MyBatis⽀持动态SQL吗&#xff1f;第二题. 说说Mybatis的⼀级、⼆级缓存&#xff1f;第三题. MyBatis的功能架构是什么样的&#xff1f;第四题. 为什么Mapper接⼝不需要实现类&#xff1f;第五题. 说说Mybatis的插件运⾏原理&#xff0c;如何编写⼀个…

GEE入门及进阶教程|使用表达式处理图像

目录 1.EVI的算术计算 2.使用表达式计算 EVI 3.使用表达式计算 BAI 1.EVI的算术计算 增强植被指数 (EVI) 旨在最大限度地减少 NDVI 的饱和度和其他问题&#xff0c;在叶绿素含量高的地区&#xff08;例如雨林&#xff09;&#xff0c;EVI 不会像 NDVI 那样饱和&#xff08;即…

转置卷积(transposed-conv)

一、什么是转置卷积 1、转置卷积的背景 通常&#xff0c;对图像进行多次卷积运算后&#xff0c;特征图的尺寸会不断缩小。而对于某些特定任务 (如图像分割和图像生成等)&#xff0c;需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作&#xff0c…

spring boot3登录开发-2(2短信验证码接口实现)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 上文衔接 内容简介 短信验证码接口实现 1.依赖导入 2.接口分析 3.实现思路 3.功能实现 创建发送短信…

USART串口控制LED灯

#include "uart4.h"void uart4_init() {//使能GPIORCC->MP_AHB4ENSETR |(0x1<<1);RCC->MP_AHB4ENSETR |(0x1<<6);//使能UART4RCC->MP_APB1ENSETR |(0x1<<16) ;//GPIO MODER设置 复用模式设置GPIOB->MODER |(0x2<<4);G…

C语言例:设 int i=2;float f=14;,则执行语句f=(float)i; 后。变量i 的值

代码如下&#xff1a; #include<stdio.h> int main(void) {int i2;float f14;f(float)i;printf("i %d\n",i); //i2//强制转换不会改变数据类型printf("i %.1f\n",i);return 0; } 结果如下&#xff1a;

【Leetcode每日一题】 递归 - 两两交换链表中的节点(难度⭐)(38)

1. 题目解析 题目链接&#xff1a;24. 两两交换链表中的节点 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 一、理解递归函数的含义 首先&#xff0c;我们需要明确递归函数的任务&#xff1a;给定一个链表&#xf…

网速监控,实时网络速度监控

带宽与网速 现在&#xff0c;对高带宽的需求空前高涨&#xff0c;而且网络&#xff08;包括标准的内部部署&#xff09;以及公共、私有和混合环境都变得更加复杂。 虽然带宽和网速经常互换使用&#xff0c;但它们并不总是相同的。网速更多的是与延迟有关&#xff0c;而不是与…

es 集群核心概念以及实践

节点概念&#xff1a; 节点是一个Elasticsearch的实例 本质上就是一个JAVA进程一台机器上可以运行多个Elasticsearch进程&#xff0c;但是生产环境一般建议一台机器上只运行一个Elasticsearch实例 每一个节点都有名字&#xff0c;通过配置文件配置&#xff0c;或者启动时候 -…

2024年【T电梯修理】模拟考试及T电梯修理模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理模拟考试是安全生产模拟考试一点通生成的&#xff0c;T电梯修理证模拟考试题库是根据T电梯修理最新版教材汇编出T电梯修理仿真模拟考试。2024年【T电梯修理】模拟考试及T电梯修理模拟考试题库 1、【多选题】…

​CNC数控机床能否通过工业智能网关实现远程运维​?-天拓四方

随着工业4.0时代的来临&#xff0c;智能制造成为制造业转型升级的关键。CNC数控机床作为制造业的核心设备之一&#xff0c;其智能化、远程化的运维管理显得尤为重要。工业智能网关作为一种连接物理世界与数字世界的桥梁&#xff0c;为CNC数控机床的远程运维提供了强大的技术支撑…

急!苹果手机充电充不进去什么原因?

在使用苹果手机时&#xff0c;有时可能会遇到充电问题&#xff0c;即充电时无法正常充电的情况。这种情况可能会导致手机无法充电&#xff0c;影响手机的正常使用。虽然苹果手机通常具有良好的充电性能&#xff0c;但是出现充电问题也并非罕见。 在本文中&#xff0c;我们将探…

若依添加页面

背景&#xff1a;我想增加的是一个收支管理的页面 views中直接添加income文件夹&#xff0c;里面放着index.vue 网页的菜单中添加这个页面的菜单

【JavaScript】JavaScript 程序流程控制 ③ ( 对 JavaScript 代码进行断点调试 )

文章目录 一、对 JavaScript 代码进行断点调试1、断点调试2、浏览器断点调试 一、对 JavaScript 代码进行断点调试 1、断点调试 断点调试 指的是 在 程序代码 的 指定行 设置一个断点 , 以 调试模式 启动后 , 当程序运行到 断点 处 , 就会阻塞住 , 此时可以查看 当前 各个变量的…

GraalVM详细安装及打包springboot、java、javafx使用教程(打包普通JAVA项目篇)

前言 在当前多元化开发环境下&#xff0c;Java作为一种广泛应用的编程语言&#xff0c;其应用部署效率与灵活性的重要性日益凸显。Spring Boot框架以其简洁的配置和强大的功能深受开发者喜爱&#xff0c;而JavaFX则为开发者提供了构建丰富桌面客户端应用的能力。然而&#xff…

中国网怎么投稿,发稿流程,中国网发稿需要多少钱?(附中国网各频道价格明细)

中国网是一家专业的新闻媒体平台&#xff0c;拥有庞大的读者群体和高质量的新闻内容。很多企业和个人都希望能够在中国网上发布自己的文章或新闻&#xff0c;以增加曝光度和影响力。那么&#xff0c;中国网如何投稿&#xff1f;发稿流程是怎样的&#xff1f;又需要多少费用呢&a…