leetcode hot100_part17_技巧篇

news2024/11/14 13:59:58

题目

136.只出现一次的数字

结合题目给的数据特征,使用位运算中的异或^;异或的结果很好记,相互不同就是1,相同就是0;同或一样的

169.多数元素

直接排序了

后面那几个方法不看了,追求效率可以再看,真是小刀拉屁股

75.颜色分类

左神的那个荷兰国旗问题,也牵涉到快排的三路快速排序;简单整理一下荷兰国旗问题;

问题1:数组nums,和一个给定的数x,要求把 <= x的数放在数组左半边,> x的数放在数组的右边;空间复杂度O(1),时间复杂度O(n)

问题2(荷兰国旗问题):数组nums,和一个给定的数x,要求把 <x的数放在数组左半边,=x的数放在数组中间,> x的数放在数组的右边;空间复杂度O(1),时间复杂度O(n)

这两个问题的关键都在于边界的划分;

对于问题1:

  • 定义<=区域的边界 boundary 在index = 0处;区域并不包含边界,小于等于区域为[..., boundary - 1];
  • 指针 i 从数组第一个数开始遍历,遍历完结束
    • 如果nums[i] <= x,nums[i]和小于等于区下一个数(nums[boundary])交换;小于等于区域后移一个位置(boundary++),同时i++;
    • 如果nums[i] > x, i++;

对于问题2:

  • 需要定义两个边界,三个区域
    • 小于区域的边界b1定义为index = 0,大于区的边界b2为index = len -1;
    • [start,b1 -1] ;[b1,b2];[b2 + 1,end]三个区域
  • 指针 i 遍历数组
    • nums[i] < x;nums[i] 和 <区域的下一个数交换(nums[b1]),同时b1++, i++
    • nums[i] = x;i++
    • nums[i] > x;nums[i] 和 >区域的前一个交换(nums[b2]),同时b2-1,i不变(交换到 i 这个位置的数还没判断呢);
  • 当 i 和 >区域撞上,结束;

31.下一个排列

        首先理解题意,全排列?不是,每个排列理解成一个数,题目要求的就是下一个最小的更大的数。因此从左到右递增就是最小的数,递减就是最大的数;

因为要求的是下一个最小的更大的数:

  1. 从后向前遍历,找到第一个能够变大的地方,即递增的地方num[i-1] < num[i];如果整个序列都是递减的,说明这是个最大的数,直接排序返回;
  2. 把num[i-1]换成从 i 位置到结尾这段区间的最小的更大的数,这个数是肯定存在的,至少有个nums[i];
  3. 交换之后把 i 位置到end结尾这段区间的数排序(变为最小),就是结果了。
    1. 之前会有个疑问,第3步为什么只要排序返回就行,万一 i 到 end 是中间大小的一个数,比它大的不还是中间值?返回最小的不就错了;
    2. 其实想想,从第一步开始,没交换之前,i到end就是递减的,说明 i 到 end 之间的是最大数,i-1交换的是i到end之间第一个比i-1大的数,交换后从i到end还是降序的,还是最大值;所以排序得到最小就行了。
    3. 自己之前的方法就是没有想明白这一点,所以才搞什么递归。。

Arrays,sort()排序是降序,然后可以对数组的某些部分进行排序。

287.寻找重复数

一开始的思路是每个数与剩下的数进行异或运算,n方时间复杂度,超时了;写代码的时候报错

bad operand types for binary operator '^';是没注意运算符优先级 if((nums[i] ^ nums[j]) == 0) 异或运算加上括号就行了。

看完下面三个方法看了用时好久

二分法

        首先抓住题目的特性,1~n这n个数放到长度为 n+1的数组里,肯定会有重复的,题目说只有一个重复的,好,这个重复的数就是x了;

        对于1~n这n个数里的每个数i,我们都执行遍历数组的操作,找出数组中小于等于i的元素个数,记为cnt[i];

        结论:对于[1, x -1]里的每个数i,都有cnt[i] <=i;对于[x,n]里的每个数i,cnt[i] > i 的。这个结论也很好证明,当i重复两次,i重复两次以上,这两种情况去想;想不出来去看官方题解。

        好,重点是,我们二分法是在1~n这每个数 i 对应的cnt[i]上进行二分查找,而不是在数组上;二分的标准也不是简单的大于小于某个数,而是看每个数i的情况,cnt[i] ?i 这个大小关系;问题又来了,二分的前提是递增的数组,结合上面的结论,cnt[i]是递增的;不细说了;

        最后,二分查找的写法,是找到第一个cnt[i] > i的元素,结果就是x,这不就是之前总结的模块,一开始还看不懂,真是服了。

