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


    目录

    虚拟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【腾讯音乐笔试】

    1. class VNode {
    2. constructor(tagName, props, children) {
    3. this.tagName = tagName;
    4. this.props = props;
    5. this.children = children;
    6. }
    7. }
    8. const h = (tagName, props, children) => new VNode(tagName, props, children);
    9. const ul = h('ul', { id: 'list', style: 'color:red' }, [
    10. h('li', { class: 'item' }, ['Item 1']),
    11. h('li', { class: 'item' }, ['Item 2']),
    12. h('li', { class: 'item' }, ['Item 3'])
    13. ]);
    14. // 渲染目标DOM
    15. function render(node) {
    16. const element = document.createElement(node.tagName);
    17. element.id = node.props.id;
    18. element.style = node.props.style;
    19. for (let i = 0; i < node.children.length; i++) {
    20. const child = node.children[i];
    21. const childElement = render(child);
    22. element.appendChild(childElement);
    23. }
    24. return element;
    25. }
    26. const ulDom = render(ul);
    27. console.log(ulDom);

    连字转驼峰【美团一面】

    1.split('-')

    2.toUpperCase()

    3.slice(1)

    1. function transformString(input) {
    2. const words = input.split('-'); // 使用连字符分割字符串
    3. let result = '';
    4. for (let i = 0; i < words.length; i++) {
    5. if (i === 0) {
    6. result += words[i]; // 第一个单词保持不变
    7. } else if (words[i]) {
    8. result += words[i][0].toUpperCase() + words[i].slice(1); // 非空单词首字母大写
    9. }
    10. }
    11. return result;
    12. }
    13. // 示例用法
    14. const inputString = '-font-size';
    15. const transformedString = transformString(inputString);
    16. console.log(transformedString); // 输出 'fontSize'

    用友sp

    一面【二选一】

    数组相邻和最大的对应两个元素
    千位分割【无负数,含小数】
    1. function formatNumberWithCommas(number) {
    2. // 将数字转换为字符串
    3. const numStr = number.toString();
    4. // 判断是否为小数
    5. const isDecimal = numStr.includes('.');
    6. // 如果是小数,分割整数部分和小数部分
    7. let integerPart = numStr;
    8. let decimalPart = '';
    9. if (isDecimal) {
    10. [integerPart, decimalPart] = numStr.split('.');
    11. }
    12. // 使用贪心算法从右往左插入逗号
    13. let formattedInteger = '';
    14. let count = 0;
    15. for (let i = integerPart.length - 1; i >= 0; i--) {
    16. formattedInteger = integerPart[i] + formattedInteger;
    17. count++;
    18. if (count === 3 && i !== 0) {
    19. formattedInteger = ',' + formattedInteger;
    20. count = 0;
    21. }
    22. }
    23. // 如果有小数部分,添加回小数点和小数部分
    24. const formattedNumber = isDecimal
    25. ? formattedInteger + '.' + decimalPart
    26. : formattedInteger;
    27. return formattedNumber;
    28. }
    29. // 测试
    30. const number1 = -1234567.89;
    31. const number2 = 12345.67;
    32. const number3 = 123456;
    33. console.log(formatNumberWithCommas(number1)); // 输出 "-1,234,567.89"
    34. console.log(formatNumberWithCommas(number2)); // 输出 "12,345.67"
    35. console.log(formatNumberWithCommas(number3)); // 输出 "123,456"

    二面

    华容道:BFS

    k / 3, y = k % 3; //一维数组下标转化到二维数组中的坐标
    swap(t[k],t[a*3+b]);

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

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

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

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. int bfs(string start)
    7. {
    8. string end = "12345678x";
    9. queue q;
    10. unordered_mapint> d;
    11. q.push(start);
    12. d[start] = 0;
    13. int dx[] = {-1,0,1,0}, dy[] = {0,1,0,-1};
    14. //宽搜过程
    15. while(q.size())
    16. {
    17. auto t = q.front();
    18. q.pop();
    19. int distance = d[t];
    20. if(t == end) return distance;
    21. //状态转移
    22. //找到x的位置
    23. int k = t.find('x'); //返回x的下标
    24. int x = k / 3, y = k % 3; //一维数组下标转化到二维数组中的坐标
    25. //枚举上下左右四个方向
    26. for(int i = 0; i < 4; i ++ )
    27. {
    28. int a = x + dx[i], b = y + dy[i];
    29. if(a >= 0 && a < 3 && b >= 0 && b < 3)
    30. {
    31. swap(t[k],t[a*3+b]);
    32. if(!d.count(t)) //当前更新的状态没有搜到过
    33. {
    34. d[t] = distance + 1; //更新当前距离
    35. q.push(t); //把新的状态加到队列中
    36. }
    37. swap(t[k],t[a*3+b]); //状态恢复
    38. }
    39. }
    40. }
    41. return -1;
    42. }
    43. int main()
    44. {
    45. string start;
    46. for(int i = 0 ; i < 9; i ++ )
    47. {
    48. char c;
    49. cin >> c;
    50. start += c;
    51. }
    52. cout << bfs(start) << endl;
    53. return 0;
    54. }

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

    1. // 假设有一个版本号数组
    2. const versionNumbers = ["1.0.2", "1.1.0", "2.0.0", "1.0.1"];
    3. // 定义一个比较函数来进行版本号排序
    4. function compareVersions(versionA, versionB) {
    5. const partsA = versionA.split('.').map(Number);
    6. const partsB = versionB.split('.').map(Number);
    7. for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
    8. const partA = partsA[i] || 0;
    9. const partB = partsB[i] || 0;
    10. if (partA < partB) return -1;
    11. if (partA > partB) return 1;
    12. }
    13. return 0;
    14. }
    15. // 使用比较函数对版本号数组进行排序
    16. const sortedVersions = versionNumbers.sort(compareVersions);
    17. // 打印排序后的版本号数组
    18. 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.正则表达式

    1. var decodeString = function(s) {
    2. const regex = /\d+\[[a-zA-Z]+\]/g; // Match patterns like cnt[str]
    3. while (s.match(regex)) {
    4. s = s.replace(regex, (match) => {
    5. const cnt = parseInt(match.match(/\d+/)[0]);
    6. const subStr = match.match(/[a-zA-Z]+/)[0];
    7. return subStr.repeat(cnt); // Repeat str cnt times
    8. });
    9. }
    10. return s;
    11. };

    B.递归

    1. function flattenString(str) {
    2. let result = '';
    3. for (let i = 0; i < str.length; i++) {
    4. if (str[i] >= '0' && str[i] <= '9') { // 如果当前字符是数字
    5. let j = i;
    6. while (j < str.length && str[j] >= '0' && str[j] <= '9') j++; // 找到所有的数字字符
    7. let num = parseInt(str.substring(i, j)); // 转化为数字
    8. let count = 1; // 用于找到与当前左括号匹配的右括号
    9. let k = j + 1;
    10. while (k < str.length) {
    11. if (str[k] === '[') count++;
    12. else if (str[k] === ']') count--;
    13. if (count === 0) break;
    14. k++;
    15. }
    16. let innerStr = flattenString(str.substring(j + 1, k)); // 递归地处理方括号内的字符串
    17. while (num-- > 0) result += innerStr;
    18. i = k; // 移动索引位置
    19. } else if (str[i] !== '[' && str[i] !== ']') { // 忽略方括号
    20. result += str[i];
    21. }
    22. }
    23. return result;
    24. }

    C.栈

    1. /**
    2. * @param {string} s
    3. * @return {string}
    4. */
    5. var decodeString = function(s) {
    6. let subStr = '';
    7. const stack = [];
    8. for (const char of s) {
    9. if (char === ']') {
    10. let cur = stack.pop();
    11. // Build the subStr within the brackets
    12. while (cur !== '[') {
    13. subStr = cur + subStr;
    14. cur = stack.pop();
    15. }
    16. let num = '';
    17. cur = stack.pop();
    18. // Extract the repetition count
    19. while (!isNaN(cur)) {
    20. num = cur + num;
    21. cur = stack.pop();
    22. }
    23. // Put back any non-numeric characters
    24. if (cur !== undefined) {
    25. stack.push(cur);
    26. }
    27. // Repeat subStr and push it back onto the stack
    28. stack.push(subStr.repeat(parseInt(num, 10)));
    29. subStr = '';
    30. } else {
    31. stack.push(char);
    32. }
    33. }
    34. return stack.join('');
    35. };

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

    1. function eliminateAdjacentDuplicates(input) {
    2. const result = [];
    3. for (let i = 0; i < input.length; i++) {
    4. if (i === 0 || input[i] !== input[i - 1]) {
    5. result.push(input[i]);
    6. }
    7. }
    8. return result.join('');
    9. }
    10. const inputString = 'abccbbb';
    11. const resultString = eliminateAdjacentDuplicates(inputString);
    12. console.log(resultString); // 输出 'abcb'

    龙湖一面

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

    条件(三元)运算符

    位运算(异或操作)

    逻辑 NOT 运算符

    减法

    条件语句

    数组映射

    求和1-100的数组

    等差数列

    reduce

    1. const array = Array.from({ length: 100 }, (_, i) => i + 1); // 创建包含1到100的数组
    2. const sum = array.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
    3. console.log(sum); // 输出5050

    拓展:等比数列

  • 相关阅读:
    电脑端微信无法打开腾讯文档
    Redis:Redis配置文件相关配置、Redis的持久化
    chrome extension 普通网页与插件直接通信
    Ubuntu系统中tree的用法
    大一新生HTML期末作业 学生个人网页设计作业 HTML5响应式个人简历网站模板 web前端网页制作课作业
    Vue:状态管理pinia
    一小时快速上手win10 docker 、vscode、MobaXterm、git协作开发
    Java反射详解,还有什么理由学不会
    活动预告|“构建新安全格局”专家研讨会即将开幕
    爬虫 - CSS表达式
  • 原文地址:https://blog.csdn.net/qq_28838891/article/details/132890586