chatgpt教你练习前端算法

chatgpt教你练习前端算法_第1张图片

今天想试试chatgpt关于代码算法这一块儿是否好用。

判断质数

chatgpt教你练习前端算法_第2张图片
上面的代码有一点小问题,当num为2时,返回的结果是错误的,我改进了一下,并优化了一点性能

// 判断是否是素数(质数)
function isprime(number) {
  // 所有的负数,0,1都不是素数
  if (number <= 1) {
    return false;
  }

  // 素数总满足 6x + 1 或者 6x + 5, 除了3和2,因此反过来就可以排除掉不是素数的值
  if (number % 6 !== 1 && number % 6 !== 5 && number >= 5) {
    return false;
  }

  // 如果不是素数,那么一定有一个因数小于等于sqrt(number),一个因数大于等于sqrt(number),因此我们遍历判断就不必从1到number
  for (let i = 2; i < Math.sqrt(number) + 1; i++) {
    if (number % i === 0 && number !== 2) {
      return false;
    }
  }

  return true;
}

计算数的阶数

chatgpt教你练习前端算法_第3张图片
我改成了尾递归的方式

function factorial(number, acc = 1) {
  if (number <= 1) {
    return acc;
  }

  return factorial(number - 1, acc * number);
}

找出字符串出现最多的字符

chatgpt教你练习前端算法_第4张图片
看起来挺好,但没有考虑当两个字符串出现次数一样时,还有当字符串为空时的处理

// 返回一个字符串中出现字数最多的字符。
function mostChartFromString(string) {
  if (!string) {
    return "";
  }

  const object = {};
  let max = 0;
  let result = [];
  
  for (let char of string) {
    if (!object[char]) {
      object[char] = 1;
    } else {
      object[char] += 1;
    }

    if (object[char] > max) {
      max = object[char];
      result = [char];
    } else if (object[char] === max) {
      result.push(char);
    }
  }

  if (result.length === 1) {
    return result[0];
  } else {
    return result;
  }
}

转置矩阵

chatgpt教你练习前端算法_第5张图片
下面是我写的,但chatgpt更简洁一些。

// 转置矩阵 将二维数组的行变为列,将列变为行
function transposeMatrix(array) {
  // 行的数量就是二维数组中数组的数量
  const numberRows = array.length;
  // 列的数量则是二维数组中子数组的元素数量
  const numberCols = array[0].length;

  const newArray = [];

  // 之前有多少列,现在就构建多少个数组push到新数组中
  for (let i = 0; i <= numberCols - 1; i++) {
    const childArray = [];
    for (let j = 0; j <= numberRows - 1; j++) {
      // 新数组的第i行,就拿取旧数组每一行的第i列
      childArray.push(array[j][i]);
    }
    newArray.push(childArray);
  }

  return newArray;
}

实现一个函数 接受一个整数数组和一个目标整数,返回数组中两个数的下标,使得这两个数的和等于目标整数,例如:twoSum([2, 7, 11, 15], 9) 应该返回 [0, 1]。

chatgpt教你练习前端算法_第6张图片
我实现的方式和chargpt略有不同,我是通过两个相加等于目标数,chatgpt是用目标数去减,然后再在数组中检查是否能找到差,但chatgpt只能返回找到的第一组。

function twoSum(array, count) {
  const result = [];
  for (let i = 0; i < array.length; i++) {
    for (let j = i + 1; j < array.length; j++) {
      if (array[i] + array[j] === count) {
        result.push([i, j]);
      }
    }
  }

  if(result.length <= 1) {
    return result[0]
  } else {
    return result
  }
}

实现一个函数,接受一个二叉树的根节点作为输入,返回该二叉树的深度

chatgpt教你练习前端算法_第7张图片
chatgpt给出的代码没毛病,

function maxDepth(root) {
  if (!root) {
    return 0;
  }
  const leftDepth = maxDepth(root.left);
  const rightDepth = maxDepth(root.right);
  return Math.max(leftDepth, rightDepth) + 1;
}

总结

chatgpt返回的代码质量的确挺高,在开发过程中,可以直接让它提供代码示例或者demo,开发工程师只需要按照项目的具体要求对其进行改造即可,是一个不错的开发者助理。

也许未来chatgpt代码构建能力会远超人类。

你可能感兴趣的:(chatgpt,JavaScript)