本题要求实现一个用选择法对整数数组进行简单排序的函数。_力书算法面试高频题汇总(简单)...

88. 合并两个有序数组

方法一 : 合并后排序

最朴素的解法就是将两个数组合并之后再排序。

方法二 : 双指针 / 从前往后

最直接的算法实现是将指针p1置为nums1的开头,p2nums2的开头,在每一步将最小值放入输出数组中。

方法三 : 双指针 / 从后往前

如果我们从结尾开始改写nums1的值又会如何呢?这里没有信息,因此不需要额外空间。

125. 验证回文串

方法一:筛选 + 判断

最简单的方法是对字符串 ss 进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串 sgood 中。这样我们只需要判断sgood 是否是一个普通的回文串即可。

判断的方法有两种。第一种是使用语言中的字符串翻转 API 得到sgood 的逆序字符串 sgood_rev,只要这两个字符串相同,那么sgood 就是回文串。

第二种是使用双指针。初始时,左右指针分别指向sgood 的两侧,随后我们不断地将这两个指针相向移动,每次移动一步,并判断这两个指针指向的字符是否相同。当这两个指针相遇时,就说明 sgood 时回文串。

方法二:在原字符串上直接判断

我们直接在原字符串 ss 上使用双指针。在移动任意一个指针时,需要不断地向另一指针的方向移动,直到遇到一个字母或数字字符,或者两指针重合为止。也就是说,我们每次将指针移到下一个字母字符或数字字符,再判断这两个指针指向的字符是否相同。

136. 只出现一次的数字

方法一:集合 | 哈希表

使用集合存储数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。

使用哈希表存储每个数字和该数字出现的次数。遍历数组即可得到每个数字出现的次数,并更新哈希表,最后遍历哈希表,得到只出现一次的数字。

使用集合存储数组中出现的所有数字,并计算数组中的元素之和。由于集合保证元素无重复,因此计算集合中的所有元素之和的两倍,即为每个元素出现两次的情况下的元素之和。由于数组中只有一个元素出现一次,其余元素都出现两次,因此用集合中的元素之和的两倍减去数组中的元素之和,剩下的数就是数组中只出现一次的数字。

方法二:位运算

数组中的全部元素的异或运算结果即为数组中只出现一次的数字。

141. 环形链表

方法一:哈希表

我们可以通过检查一个结点此前是否被访问过来判断链表是否为环形链表。常用的方法是使用哈希表。

方法二:双指针

想象一下,两名运动员以不同的速度在环形赛道上跑步会发生什么?

通过使用具有不同速度的快、慢两个指针遍历链表。

155. 最小栈

方法一:辅助栈

在每个元素a入栈时把当前栈的最小值m存储起来。在这之后无论何时,如果栈顶元素是a,我们就可以直接返回存储的最小值m

160. 相交链表

方法一: 暴力法

对链表A中的每一个结点 a_iai​,遍历整个链表 B 并检查链表 B 中是否存在结点和 a_iai​ 相同。

方法二: 哈希表法

遍历链表 A 并将每个结点的地址/引用存储在哈希表中。然后检查链表 B 中的每一个结点 bi 是否在哈希表中。若在,则 bi 为相交结点。

171. Excel表列序号

方法一:进制转换

因为有26个字母,所以相当于26进制,每26个数则向前进一位。

172. 阶乘后的零

方法一:计算阶乘

计算它的末尾数 0 个数,通过反复检查数字是否可以被1010整除来计算末尾 0 的个数。

方法二:计算因子 5

计算每个数字中的因子5。我们可以使用一个循环而不是 if 语句,我们若有因子5将数字除以5。如果还有剩余的因子5,则将重复步骤。

方法三:高效的计算因子 5</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值