前端笔面编程收录【按公司】

news2024/11/21 2:31:51

目录

虚拟DOM【腾讯音乐笔试】

连字转驼峰【美团一面】

1.split('-')

2.toUpperCase()

3.slice(1)

用友sp

一面【二选一】

数组相邻和最大的对应两个元素

千位分割【无负数,含小数】

二面

华容道:BFS

k / 3, y = k % 3; //一维数组下标转化到二维数组中的坐标

swap(t[k],t[a*3+b]);

版本号排序:【滴滴提前批】

leetCode394字符串解码【地平线一面、金山笔试】

k[encoded_string]

A.正则表达式

B.递归

C.栈

消除相邻同字符【地平线一面】

龙湖一面

输入1返回0,输入0返回1

条件(三元)运算符

位运算(异或操作)

逻辑 NOT 运算符

减法

条件语句

数组映射

求和1-100的数组

等差数列

reduce

拓展:等比数列


虚拟DOM【腾讯音乐笔试】

class VNode {
  constructor(tagName, props, children) {
    this.tagName = tagName;
    this.props = props;
    this.children = children;
  }
}

const h = (tagName, props, children) => new VNode(tagName, props, children);

const ul = h('ul', { id: 'list', style: 'color:red' }, [
  h('li', { class: 'item' }, ['Item 1']),
  h('li', { class: 'item' }, ['Item 2']),
  h('li', { class: 'item' }, ['Item 3'])
]);

// 渲染目标DOM
function render(node) {
  const element = document.createElement(node.tagName);
  element.id = node.props.id;
  element.style = node.props.style;

  for (let i = 0; i < node.children.length; i++) {
    const child = node.children[i];
    const childElement = render(child);
    element.appendChild(childElement);
  }

  return element;
}

const ulDom = render(ul);
console.log(ulDom);

连字转驼峰【美团一面】

1.split('-')

2.toUpperCase()

3.slice(1)

function transformString(input) {
  const words = input.split('-'); // 使用连字符分割字符串
  let result = '';

  for (let i = 0; i < words.length; i++) {
    if (i === 0) {
      result += words[i]; // 第一个单词保持不变
    } else if (words[i]) {
      result += words[i][0].toUpperCase() + words[i].slice(1); // 非空单词首字母大写
    }
  }

  return result;
}

// 示例用法
const inputString = '-font-size';
const transformedString = transformString(inputString);
console.log(transformedString); // 输出 'fontSize'

用友sp

一面【二选一】

数组相邻和最大的对应两个元素

千位分割【无负数,含小数】

function formatNumberWithCommas(number) {
    // 将数字转换为字符串
    const numStr = number.toString();
    
    // 判断是否为小数
    const isDecimal = numStr.includes('.');
    
    // 如果是小数,分割整数部分和小数部分
    let integerPart = numStr;
    let decimalPart = '';
    if (isDecimal) {
        [integerPart, decimalPart] = numStr.split('.');
    }
    
    // 使用贪心算法从右往左插入逗号
    let formattedInteger = '';
    let count = 0;
    for (let i = integerPart.length - 1; i >= 0; i--) {
        formattedInteger = integerPart[i] + formattedInteger;
        count++;
        if (count === 3 && i !== 0) {
            formattedInteger = ',' + formattedInteger;
            count = 0;
        }
    }
    
    // 如果有小数部分,添加回小数点和小数部分
    const formattedNumber = isDecimal
        ? formattedInteger + '.' + decimalPart
        : formattedInteger;
    
    return formattedNumber;
}

// 测试
const number1 = -1234567.89;
const number2 = 12345.67;
const number3 = 123456;
console.log(formatNumberWithCommas(number1)); // 输出 "-1,234,567.89"
console.log(formatNumberWithCommas(number2)); // 输出 "12,345.67"
console.log(formatNumberWithCommas(number3)); // 输出 "123,456"

二面

华容道:BFS

k / 3, y = k % 3; //一维数组下标转化到二维数组中的坐标

swap(t[k],t[a*3+b]);

distance 数组用于记录每个状态距离初始状态的步数。

在华容道问题中,每次移动一次,就相当于从一个状态转移到了另一个状态。

BFS的核心思想是从初始状态开始,逐步地将可能的状态加入队列,并记录每个状态距离初始状态经过的步数。

