const egg=[1,1,1,1,1,1,1,1,-1,1,1,1];
const sum=(arr)=>arr.reduce((i,j)=>i+j)
const bad=(badEgg,i,flag)=>{
// 坏鸡蛋出现在第i组
// flag表示坏鸡蛋大于还是小于好鸡蛋,大于为true
// 坏鸡蛋大于好鸡蛋时m为0,n为1
// 坏鸡蛋小于好鸡蛋时j为1,n为0
let m=flag?0:1
let n=flag?1:0
if (badEgg[m]>badEgg[n]) {
return 0+3*(i-1)
}else if(badEgg[m]<badEgg[n]){
return 1+3*(i-1)
}else{
return 2+3*(i-1)
}
};
/**
* @description: 3次对比机会,得到12颗鸡蛋中坏的那一颗在哪?
* @param {array} egg 所有鸡蛋
* @return {number} 坏鸡蛋下标
*/
const badEgg=(egg)=>{
const egg1=egg.slice(0,3)
const egg2=egg.slice(3,6)
const egg3=egg.slice(6,9)
const egg4=egg.slice(9,12)
// 判断坏鸡蛋在哪组里
// 坏鸡蛋在1,2组
if (sum(egg1)>sum(egg2)) {
// 如果坏鸡蛋在第1组,只可能坏鸡蛋的重量大于好鸡蛋
if (sum(egg1)>sum(egg3)) {
return bad(egg1,1,true)
}
// 坏鸡蛋在第2组
if (sum(egg2)<sum(egg3)) {
return bad(egg2,2,false)
}
}
if(sum(egg1)<sum(egg2)){
// 坏鸡蛋在第1组
if (sum(egg1)<sum(egg3)) {
return bad(egg1,1,false)
}
// 坏鸡蛋在第2组
if (sum(egg2)>sum(egg3)) {
return bad(egg2,2,true)
}
}
// 坏鸡蛋在3,4组
if (sum(egg3)>sum(egg4)) {
// 如果坏鸡蛋在第3组,只可能坏鸡蛋的重量大于好鸡蛋
if (sum(egg3)>sum(egg1)) {
return bad(egg3,3,true)
}
// 坏鸡蛋在第4组
if (sum(egg4)<sum(egg1)) {
return bad(egg4,4,false)
}
}
if(sum(egg3)<sum(egg4)){
// 坏鸡蛋在第3组
if (sum(egg3)<sum(egg1)) {
return bad(egg3,3,false)
}
// 坏鸡蛋在第4组
if (sum(egg4)>sum(egg1)) {
return bad(egg4,4,true)
}
}
}
console.log(badEgg(egg));
var isValid = function (s) {
let stack = [],
map = {
'(': ')',
'{': '}',
'[': ']',
};
for (let i = 0; i < s.length; i++) {
if (map[s[i]]) {
stack.push(s[i]);
} else if (s[i] !== map[stack.pop()]) {
return false;
}
}
return stack.length === 0;
};
var mergeTwoLists = function(l1, l2) {
if (!l1) return l2;
if (!l2) return l1;
var head = null;
if (l1.val < l2.val) {
head = l1;
head.next = mergeTwoLists(l1.next, l2)
} else {
head = l2;
head.next = mergeTwoLists(l2.next, l1)
}
return head
};
var reverseList = function(head) {
let cur=head
let pre=null
while(cur){
const next=cur.next
cur.next=pre
pre=cur
cur=next
}
return pre
};
const isN=()=>{
let res=[]
let flag=true
A:for(let j=2;j<=100;j++){
flag=true
B:for(let i=2;i<=Math.sqrt(j);i++){
if(j%i===0){
flag=false
break B;
}
}
if (flag) {
res.push(j)
}
}
return res
}
let a = "9007199254740991";
let b = "1234567899999999999";
function add(a, b) {
let maxLength=Math.max(a.length,b.length)
a=a.padStart(maxLength,'0')
b=b.padStart(maxLength,'0')
let res=[]
let i=maxLength,j=0
while(i--){
const sum=parseInt(a[i])+parseInt(b[i]);
if (sum+j>=10) {
res[i]=(sum+j)%10
j=Math.floor((sum+j)/10)
}else{
res[i]=sum+j
j=0
}
}
if (j > 0) {
res.unshift(j);
}
return res.join('')
}
console.log(add(a,b));//1243575099254740990
function moveZero(arr){
let i=0
let j=0
while(j<arr.length){
if(arr[i]!==0){
i++
}else if(arr[j]!==0){
[arr[i],arr[j]]=[arr[j],arr[i]]
i++
}
j++
}
return arr
}
console.log(moveZero([0,1,0,3,12])); // [ 1, 3, 12, 0, 0 ]
var entry = {
a: {
b: {
c: {
dd: 'abcdd'
}
},
d: {
xx: 'adxx'
},
e: 'ae'
}
}
// 要求转换成如下对象
var output = {
'a.b.c.dd': 'abcdd',
'a.d.xx': 'adxx',
'a.e': 'ae'
}
function isObject (obj) {
return Object.prototype.toString.call(obj) === '[object Object]'
}
function flatObj (obj, prefix = '', res = {}) {
for (let i in obj) {
let key = prefix ? prefix + '.' + i : i
isObject(obj[i]) ? flatObj(obj[i], key, res) : (res[key] = obj[i])
}
return res
}
a1, b1, c1, 20
a1, b1, c2, 5
a2, b1, c2, 10
[0, 1]
3
a1, b1, 25
a2, b1, 10