技巧栏练习题

136. 只出现一次的数字

题干中要求做到线性时间复杂度和常数空间复杂度。

考虑使用位运算。使用异或运算有以下三个性质:

任何数和0 做异或运算,结果仍然是原来的数。
任何数和其自身做异或运算,结果是 0。
异或运算满足交换律和结合律。

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

169. 多数元素

可以使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。

在这之后,我们遍历哈希映射中的所有键值对,返回值最大的键。我们同样也可以在遍历数组 nums 时候使用打擂台的方法,维护最大的值,这样省去了最后对哈希映射的遍历。

class Solution {public int majorityElement(int[] nums) {// Arrays.sort(nums);// return nums[nums.length/2];// int votes =0;// int candidate=0;// for(int num :nums){//     if(votes == 0){//         candidate = num;//     }//     votes += (num == candidate) ? 1 : -1;// }// return candidate;int win=nums[0];int count=1;for(int i=1;i<nums.length;i++){if(nums[i] == win){count++;}else if(count == 0){win=nums[i];count=1;}else{count--;}}return win;}
}

75. 颜色分类

class Solution {public void sortColors(int[] nums) {int n = nums.length;// 分别表示0指针、2指针、当前索引int p0=0, p2=n-1, idx=0;// 待处理区域是(idx,r)// 0区域是(0,l)// 1区域是(l,idx)// 2区域是(r,n-1)while(idx<=p2){if(nums[idx]==0) swap(nums,p0++,idx++);else if(nums[idx]==1) idx++;// 注意: 当2移到后边,换回来的不是1时,指针要回退else swap(nums,p2--,idx);}}// 交换函数public static void swap(int[] nums,int l, int r){int temp = nums[l];nums[l]=nums[r];nums[r]=temp;}
}

31. 下一个排列

尽可能的将低位的数字变大,这样才符合「下一个排列」的定义。其实就是将 k 位到低位的所有数作为候选,判断是否有更大的数可以填入 k 位中。

换句话说,我们要找的第 k 位其实就是从低位到高位的第一个下降的数。

  1. 从后往前找,找到第一个下降的位置,记为 k。注意k 以后的位置是降序的。
  2. 在区间 [k+1,n)从后往前,找到最小的比 k 要大的数。
  3. 将两者交换。注意此时 k 以后的位置仍然是降序的。
  4. 利用双指针直接将 k 以后的部分翻转(变为升序)。
  5. 注意:如果在步骤 1 中找到头部还没找到,说明该序列已经是字典序最大的排列。跳过2、3,直接将数组翻转成最小的升序排列。
class Solution {public void nextPermutation(int[] nums) {int i = nums.length-2;// 1.找到较小的数Kwhile(i>=0 && nums[i]>=nums[i+1]){i--;}// 2.找到较大的数if(i>=0){int j=nums.length-1;while(j>=0 && nums[i]>=nums[j]){j--;}// 3.交换swap(nums,i,j);}// 4.翻转reverse(nums,i+1);}public void swap(int[] nums, int i, int j){int temp=nums[i];nums[i]=nums[j];nums[j]=temp;}public void reverse(int[] nums, int start){int left = start, right = nums.length-1;while(left<right){swap(nums,left,right);left++;right--;}}
}

287.寻找重复数. 

1.二分查找法:

「数字都在 1到 n之间(包括 1和 n)」,查找一个有范围的整数,可以使用「二分查找」