#include <iostream>
#include <algorithm>
#include <queue>
#include <unordered_map>
 
using namespace std;
 
int bfs(string start)
{
    string end = "12345678x";
    
    queue<string> q;
    unordered_map<string,int> d;
    
    q.push(start);
    d[start] = 0;
    
    int dx[] = {-1,0,1,0}, dy[] = {0,1,0,-1};
    
    //宽搜过程
    while(q.size())
    {
        auto t = q.front();
        q.pop();
        
        int distance = d[t];
        
        if(t == end) return distance;
        
        //状态转移
        //找到x的位置
        int k = t.find('x'); //返回x的下标
        int x = k / 3, y = k % 3; //一维数组下标转化到二维数组中的坐标
        
        //枚举上下左右四个方向
        for(int i = 0; i < 4; i ++ )
        {
            int a = x + dx[i], b = y + dy[i];
            if(a >= 0 && a < 3 && b >= 0 && b < 3)
            {
                swap(t[k],t[a*3+b]);
                
                if(!d.count(t)) //当前更新的状态没有搜到过
                {
                    d[t] = distance + 1; //更新当前距离
                    q.push(t); //把新的状态加到队列中
                }
                
                swap(t[k],t[a*3+b]); //状态恢复
            }
        }
    }
    
    return -1;
}
int main()
{
    string start;
    for(int i = 0 ; i < 9; i ++ )
    {
        char c;
        cin >> c;
        start += c;
    }
    
    cout << bfs(start) << endl;
    
    return 0;
}

版本号排序:【滴滴提前批】

// 假设有一个版本号数组
const versionNumbers = ["1.0.2", "1.1.0", "2.0.0", "1.0.1"];

// 定义一个比较函数来进行版本号排序
function compareVersions(versionA, versionB) {
    const partsA = versionA.split('.').map(Number);
    const partsB = versionB.split('.').map(Number);

    for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
        const partA = partsA[i] || 0;
        const partB = partsB[i] || 0;

        if (partA < partB) return -1;
        if (partA > partB) return 1;
    }

    return 0;
}

// 使用比较函数对版本号数组进行排序
const sortedVersions = versionNumbers.sort(compareVersions);

// 打印排序后的版本号数组
console.log(sortedVersions);

leetCode394字符串解码【地平线一面、金山笔试】

k[encoded_string]

表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数

示例1:

输入:s = "3[a]2[bc]"

输出:"aaabcbc"

示例2:

输入:s = "3[a2[c]]"

输出:"accaccacc"

输入:s = "2[abc]3[cd]ef"

输出:"abcabccdcdcdef"

A.正则表达式

var decodeString = function(s) {
    const regex = /\d+\[[a-zA-Z]+\]/g; // Match patterns like cnt[str]
    
    while (s.match(regex)) {
        s = s.replace(regex, (match) => {
            const cnt = parseInt(match.match(/\d+/)[0]); 
            const subStr = match.match(/[a-zA-Z]+/)[0];    
            return subStr.repeat(cnt);  // Repeat str cnt times
        });
    }
    
    return s;
};

B.递归

function flattenString(str) {
    let result = '';
    
    for (let i = 0; i < str.length; i++) {
        if (str[i] >= '0' && str[i] <= '9') { // 如果当前字符是数字
            let j = i;
            while (j < str.length && str[j] >= '0' && str[j] <= '9') j++; // 找到所有的数字字符
            let num = parseInt(str.substring(i, j)); // 转化为数字

            let count = 1; // 用于找到与当前左括号匹配的右括号
            let k = j + 1;
            while (k < str.length) {
                if (str[k] === '[') count++;
                else if (str[k] === ']') count--;

                if (count === 0) break;
                k++;
            }

            let innerStr = flattenString(str.substring(j + 1, k)); // 递归地处理方括号内的字符串
            while (num-- > 0) result += innerStr;

            i = k; // 移动索引位置
        } else if (str[i] !== '[' && str[i] !== ']') { // 忽略方括号
            result += str[i];
        }
    }

    return result;
}

C.栈

/**
 * @param {string} s
 * @return {string}
 */
