持续输出第5篇-(数组算法)

389 阅读1分钟

我们该掌握的算法:

数组篇

1,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

var twoSum = function(nums, target) {
  let map = {};
  for(let i=0;i<nums.length;i++){
      let n = target-nums[i];
      let hasVal = map.hasOwnProperty(n);
      if(hasVal){
          return [map[n],i]
      }
      map[nums[i]] = i;
  }
  return []
};

知识点:地图函数

2,给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例:

输入: 123 输出: 321

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−2^31, 2^31− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    const maxVal = Math.pow(2,31) - 1;
    const minVal = Math.pow(-2,31);
    const flag = x > 0 ? true : false;
    // 全部转化成正数进行比较
    x = flag ? x : -x;
    x = +(x.toString().split('').reverse().join(''));
    x = flag ? x : -x;
    // 比较反转之后的数字是否溢出
    if(x > maxVal || x < minVal) return 0;
    return x;
};
let x = 120;
let result = reverse(x);
console.log(result);

复杂度分析 时间复杂度: O(N) 空间复杂度: O(1)