前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript算法题总结(五)哈希

JavaScript算法题总结(五)哈希

作者头像
henu_Newxc03
发布2022-05-12 14:24:19
2570
发布2022-05-12 14:24:19
举报
文章被收录于专栏:Newxc03的前端之路

BM50 两数之和

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
/**
  * 
  * @param numbers int整型一维数组 
  * @param target int整型 
  * @return int整型一维数组
  */
function twoSum( numbers ,  target ) {
   const ans=new Array(2)
   let map=new Map();
    let n=numbers.length;
    for(let i=0;i<n;i++){
//         遍历一波 
//         看看map里面有没有与该值相加等于target的值 如果没有就把该值放到map里
        if(map.has(target-numbers[i])){
            ans[0]=map.get(target-numbers[i])+1;
            ans[1]=i+1;
            break
        }else{
            map.set(numbers[i],i)
        }
    }
    return ans
}
module.exports = {
    twoSum : twoSum
};

BM51 数组中出现次数超过一半的数字

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
function MoreThanHalfNum_Solution(numbers)
{
    // write code here
    let map=new Map(),count;
    for(let i=0;i<numbers.length;i++){
        count=map.get(numbers[i])||0;
        map.set(numbers[i],count+1);
    }
    for(let i=0;i<numbers.length;i++){
        if(map.get(numbers[i])>numbers.length/2){
            return numbers[i];
        }
    }
}
module.exports = {
    MoreThanHalfNum_Solution : MoreThanHalfNum_Solution
};

BM52 数组中只出现一次的两个数字

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @return int整型一维数组
 */
function FindNumsAppearOnce( array ) {
    // write code here
    let set=new Set();
    array=array.sort((a,b)=>(a-b))
    for(let i=0;i<array.length;i++){
        if(!set.has(array[i])){
            set.add(array[i]);
        }else{
            set.delete(array[i]);
        }
    }
   return [...set]
}
module.exports = {
    FindNumsAppearOnce : FindNumsAppearOnce
};

BM53 缺失的第一个正整数

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型
 */
                
function minNumberDisappeared( nums ) {
  //结果要么是1-n  要么是n+1
  let set = new Set();
  nums.forEach(item=>set.add(item));
  
    //从1开始 
  for(let i=1; i<=nums.length; i++){
    if(!set.has(i))
      return i;
  }
  return nums.length+1;
}
module.exports = {
    minNumberDisappeared : minNumberDisappeared
};

module.exports = {
    minNumberDisappeared : minNumberDisappeared
};

BM54 三数之和

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
var threeSum = function(nums) {
    // 对数组进行排序,如果nums[i]只要大于0。后面的数字都是大于0,就不存在三个数之和等于0的情况,帮助我们去重。
    nums.sort((a, b) => {
        return a - b;
    })
    let result = [];
    for(let i = 0; i < nums.length; i++) {
        // 固定nums[i]的值 查找是否有其他两个数字之和加上nums[i]等于0的
        if (nums[i] > 0) {
            return result;
        }
        // 跳过重复的值
        if (i != 0 && nums[i] === nums[i - 1]) {
            continue;
        }
        let left = i + 1;
        let right = nums.length - 1;
        // 利用此时的nums[i],去找值符合的的其他两个数字
        while(left < right) {
            let sum = nums[i] + nums[left] + nums[right];
            if (sum == 0) {
                // 找到了符合条件的数字
                result.push([nums[i], nums[left], nums[right]]);
                // 已经找到符合条件的结果了,此时的left指针和right指针应该移动一个位置
                left++;
                right--;
                // 去重操作
                while(nums[left] === nums[left - 1]) {
                    left++;
                }
                while(nums[right] === nums[right + 1]) {
                    right--;
                }
            }
            if (sum > 0) {
                right--;
            }
            if(sum < 0) {
                left++;
            }
        }
    }
    return result;
};
module.exports = {
    threeSum : threeSum
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BM50 两数之和
  • BM51 数组中出现次数超过一半的数字
  • BM52 数组中只出现一次的两个数字
  • BM53 缺失的第一个正整数
  • BM54 三数之和
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档