var decodeString = function(s) {
    let subStr = '';
    const stack = [];
    
    for (const char of s) {
        if (char === ']') {
            let cur = stack.pop();
            
            // Build the subStr within the brackets
            while (cur !== '[') {
                subStr = cur + subStr;
                cur = stack.pop();
            }

            let num = '';
            cur = stack.pop();
            
            // Extract the repetition count
            while (!isNaN(cur)) {
                num = cur + num;
                cur = stack.pop();
            }
            
            // Put back any non-numeric characters
            if (cur !== undefined) {
                stack.push(cur);
            }

            // Repeat subStr and push it back onto the stack
            stack.push(subStr.repeat(parseInt(num, 10)));

            subStr = '';
        } else {
            stack.push(char);
        }
    }
    
    return stack.join('');
};

消除相邻同字符【地平线一面】

function eliminateAdjacentDuplicates(input) {
  const result = [];
  
  for (let i = 0; i < input.length; i++) {
    if (i === 0 || input[i] !== input[i - 1]) {
      result.push(input[i]);
    }
  }
  
  return result.join('');
}

const inputString = 'abccbbb';
const resultString = eliminateAdjacentDuplicates(inputString);
console.log(resultString); // 输出 'abcb'

龙湖一面

输入1返回0,输入0返回1

条件(三元)运算符

位运算(异或操作)

逻辑 NOT 运算符

减法

条件语句

数组映射

求和1-100的数组

等差数列

reduce

const array = Array.from({ length: 100 }, (_, i) => i + 1); // 创建包含1到100的数组

const sum = array.reduce((accumulator, currentValue) => accumulator + currentValue, 0);

console.log(sum); // 输出5050

拓展:等比数列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CISP—信息安全保障基础

0x00 前言 CTF 加解密合集CTF Web合集网络安全知识库溯源相关CISP汇总 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 0x01 信息安全概念 1.信息安全的定义 1.1 ISO 对安全的定义 为数据处理系统建立和采取技术、管理的安全保护&#xff0c;保护计算机硬件、软…

【论文解读】Faster sorting algorithm

一、简要介绍 基本的算法&#xff0c;如排序或哈希&#xff0c;在任何一天都被使用数万亿次。随着对计算需求的增长&#xff0c;这些算法的性能变得至关重要。尽管在过去的2年中已经取得了显著的进展&#xff0c;但进一步改进这些现有的算法路线的有效性对人类科学家和计算方法…

Flask狼书笔记 | 08_个人博客(下)

文章目录 8 个人博客8.4 初始化博客8.5 使用Flask-Login管理用户认证8.6 CSRFProtect实现CSRF保护8.7 编写博客后台小结 8 个人博客 8.4 初始化博客 1、安全存储密码 密码不要以明文的形式直接存储在数据库中&#xff0c;以防被攻击者盗取、泄露。一般的做法是&#xff0c;不…

