双指针-80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
// for (var i = 0; i < nums.length-2; i++) {
// if (nums[i] === nums[i +2]) {
// nums.splice(i,1)
// i--
// }
// }
// return nums.length
if(nums.length == 0)return false
if(nums.length <3) return false
let fast = 2,slow = 2;
while(fast<nums.length){
if(nums[slow-2]!==nums[fast]){
nums[slow] = nums[fast]
slow ++
}
++fast
}
return slow
// 最终数组是什么样子的,是有slow来决定的。
// 快慢指针的精髓在于后面的给前面的替换掉,数据是减少的
}
回文数-9
纯字符串比较。
合并有序数组-88
合并两个有序数组的问题是一个常见的算法问题。给定两个从小到大排序的数组,要求将它们合并成一个有序数组。
以下是解决这个问题的步骤:
- 初始化指针:为两个数组分别初始化两个指针,指向各自数组的开始位置。
- 比较元素:比较两个指针所指向的元素,将较小的元素添加到新的数组中,并将该数组的指针向前移动一位。
- 移动指针:将较小元素所在数组的指针向前移动一位。
- 重复步骤2和3:直到其中一个数组的所有元素都被合并到新数组中。
- 处理剩余元素:如果一个数组的所有元素都已合并,将另一个数组的剩余元素直接添加到新数组的末尾。
- 返回结果:返回合并后的数组。
以下是JavaScript实现的示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
var merge = function(nums1, m, nums2, n) {
// 从后向前合并,避免覆盖nums1中未处理的元素
let i = m - 1; // nums1中最后一个元素的索引
let j = n - 1; // nums2中最后一个元素的索引
let k = m + n - 1; // 合并后数组的最后一个索引
// 比较并合并数组
while (i >= 0 && j >= 0) {
if (nums1[i] > nums2[j]) {
nums1[k] = nums1[i];
i--;
} else {
nums1[k] = nums2[j];
j--;
}
k--;
}
// 如果nums2还有剩余,直接复制到nums1前面
while (j >= 0) {
nums1[k] = nums2[j];
k--;
j--;
}
};
在这段代码中,我们从后向前遍历两个数组,这样我们可以确保在将元素复制到 nums1
时不会覆盖 nums1
中尚未处理的元素。当一个数组的所有元素都被处理后,我们检查另一个数组是否有剩余元素,并将它们复制到 nums1
的前面。这种方法可以确保合并后的数组仍然是有序的。
27-移除元素
交替合并字符串
接受两个参数:两个字符串,把他们交替合并。 字符串的方法,concat,合并字符串;split传入空,按照空字符串来切割字符串,把字符串转成数组;作为可迭代数据类型,可以通过访问器传入索引的方式获取数据。
1
不知道理解的对不对:js中,对数组,字符串的操作算法;考察的是api的理解和一部分的算法逻辑知识。 大厂通常倾向于考察一些高级算法,例如图,树,动态规划之类。
两数之和,三数之和,使用双指针的方法。
两数之和: