【JavaScript】LeetCode1-5

1 合并两个有序数组

在这里插入图片描述

  • 双指针
  • 两个指针分别指向数组的最后一个元素(最大的元素),依次向前比较,把数大的放在num1中(从最后一位往前放)。
/**
 - @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) {
    var x = m - 1;
    var y = n - 1;
    var l = m + n - 1;
    while(x >= 0 && y >= 0){
        if(nums1[x] > nums2[y]){
            nums1[l--] = nums1[x--];
        }else{
            nums1[l--] = nums2[y--];
        }
    }

    while(y >= 0){
        nums1[l--] = nums2[y--];
    }
};

2 移除元素

在这里插入图片描述

  • 双指针
  • 从头遍历数组(i),如果和目标元素不同就赋值(j)。
/**
 - @param {number[]} nums
 - @param {number} val
 - @return {number}
 */
var removeElement = function(nums, val) {
    var j = 0;
    for(var i = 0; i < nums.length; i++){
        if(nums[i] != val){
            nums[j++] = nums[i];
        }
    }
    return j;
};

3 删除有序数组中的重复项

在这里插入图片描述

  • 双指针
  • 从头遍历数组(i),i 和 j 指向的元素不相同就赋值。
/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    var j = 0;
    for(var i = 0; i < nums.length; i++){
        if(nums[i] != nums[j]){
            nums[++j] = nums[i];
        }
    }
    return j + 1;
};

4 删除有序数组中的重复项Ⅱ

在这里插入图片描述

  • 双指针
  • 判断前两个元素(j - 2)和当前元素(i)是否相同,若不相同则赋值。
/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    var j = 2;
    for(var i = 2; i < nums.length; i++){
        if(nums[j - 2] != nums[i]){
            nums[j++] = nums[i];
        }
    }
    return j;
};

5 多数元素

在这里插入图片描述

  • Map
  • 遍历数组,存储元素个数。
/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function(nums) {
    let len = nums.length / 2;
    let count = new Map();
    for(let n of nums){
        count.set(n, (count.get(n) || 0) + 1);
        if(count.get(n) > len){
            return n;
        }
    }   
};
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值