  • 「二分查找」的思路是先猜一个数(搜索范围 [left..right] 里位于中间的数 mid),然后统计原始数组中 小于等于 mid 的元素的个数 count:
  • 如果 count 严格大于 mid。根据 抽屉原理,重复元素就在区间 [left..mid] 里;
  • 否则,重复元素可以在区间 [mid + 1..right] 里找到。

2.快慢指针(如:142. 环形链表 II)

关键是要理解如何将输入的数组看作为链表。
首先明确前提,整数的数组 nums 中的数字范围是 [1,n]。

我们将数组下标 n 和数 nums[n] 建立一个映射关系为 n->f(n)。从下标为 0 出发,就可以产生一个类似链表一样的序列。

1.数组中有一个重复的整数 <==> 链表中存在环
2.找到数组中的重复整数 <==> 找到链表的环入口

class Solution {public int findDuplicate(int[] nums) {// 这里已经从起点0跳过一步了int slow=nums[0];int fast=nums[nums[0]];// 1.找到快慢指针相遇点while(slow!=fast){slow=nums[slow];fast=nums[nums[fast]];}// 2.找到入环口// 将快指针移回起点0,与慢指针同步移动fast=0;while(fast!=slow){fast=nums[fast];slow=nums[slow];}// 返回指针位置return fast;}
}

3.原地哈希(如:41. 缺失的第一个证书-)

class Solution {public int findDuplicate(int[] nums) {for(int i=0; i<nums.length;){int t=nums[i], idx=t-1;if(nums[idx]==t){if(idx!=i) return t;i++;}else{int temp = nums[i];nums[i]=nums[idx];nums[idx]=temp;}}return -1;}
}

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

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

相关文章

快速LLaMA:面向大型语言模型的查询感知推理加速 论文摘要翻译与评论

论文摘要翻译与评论 论文标题&#xff1a; QuickLLaMA: Query-aware Inference Acceleration for Large Language Models 提出的框架 我们Q-LLM框架的示意图。来自记忆上下文的输入被分割成记忆块&#xff0c;通过查询感知的上下文查找来搜索与查询相关的块。目前的键值缓存…

ATMEGA16读写24C256

代码&#xff1a; #include <mega16.h> #include <stdio.h> #include <i2c.h> #include <delay.h> // Declare your global variables here #define EEPROM_BUS_ADDRESS 0xa0 #asm.equ __i2c_port0x15.equ __sda_bit1 .equ __scl_bit0 #endasm uns…

【深度学习】TCN,An Empirical Evaluation of Generic Convolutional【二】

文章目录 膨胀卷积什么是膨胀卷积膨胀卷积公式PyTorch代码 从零开始手动实现一个1D膨胀卷积&#xff0c;不使用PyTorch的nn.Conv1d1. 基本概念2. 手动实现1D膨胀卷积 TCN结构如何使用TCN源码说明1. Chomp1d 类2. TemporalBlock 类3. TemporalConvNet 类 使用方法 膨胀卷积 什么…

DC/AC电源模块:为电动车充电基础设施提供高效能源转换

BOSHIDA DC/AC电源模块&#xff1a;为电动车充电基础设施提供高效能源转换 DC/AC电源模块是一种用于电动车充电基础设施的重要组件&#xff0c;它能够实现高效能源转换。在电动车的普及和推广过程中&#xff0c;DC/AC电源模块的重要性日益凸显。本文将从DC/AC电源模块的基本原…

281 基于matlab的路径规划GUI交互

基于matlab的路径规划GUI交互。包括蚁量系统、蚁周系统、蚁密系统、蚁群系统、免疫混合算法。11种路径规划数据&#xff0c;最多225个规划点。蚁群和免疫算法的参数可进行设置&#xff0c;使得效果最佳。动态显示可视化规划结果。程序已调通&#xff0c;可直接运行。

JVM 性能分析——jdk 自带命令分析工具(jps/jstat/jinfo/jmap/jhat/jstack)

文章目录 jps&#xff08;Java Process Status&#xff09;&#xff1a;查看正在运行的Java进程jstat&#xff08;JVM Statistics Monitoring Tool&#xff09;&#xff1a;查看 JVM 的统计信息jinfo&#xff08;Configuration Info for Java&#xff09;&#xff1a;实时查看和…

ORDER BY FIELD

ORDER BY FIELD 是MySQL中的一个特殊排序函数&#xff0c;它允许你基于一个自定义的值列表对查询结果进行排序。这在你需要对结果集按照特定顺序展示时非常有用&#xff0c;而不是默认的升序或降序排列。下面是如何使用ORDER BY FIELD的简要说明和示例&#xff1a; 基本语法 SE…

python的变量的引用与赋值的学习

看代码&#xff1a; a 1 # 初始化变量a&#xff0c;赋值为1 b a # 变量b被赋值为变量a的值&#xff0c;此时b的值也为1 b 2 # 变量b被重新赋值为2 print(a) # 打印变量a的值 执行过程如下&#xff1a; a 1&#xff1a;变量a被赋值为1。b a&#xff1a;变量b被赋值为…

电子电气架构 --- 智能座舱功能应用

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

MFC工控项目实例之四在调试目录下创建指定文件夹

承接专栏《MFC工控项目实例之三theApp变量传递对话框参数》 在调试目录Debug下创建DATA、LIB、TEMP三个文件夹 1、SEAL_PRESSURE.h中添加代码 class CSeatApp : public CWinApp { ... public:CString m_Path;CString m_DataPath,m_TempPath,m_LibPath; ... };2、SEAL_PRESSURE…

LabVIEW电子类实验虚拟仿真系统

开发了基于LabVIEW开发的电子类实验虚拟仿真实验系统。该系统通过图形化编程方式&#xff0c;实现了复杂电子实验操作的虚拟化&#xff0c;不仅提高了学生的操作熟练度和学习兴趣&#xff0c;而且通过智能评价模块提供即时反馈&#xff0c;促进教学和学习的互动。 项目背景 在…

R 初级教程之一

IT的发展目前已经相当的内卷&#xff0c;到处都在说24年是将来4年最难的一年&#xff01;确实是&#xff0c;眼下各大厂商都在疯狂的裁员砍掉不营利的业务&#xff0c;收紧业务&#xff0c;不再盲目的扩张。小公司更是水深火热&#xff0c;无以言表。近期有个医院联系让使用R给…

8、Spring之Bean生命周期~销毁

8、Spring之Bean生命周期~销毁 销毁requiresDestruction()方法hasDestroyMethod()方法inferDestroyMethodIfNecessary()方法 销毁 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class); UserService userService (UserSer…

AI Stable diffusion 报错:稳定扩散模型加载失败,退出

可能是内存不够&#xff0c;看看你最近是加了新的大的模型&#xff0c;可以把你的stable-diffusion-webui\models\Stable-diffusion目录下的某个ckpt删除掉&#xff0c;可能ckpt太大&#xff0c;无法加载成功&#xff1b; Stable diffusion model failed to load, exiting 如图…

天阳科技集团北京卡洛其项目管理专家李先林受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 天阳科技集团北京卡洛其项目管理专家李先林先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“应用软件项目管理标准化实践探讨”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1…

面试专区|【41道Django高频题整理(附答案背诵版)】

解释一下 Django 和 Tornado 的关系&#xff1f; Django和Tornado都是Python的web框架&#xff0c;但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架&#xff0c;鼓励快速开发和干净、实用的设计。它遵循MVC设计&#xff0c;并强调代码复用。Django有…

代码随想录算法训练营day57 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和

1143.最长公共子序列 1、确定dp数组以及下标的含义 dp[i][j]&#xff1a;长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j] 2、确定递推公式 主要就是两大情况&#xff1a; text1[i - 1] 与 text2[j - 1]相同&#xff0c;text1[i …

设计模式- 责任链模式Chain of Responsibility(行为型)

责任链模式(Chain of Responsibility) 责任链模式是一种行为模式&#xff0c;它为请求创建一个接收者对象的链&#xff0c;解耦了请求的发送者和接收者。责任链模式将多个处理器串联起来形成一条处理请求的链。 图解 角色 抽象处理者&#xff1a; 一个处理请求的接口&#xf…

WPS for Linux 无法使用fcitx中文输入法

现象 只能输入英文&#xff0c;按下Shift尝试切换输入法没有反应 解决办法 编辑如下文件/usr/bin/wps/usr/bin/et/usr/bin/wpp 分别对应wps word、excel、powerpoint&#xff0c;修改每个文件&#xff0c;加入如下代码并保存 export XMODIFIERS"imfcitx" export …

机器人建模、运动学与动力学仿真分析(importrobot,loadrobot,smimport)

机器人建模、运动学与动力学仿真分析是机器人设计和开发过程中的关键步骤。 一、机器人建模 机器人建模是描述机器人物理结构和运动特性的过程。其中&#xff0c;URDF&#xff08;Unified Robot Description Format&#xff09;是一种常用的机器人模型描述方法。通过URDF&…