二进制

        代码看不懂就去问gpt,对于1~n这n个数,都写成二进制,对于第i个二进制位,计算所有数在第i位上值为1的个数,记为x。对数组nums也进行同样的操作,结果记为y,如果x < y,说明重复的数的二进制第i位为1,为什么,官解写的很细了;

        它的二进制位都知道了还能不知道重复的数

快慢指针

        环形链表的变式,环形链表1是判断有没有换。环形链表2是找到环的入口。这题本质上就是找环的入口

        难的是怎么抽象出环啊,. - 力扣(LeetCode)

        index和num[index]都视节点,index== num[index]视为相同的节点;

        怎么求环入口和正确性,灵山视频:环形链表II【基础算法精讲 07】_哔哩哔哩_bilibili

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

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

相关文章

前端工程化详解 包管理工具

前端工程化详解 & 包管理工具 1、工程化体系介绍1.1、 什么是前端工程化1.2、 前端工程化发展 2、脚手架能力2.1 准备阶段2.2 开发阶段2.3 发布流程 3、npm能力3.1 剖析package.json3.1.1 必备属性3.1.2 描述信息3.1.3 依赖配置3.1.4 协议3.1.5 目录&文件相关3.1.5.1 程…

MATLAB基础语法知识

环境的配置等等就不写了&#xff0c;网上还是有很多资源可以找&#xff0c;而且正版的要付费&#xff0c;我也是看的网上的搞定的。 一&#xff0c;初识MATLAB 1.1 MATLAB的优势 不需要过多了解各种数值计算方法的具体细节和计算公式&#xff0c;也不需要繁琐的底层编程。可…

Untiy TTF转换为SDF

Untiy TTF转换为SDF 原因 下载的字体是TTF格式&#xff0c;但是TMP使用的是SDF格式&#xff0c;不支持TTF&#xff0c;需要转换网络没有检索到TTF转SDF的教程&#xff0c;可能是太简单了&#xff0c;自己记录一下吧 Unity内转换即可 在Asset中找到自己的TTF右键点击TTF&…

C++入门基础篇

引言 说到编程语言常常听到的就是C语言C Java 。C语言是面向过程的&#xff0c;C是和Java是面向对象的&#xff0c;那么什么是面向对象呢&#xff1f;什么又是面向过程呢&#xff1f;C是什么&#xff1f;封装、继承、多态是什么&#xff1f;且听我絮絮叨叨。 C入门基础 1.命名…

fluent 旋转机械流场与声场仿真-学习笔记

这里写目录标题 1、动网格与滑移网格、运动参考系2、网格拓扑与共节点设置3、模型选择4、关于旋转壁面&#xff08;rotor_blade)的边界条件设置5、滑移网格瞬态计算时间步长设置6、风机声场仿真域![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7855a595ee704c42a644…

【linux学习指南】Linux项目自动化构建工具 make /makefile进度条代码

文章目录 &#x1f4dd;前言&#x1f320; Makefile 格式&#x1f309;Makefile命令符号 &#x1f320;makefile/make基本原理&#x1f309;总和小案例 &#x1f320;进度条代码&#x1f6a9;总结 &#x1f4dd;前言 一个工程中的源文件多不技计数&#xff0c;其按其按类型、功…

某部门系统主机中病毒分析

一、安全巡检 正在写着代码&#xff0c;我的电脑火绒软件提示有内网攻击&#xff0c;关于一个古老的漏洞&#xff1a;“永恒之蓝”。瞬间来了兴趣&#xff0c;不会现在仍然有电脑中这病毒吧&#xff0c;打开绿盟安全管理平台。根据IP查询记录&#xff0c;果然有很多漏洞。 发…

《深入浅出WPF》读书笔记.11Template机制(上)

《深入浅出WPF》读书笔记.11Template机制(上) 背景 模板机制用于实现控件数据算法的内容与外观的解耦。 《深入浅出WPF》读书笔记.11Template机制(上) 模板机制 模板分类 数据外衣DataTemplate 常用场景 事件驱动和数据驱动的区别 示例代码 使用DataTemplate实现数据样式…

2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]

