javascript 实现 最长公共前缀和最大子序和

1,172 阅读1分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

之前参加了沸点的每日算法题的活动,这是其中的两道题在此记录一下。(难度:简单)

最长公共前缀

题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""

示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2: 输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。

思路:
1、首先判断数组arr存在且不是空字符串,如果存在是否有2条及以上的元素

if (!arr[0] || arr[0] === null) return result;
if (arr.length === 1) return arr[0];

2、取第一个元素arr[0]遍历,然后元素的每一项与数组的其他元素进行对比

str[i] == arr[j][i]

3、当遍历到最后一位时就把相等的元素组合到一起

result += str[i];

下面是完整的代码:

function longestCommonPrefix(arr) {
      let result = '';
      if (!arr[0] || arr[0] === null) return result;
      if (arr.length === 1) return arr[0];
      const str = arr[0];
      let flag = 1;
      for (let i = 0; i < str.length; i++) {
        if (!arr[i + 1]) {
          return result;
        };
        for (let j = 1; j < arr.length; j++) {
          if (str[i] !== arr[j][i]) {
            return result;
          }
          flag++;
          if (flag === arr.length) { // 所有数组都遍历了后,才返回
            flag = 1;
            result += str[i];
          }
        }
      }
      console.log('result', result);
    }

最大子序和

题目描述:
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2: 输入:nums = [1] 输出:1

思路:
1、遍历数组nums,取相加之和sum,如果sum > 0 继续相加,否则 sum = nums[i]
2、每次遍历的时候变量ans取 ans 和 sum中较大的数 下面是完整的代码:

function maxSumArray(nums) {
      let ans = nums[0];
      let sum = 0;
      for(let i = 0; i < nums.length; i++) {
        if (sum > 0) {
          sum += nums[i];
        } else {
          sum = nums[i];
        }
        ans = Math.max(ans, sum);
      }
      return ans;
    }

来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/lo…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。