判断数组是否能够调整成任意两个数相乘是否是4的倍数

214 阅读1分钟

题目

判断数组是否能够调整成任意两个数相乘是否是4的倍数

  • 首先求出所有的奇数个数,然后求出所有只包含1个2因子的数和所有包含4因子的数(和只包含1个2因子互斥关系)的个数
  • 如果没有只包含1个2因子的数,摆法为[奇,4,奇,4,...]
  • 如果有包含1个2因子的数,摆法为[2,2,...,4,奇,4,奇,...]

image.png

function process(arr) {
  let odd = 0,
    only2 = 0,
    have4 = 0;

  for (let i = 0; i < arr.length; i++) {
    const temp = arr[i];
    if (temp % 2 !== 0) {
      odd++;
    } else {
      if (temp === 0) {
        continue;
      }
      if (temp % 4 === 0) {
        have4++;
      } else {
        only2++;
      }
    }
  }

  if (only2 === 0) {
    if (odd === 1) {
      if (have4 >= 1) {
        return true;
      } else {
        return false;
      }
    } else if (odd > 1) {
      if (have44 >= odd - 1) {
        return true;
      } else {
        return false;
      }
    }
  } else {
    if (have4 >= odd) {
      return true;
    } else {
      return false;
    }
  }
}