目录 1.数据库与数据库管理系统 1.1 数据库的相关概念 1.2 数据库与数据库管理系统的关系 1.3 常见的数据库简介 Oracle 1. 核心功能 2. 架构和组件 3. 数据存储和管理 4. 高可用性和性能优化 5. 安全性 6. 版本和产品 7. 工具和接口 SQL Server 1. 核心功能 2. 架构和组…

唯徳知识产权产权系统存在任意文件读取漏洞

漏洞描述 深圳市唯德科创信息有限公司&#xff08;以下简称&#xff1a;唯德&#xff09;于2014年在深圳成立&#xff0c;是专业提供企业、代理机构知识产权管理软件供应商&#xff0c;唯德凭借领先的技术实力和深厚的专利行业积累&#xff0c;产品自上市推广以来&#xff0c;…

一文讲懂Spring Event事件通知机制

目录 一 什么是spring event 二 怎么实现spring event 一 什么是spring event 我不会按照官方的解释来说什么是spring event&#xff0c;我只是按照自己的理解来解释&#xff0c;可能原理上会和官方有偏差&#xff0c;但是它的作用和功能就是这个&#xff0c;我更加偏向于从他…

CTK框架(三): 插件的安装

目录 1.方式1&#xff1a;使用ctk框架工厂&#xff0c;适用于调用普通的插件 1.1.步骤 1.2.实现 2.方法2&#xff1a;使用ctk框架启动器&#xff0c;适用于需要eventadmin时 2.1.实现 3.注意事项 1.方式1&#xff1a;使用ctk框架工厂&#xff0c;适用于调用普通的插件 1…

Linux服务器应急响应(下)

目录 介绍步骤 介绍 Linux alias命令用于设置指令的别名。 用户可利用alias&#xff0c;自定指令的别名。若仅输入alias&#xff0c;则可列出目前所有的别名设置。alias的效力仅及于该次登入的操作。若要每次登入是即自动设好别名&#xff0c;可在.profile或.cshrc中设定指令…

ggplot2 缩小的、带箭头的坐标轴 | R语言

1. 效果图 左侧为DimPlot2()效果图。 右侧为DimPlot()效果图&#xff0c;原图。 2. 代码 # DimPlot with 缩小的坐标轴 # # param scObject # param reduction # param group.by # param label # param raster # param legend.position # param ... # # return # expo…

OCC开发_变高箱梁全桥建模

概述 上一篇文章《OCC开发_箱梁梁体建模》中详细介绍了箱梁梁体建模的过程。但是&#xff0c;对于实际桥梁&#xff0c;截面可能存在高度、腹板厚度、顶底板厚度变化&#xff0c;全桥的结构中心线存在平曲线和竖曲线。针对实际情况&#xff0c;通过一个截面拉伸来实现全桥建模显…

长短期记忆神经网络-LSTM回归预测-MATLAB代码实现

一、LSTM简介&#xff08;代码获取&#xff1a;底部公众号&#xff09; 长短期记忆神经网络&#xff08;Long Short-Term Memory, LSTM&#xff09;是一种循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;的变体。相比于传统的RNN&#xff0c;LSTM能够更好…

nvidia-smi 随机掉卡,error,禁用GSP功能

问题 NVIDIA 驱动中默认开启加载GPU卡的GSP功能&#xff0c;会随机导致在执行nvidia-smi命令的时候读取GPU卡为ERR状态&#xff0c;或者导致smi命令卡死&#xff1b; 如下图&#xff0c;以A800为例&#xff0c;Centos系统&#xff1b; 涉及到的包含以下型号的GPU卡&#xff…

C#中chart绘制曲线

官网资料&#xff1a;Chart 类 (System.Windows.Forms.DataVisualization.Charting) | Microsoft Learn 类的 Chart 两个重要属性是 Series 和 ChartAreas 属性&#xff0c;这两个属性都是集合属性。 Series集合属性存储Series对象&#xff0c;这些对象用于存储要显示的数据以…

2024年全新deepfacelive简易版-傻瓜式使用教程-采用AI换脸软件deepfacelive

# 2024年全新deepfacelive简易版-傻瓜式使用教程-采用AI换脸软件deepfacelive # 下载安装deepfacelive 官网下载&#xff1a; https://github.com/iperov/DeepFaceLive/ 下载好后放在至少有 30G以上的盘&#xff0c; # 启动使用-设置中文 解压好后&#xff0c;双击.bat批处理…

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文&#xff1a;Improving Language Understanding by Generative Pre-Training 链接&#xff1a;https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点&#xff1a;生成loss和微调loss同时作用&#xff0c;让下…