0223
思路:先计算出老板没控制自己的情绪时的满意数量sum,再根据X的值,维护一个滑动窗口
,遍历grumpy数组,计算增加的满意数量add,选取最大的一个,最后返回结果(sum+add)。
var maxSatisfied = function(customers, grumpy, X) {
let sum=0;
let add=0;
for(let i=0;i<customers.length;i++){
if(grumpy[i]==0){
sum+=customers[i];
}
}
//console.log(sum);
for(let i=0;i<grumpy.length;i++){
let x=X;
let j=i;
let temp=0;//设置一个临时变量,记录增加的值
while(x){//不能直接用X,因为后续会改变X值变为0
if(grumpy[j]==1){//此时的j为i的值,同上,不能直接用i
temp+=customers[j];
}
j++;
x--;
}
if(temp>add){
add=temp;//取结果较大的add
}
}
//console.log(add);
return sum+add;
};
0317
找出数组中第K大的数
function findMax(arr,K){
arr=[...new Set(arr)]
arr.sort((a,b)=>{return a-b;})
return arr[K-1];
}
console.log(findMax([5,1,2,4,4,8,11,13],2))
0318
给定若干个有限小数或者无限循环小数组成的求和表达式,请将小数转化为最简分数表示形式,并求和。
输入描述: 整数部分零不省略,小数部分中循环节用括号标记出来
输出描述:将表达式转换为最简分数形式,并求和
样例输入:2.00+0.46+0.25(285714)
样例输出:2+23/50+177/700=1899/700
let s='2.00+3.01+0.25(285714)'
// let s='2.00+0.46+1.25(285714)'
// let s='2.00+0.46'
let arr=s.split('+');
let left=[];//左边算式
let fenmuRec=[];//记录转为分数后的分母,便于求最小公倍数
for(let i=0;i<arr.length;i++){
let temp=arr[i].split('.');
toFenshu(temp);
}
let maxGys=maxGYS(fenmuRec);//最大公约数
// console.log(maxGys)
let fenziRight=fenziResult(left,maxGys);
let [a,b]=huajian(fenziRight,maxGys);
// console.log(left.join('+')+'='+fenziRight+'/'+maxGys)
console.log(left.join('+')+'='+a+'/'+b)
function toFenshu(temp){//转换为最简分数式
if(temp[1]==0){//整数
left.push(temp[0])
fenmuRec.push(1);
}
else{
if(temp[1].includes('(')){//无限循环小数
// console.log('无限循环小数')
let index1=temp[1].indexOf('(');
let index2=temp[1].indexOf(')');
let xiaoshu=temp[1].slice(0,index1);//正常小数部分
let xunhuan=temp[1].slice(index1+1,index2);//取出循环部分小数
let fenmu1=1;
let fenmu2='';
for(let i=0;i<xiaoshu.length;i++){
fenmu1*=10;
}
for(let j=0;j<xunhuan.length;j++){//循环数有几位,就除以几个9
fenmu2+='9';
}
//进行化简,就要得出循环小数此时的分子和分母
//如0.25(285714) => 285714/((999999)*100)+25/100
// => 285714+(25*999999)/((999999)*100)
//如1.25(285714) => 1+285714/((999999)*100)+25/100
// => (((999999)*100)+285714+(25*999999))(分子)
// => (999999)*100 (分母)
let fenmu=fenmu1*Number(fenmu2);
let fenzi=(Number(temp[0])*fenmu)+Number(xunhuan)+(xiaoshu*Number(fenmu2));
let [a,b]=huajian(fenzi,fenmu);
left.push(a+'/'+b)
fenmuRec.push(b);//记录分母,便于后期计算最小公倍数
}else{//有限小数
let fenmu=1;
for(let i=0;i<temp[1].length;i++){
fenmu*=10;
}
let fenzi=(temp[0]*fenmu)+Number(temp[1]);
let [a,b]=huajian(fenzi,fenmu);
left.push(a+'/'+b)
fenmuRec.push(b);//记录分母,便于后期计算最小公倍数
}
}
}
function huajian(fenzi,fenmu){//分式化简
for(let i=2;i<=Math.min(fenzi,fenmu);i++){//计算最简式分子分母
if((fenzi%i==0)&&(fenmu%i==0)){
fenzi/=i;
fenmu/=i;
i=1;
}
}
return [fenzi,fenmu];
}
function maxGYS(fenmuRec){//最大公约数
// console.log(fenmuRec)
let ret=Math.min.apply(null,fenmuRec);
// console.log(ret)
for(let i=0;i<fenmuRec.length;i++){
if((fenmuRec[i]%ret==0)&&fenmuRec[i]>ret){
ret=fenmuRec[i];
}
else{
ret*=fenmuRec[i];
}
}
return ret;
}
function fenziResult(left,maxGys){//求出最终结果的分
let fenzi=0;
for(let i=0;i<left.length;i++){
if(left[i].includes('/')){
let temp=left[i].split('/');
fenzi+=(maxGys/temp[1])*temp[0];
}else{
fenzi+=left[i]*maxGys;
}
}
return fenzi;
}
0319
二叉树!!!!
1、求二叉树深度(迭代)
function depth(root){
if(!root)return 0;
return Math.max(depth(root.left),depth(root.right))+1;
}
2、二叉树层序遍历
var levelOrder = function(root) {
let ret=[];
if(!root)return ret;
let quene=[root];
while(quene.length){
let levelarr=[];
let len=quene.length;
for(let i=0;i<len;i++){
let node=quene.shift();
// console.log(node);
levelarr.push(node.val);
// console.log(levelarr)
(node.left)&&quene.push(node.left);
(node.right)&&quene.push(node.right);
}
ret.push(levelarr);
}
return ret;
};
0321
var setZeroes = function(matrix) {
let copy=[];//设一个标志数组
for(let i=0;i<matrix.length;i++){
copy[i]=[];
for(let j=0;j<matrix[0].length;j++){
if(matrix[i][j]==0)copy[i][j]=0;//原数组为0的地方标记为0,作为后续判断条件
else copy[i][j]=1;//标记为1,表示可改
}
}
for(let i=0;i<matrix.length;i++){
for(let j=0;j<matrix[0].length;j++){
if(matrix[i][j]==0&©[i][j]==0){
const tempi=i,tempj=j;
for(let x=0;x<matrix[0].length;x++){
(copy[tempi][x])==1&&(matrix[tempi][x]=0)&&(copy[tempi][x]=0);//已更改为0,不能再次识别为0
}
for(let y=0;y<matrix.length;y++){
(copy[y][tempj])==1&&(matrix[y][tempj]=0)&&(copy[y][tempj]=0);//已更改为0,不能再次识别为0
}
}
}
}
return matrix;
};