XUbuntu22.04之查找进程号pidof、pgrep总结(一百九十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

服务器中了勒索病毒怎么办?勒索病毒解密,数据恢复

勒索病毒是一种比较常见的电脑病毒&#xff0c;它们给企业的生产经营和发展带来了很大的影响。可是绝大多数企业在这方面并没有做合理的预案&#xff0c;这也导致当安全运维人员或者企业主发现中了勒索病毒以后手足无措。那云天数据恢复中心就用这篇文章来告诉大家当服务器中了…

如何解决msvcp120.dll丢失问题,msvcp120.dll丢失的解决方法介绍

Microsoft Visual C Redistributable Packages&#xff08;简称MSVCRP&#xff09;是一组由微软提供的软件开发库&#xff0c;其中包含一系列用于运行使用Visual Studio开发的应用程序所需的运行时组件。MSVCRP包含了多个DLL文件&#xff0c;其中MSVCP120.dll就是其中之一。这个…

Linux centos7创建文件

在系统中创建文件或目录&#xff0c;是最基本的操作&#xff0c;也是经常遇到的操作。本文仅关注普通文件的创建。 最简单的情况是创建一个空文件。但有时&#xff0c;根据实际情况&#xff0c;我们需要创建多个空文件&#xff0c;创建多个相同内容的文件&#xff0c;有时又可…

k8s集群中部署项目之数据库准备

k8s集群中部署微服务项目之数据库准备 一、navicat准备 二、 MySQL数据库连接 lb.kubesphere.io/v1alpha1: openelb protocol.openelb.kubesphere.io/v1alpha1: layer2 eip.openelb.kubesphere.io/v1alpha2: layer2-eip三、 创建项目数据库及数据导入 3.1 mall_oms&#xff0…

【毕设选题】 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化

# 1 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通…

神经内科常用评估量表汇总,建议收藏!

根据神经内科医生的量表使用情况&#xff0c;我整理了10个常用的神经内科量表&#xff0c;可在线评测直接出结果&#xff0c;可转发使用&#xff0c;可生成二维码使用&#xff0c;可创建项目进行数据管理&#xff0c;有需要的小伙伴赶紧收藏&#xff01; 眩晕障碍量表 眩晕障碍…

【Java】有 A、B、C 三个线程,如何保证三个线程同时执行?在并发情况下,如何保证三个线程依次执行?如何保证三个线程有序交错执行?

Q1&#xff1a;有 A、B、C 三个线程&#xff0c;如何保证三个线程同时执行&#xff1f; public class ThreadSafeDemo {public static void main(String[] args) throws InterruptedException {int size 3;ThreadSafeDemo threadSafeDemo new ThreadSafeDemo();CountDownLat…

TypeScript扩展类型定义

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 什么是声明文件&#xff1f; declare 1. 声明全局变量&#xff1a; 2. 声明全局函数&#xff1a; 3. 声明全局类…

2023年最适合0基础上手的—学生管理系统制作,另赠福利:GUI学生管理系统源码

前言 嗨喽~大家好呀&#xff0c;这里是小曼呐 ❤ ~! 环境使用: python3.8解释器Pycharm 编辑器 可领取福利: GUI学生管理系统源码 代码展示 从学生信息数据库<文本文件>里面读取数据 f open(学生信息.txt, encodingutf-8) info_list f.readlines()创建一个空列表 …

代码随想录算法训练营第48天|198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

ubuntu 安装截图软件 flameshot 和微信 electronic-wechat

目录 一、截图工具flameshot 二、微信electronic-wechat 2.1 法一 2.2 法二 一、截图工具flameshot linux安装flameshot 1、去github下载对应deb版本 Releases flameshot-org/flameshot GitHub 2、先更新一次依赖 sudo apt-get install -f 3、安装依赖 # Compile-t…

OceanBase杨传辉传递亚运火炬:国产数据库为“智能亚运”提供稳稳支持

9 月 14 日&#xff0c;亚运火炬传递到了浙江台州&#xff0c;OceanBase 的 CTO 杨传辉作为火炬手交接了第 89 棒火炬。 2010 年&#xff0c;杨传辉作为创始成员之一参与自研原生分布式数据库 OceanBase。十年磨一剑&#xff0c;国产数据库 OceanBase 交出了一张优秀的成绩单&a…

JavaScript Iterator 迭代器:简化集合遍历的利器

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 引言 1. 迭代器的概念 2. 迭代器的属性 3. 迭代器的应用场景 3.1 数组遍历 3.2 对象遍历 3.3 Map 遍历 #3.4…

pandas-profiling一键生成探索性数据分析报告

安装库 1、先升级pip python.exe -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple 2、安装pandas-profiling pip install pandas-profiling -i https://pypi.tuna.tsinghua.edu.cn/simple 代码演示 # 导入相关库 import numpy as np import pand…

端游防截帧解决方案

对于一款游戏而言&#xff0c;玩家第一眼关注到的美术表现&#xff0c;会在很大程度上决定了玩家是否会产生兴趣并继续了解游戏内容。想要在激烈的市场竞争中占据一席之地&#xff0c;游戏美术的重要程度已不言而喻。 如被奉为“国产3A游戏之光”的《黑神话&#xff1a;悟空》…

由于找不到vcruntime140_1.dll文件的解决方法,带你了解vcruntime140_1.dll这个dll

vcruntime140_1.dll是Microsoft Visual C Redistributable for Visual Studio 2019的动态链接库文件之一。它提供了许多基本的运行时功能&#xff0c;使得使用Visual Studio 2019编译的应用程序能够正常运行。然而&#xff0c;在运行或启动一些应用程序时&#xff0c;可能会出现…