- 博客(4)
- 收藏
- 关注
原创 LeetCode26,80删除有序数组中的重复项
首先是基本情况数组长度只要小于等于2都可以成立,再者快慢指针之间的差距应该为两个元素,隔两个元素进行对比,由于数组是有序的,所以如果快指针和慢指针对应的元素不同,则一定成立,快和慢都++,但如果对应的元素相同,则说明相同元素超过了2个,这个时候慢指针就不可以动了,直到找到不同的元素再进行替换,代码如下。至此,两题解完,主要用到了快慢指针的思想,两个都是O(n)的时间复杂度,因为都只是遍历了整个数组,空间复杂度为1,都只申请了几个int而已,符合题目要求。删除重复出现的元素,使得出现次数超过两次的元素。
2024-09-03 20:51:29
486
原创 LeetCode169多数元素
题目要求为给定一个其中一定有某个元素出现的次数大于数组长度的一半,需要我们返回这个元素的值。如下:给定一个大小为n的数组nums,返回其中的多数元素。多数元素是指在数组中出现次数⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
2024-09-03 15:41:14
921
原创 LeetCode09回文数
最后的return值,考虑到截至之后r>=x的,因而有r/10==x这个情况也为true,这里考虑到的是x为奇数位次的情况,而x==r是偶数位次的情况,若x=0则直接跳过循环返回r==x==0为true,至此全部情况考虑完毕。至于如何向中点验,如果不将其分解为字符组,考虑用另一个int记录x的另一半,在此过程中也直接把x截半,相对于截取x的前半部分,截取x的后半部分更为简单,所以我们通过除10取余的方式不断获取x的最后一位,获取之后再通过整除截断x。是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
2024-09-02 21:41:56
384
1
原创 LeetCode88合并两个有序数组
给出的数据中,可利用的信息为nums1和nums2都是非递减的,这个信息利用好的话可以减少多余的比较,最初的想法是双指针思想,分别从两个数组的头部开始遍历,遇到较小的就填到靠前的位置,这个思路是可行的,但需要新建一个m+n大小的数组用于储存,如果直接移动到nums1会出现将nums1中的元素覆盖的情况,而我想做到的是直接在nums1原地将两个数组排列好,那这样从头开始遍历的双指针思路就不可行了。空间上,申请了三个index和一个循环变量i,时间上,最坏的情况就是遍历所有数据,O(m+n),至此全部完结。
2024-09-02 11:18:19
355
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