首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >牛博士的是不是‘4’数列

牛博士的是不是‘4’数列

作者头像
RobinsonZhang
发布2018-08-28 13:04:25
3090
发布2018-08-28 13:04:25
举报

场景

小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]…, A[N]}。 牛博士给小易出了一个难题: 对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N – 1)都是4的倍数。 小易现在需要判断一个数列是否可以重排之后满足牛博士的要求。

输入描述

输入的第一行为数列的个数t(1 ≤ t ≤ 10), 接下来每两行描述一个数列A,第一行为数列长度n(1 ≤ n ≤ 10^5) 第二行为n个正整数A[i](1 ≤ A[i] ≤ 10^9)

输出描述

对于每个数列输出一行表示是否可以满足牛博士要求,如果可以输出Yes,否则输出No。

输入例子1: 1 10 100

输出例子 yes

解题思路

首先绝对不要被逻辑绕进去,我们不用具体去排列,考虑怎么排,只要考虑如果队列符合要求,那么需要把什么数字来满足什么数字的需求。

简单分析之后 ,得到如下的三类数字。 1 不能被2整除也不能被4整除的,这种数必须有一个被4整除的紧邻才能符合要求 2 只能被2整除不能被4整除,这种有个特点就是连续的两个被2整除的排列时也能符合要求 3 能被4整除的,这种放在任何位置都是允许的

代码如下

let judgeFourArr=(arr)=>{
  let twoCount=0,zCount=0,fouCount=0,judge=false
  arr.map((ele,inex,arr)=>{
     if(ele%2==0&&ele%4!=0){
       twoCount++
     }else if(ele%4==0){
       fouCount++
     }else{
       zCount++
     }
  })
  if(fouCount+1>=(zCount+twoCount)||(fouCount>=zCount&&twoCount>0)){
     judge=true
    }
   return judge?'yes':'no'
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-282,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景
    • 输入描述
      • 输出描述
      • 解题思路
      • 代码如下
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档