牛客高频Top200(3)

news/2024/7/11 1:58:47 标签: javascript, 算法, es6

这里写目录标题

  • NC54数组中相加和为0的三元组
  • NC66在二叉树中找到俩个节点的最近公共祖先

NC54数组中相加和为0的三元组

  • 排序
  • 依次遍历
    • 当前数 > 0 跳过
    • 当前的数与前一个相等 跳过
    • 俩个指针 i 从 当前的下一个开始 j从最后一个开始,若当前的和大于0,j–;若当前的和小于0,i++。若等于零,则得到一种解,i++,j–,要注意i,j在移动时也需要注意去重。
javascript">/**
 * 
 * @param num int整型一维数组 
 * @return int整型二维数组
 */
function threeSum( num ) {
    if(!num || num.length < 3) return [];
    let ans = [];
    num.sort((a , b) => a > b ? 1 : -1);
    for(let now = 0 ; now < num.length - 2 ; now ++ ){
        if(num[now] > 0) continue;
        if(now != 0 && num[now] == num[now - 1] ) continue;
        let i = now + 1;
        let j = num.length - 1;
        while(i < j){
            if(num[i] + num[j] + num[now] == 0){
                let each = [ num[now] , num[i] , num[j]];
                ans.push(each)
                i++;
                while(num[i] == num[i - 1]){
                    i++;
                }
                j--;
                while(num[j] == num[j + 1]){
                    j--;
                }
            }else if(num[i] + num[j] + num[now] > 0){
                j--;
                while(num[j] == num[j + 1]){
                    j--;
                }
            }else if(num[i] + num[j] + num[now] < 0){
                i++;
                while(num[i] == num[i - 1]){
                    i++;
                }
            }
        }
    }
    return ans;
}
module.exports = {
    threeSum : threeSum
};

NC66在二叉树中找到俩个节点的最近公共祖先

深度先序遍历二叉树,如果当前节点,左子树,右子树中三者俩个是p,q则当前节点是公共祖先,找到的第一个就是,直接存起来即可。

javascript">/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */

/**
 * 
 * @param root TreeNode类 
 * @param o1 int整型 
 * @param o2 int整型 
 * @return int整型
 */
let ans = -1;
function lowestCommonAncestor( root ,  o1 ,  o2 ) {
    function dfs(root){
        if(root == null){
            return false;
        }
        let l = dfs(root.left);
        let r = dfs(root.right);
        let m = root.val == o1 || root.val == o2;
        if((l && r) || (l && m) || (r && m)){
            if(ans == -1) ans = root.val;
        }
        return l || r || m;
    }
    dfs(root);
    return ans;
}

module.exports = {
    lowestCommonAncestor : lowestCommonAncestor
};

http://www.niftyadmin.cn/n/633546.html

相关文章

i2c中主机发送模式示意图和波形图

目录 1、示意图2、仿真波形图7位地址,主机发送数据模式:10位地址,主机发送数据模式:1、示意图 说明:S=start, Sr=restart, P=stop, A=ack,NA=nack,EVx=event(当ITEVTEN=1时产生中断) EV5: SB=1,读SR1然后将地址写入DR寄存器将清除该事件 EV6: ADDR=1,读SR1然后读S…

目标瞄准EMC Isilon 戴尔力推高性能NAS

日前&#xff0c;戴尔开始提供新版本的流动文件系统&#xff0c;为其Compellent存储阵列配备统一文件(unified file)和数据块功能。这一举措为戴尔造就了性能和扩展性更高的NAS产品&#xff0c;足以与EMC Isilon产品抗衡。 戴尔公司(总部位于得克萨斯州圆石市)的文件解决方案营…

M7内核中一些信号整理

pc指针&#xff1a;u_cortexm7_wrapper.u_cortexm7integrationcs.u_cortexm7.u_top_sys.u_core.u_cm7_dpu.u_dpu_prog_flow.pc_ret_o[31:0] 栈指针SP&#xff1a; u_cortexm7_wrapper.u_cortexm7integrationcs.u_cortexm7.u_top_sys.u_core.u_cm7_dpu.u_dpu_rf.regd[31:2]

牛客高频Top200(4)

牛客高频Top200NC109 岛屿数量NC48 在旋转过的有序数组中寻找目标值NC128 接雨水问题NC7 买卖股票的最好时机(一)NC136 输出二叉树的右视图NC109 岛屿数量 DFS&#xff1a; 遍历二维数组每个位置&#xff0c;遇到1将count 1&#xff0c;再置0再将相邻的四个方向为1的置0&…

牛客高频Top200(5)

牛客高频Top200 js代码NC50链表每k个节点一组翻转NC91 最长上升子序列(三)NC62 判断是不是平衡二叉树NC13 二叉树的最大深度NC50链表每k个节点一组翻转 当k 1或者传入链表为空时&#xff0c;k可以直接返回。数组stack用来模拟栈&#xff0c;将当前节点放入stack中当stack中的…

1、TCAM介绍

目录拓展知识&#xff1a;CAM简介&#xff1a;主要特点&#xff1a;查找操作&#xff1a;应用实现&#xff1a;拓展知识&#xff1a;CAM CAM是一种特殊的存储器。所谓CAM&#xff0c;即内容寻址存储器。CAM存储器在其每个存储单元都包含了一个内嵌的比较逻辑&#xff0c;写入C…

牛客高频Top200(6)

牛客高频Top200 js代码NC73 数组中出现次数超过一半的数字NC59 矩阵的最小路径和NC73 数组中出现次数超过一半的数字 设置一个res作为基位&#xff0c;开始为数组第一个元素&#xff0c;cnt计数&#xff0c;开始为1遍历数组&#xff0c;若当前元素与res相等&#xff0c;cnt 1…

进了985材料天坑,还刚得知转专业特别难,应该怎么办?

&#xff3b;7年材料学长告诉你&#xff3d;早点脱坑&#xff0c;早点转行。 我在知乎上也分享了自己经历&#xff0c;同时很多人也看到并转行成功。可能咨询我问题的人加起来&#xff0c;都快上千人了&#xff0c;对于普通人&#xff0c;大多数人的选择永远是对的。&#xff…