100盏灯的问题,透彻分析源码

}else{

light[i-1] = 0;

}

}

}

}

//统计开灯数

for(int i = 0; i < light.length; i++){

if(light[i] == 1){

result ++;

}

}

System.out.println(“result===” + result);

*/

/*

  • 过对灯编号进行约数计数来降低复杂度,约数个数为奇数的灯最后是开着的,约数为偶数的灯是关着的

*/

for(int i = 1; i <= 100; i ++){

for(int j = 1; j < i; j++){

if(i % j == 0){

num[i-1]++;

}

}

}

for(int i = 0; i < 100; i ++){

if(num[i] %2 == 0){

result++;

}

}

System.out.println(“result===” + result);

}

}

问题延伸:如果是n盏灯,k个人呢

这里给出复杂度为O(k*n)的约数个数算法,这里的约数个数是指ni在1-k之间的约数个数,方法一复杂度也为O(k*n)。还没想到怎么优化,读者如果有想法,希望给点指点。

代码:

package com.ldw.test;

public class demo5 {

public static void main(String[] args){

Light light=new Light(10,5);

light.calculate();

System.out.println("===========");

Light light2=new Light(100,100);

light2.calculate();

}

}

class Light{

private int lightNum;

private int stuNum;

private int result = 0;

public Light(int lightNum, int stuNum){

this.lightNum = lightNum;

this.stuNum = stuNum;

}

public int getResult(){

return this.result;

}

public void calculate(){

//保存约数个数

int num[] = new int[this.lightNum];

//将数组初始化为0

for(int i = 0; i < num.length; i++){

num[i] = 0;

}

//计算每一个灯的约数个数

for(int i = 1; i <= this.lightNum; i++){

for(int j = 1; j <= this.stuNum; j ++){

if(i % j == 0){

num[i - 1]++;

}

}

}

for(int i = 0; i < num.length; i++){

最后

我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了5、6年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。

其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。

不断奔跑,你就知道学习的意义所在!

《Android高级架构师面试指导+2021大厂面试真题》免费领取

/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**

[外链图片转存中…(img-KMxPPYLb-1646378323324)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值