您的位置:

java算法题,java算法题有向无环图

本文目录一览:

Java简单算法问题

初步做了一个出来,但是效率并不是很高,前100个计算速度还可以,但是往后就很慢了。如果什么时候有空的话可以再看看,先给你代码吧,不知道能不能帮上你

public class AlisandaNumber {

private static final int MAX_INDEX = 1000; // 可以先把这个常量改为1-6,验证正确性

public static void main(String[] args) {

int a = 0;

int index = 0;

while(index  MAX_INDEX) {

a += 6; // 每次循环自增6,由题目规律可知A是6的倍数

boolean breakOut = false;

// 最大的约数为此数的平方根,因为如果是两个平方根相乘的话,剩下的就只有1了

int maxNum = (int) Math.ceil(Math.sqrt(a));

p:

for(int p = 1; p = maxNum; p ++) {

if(a % p != 0) {

continue; // 如果不是约数的话,没必要考虑,下同

}

// 最大约数为平方根的相反数,原理同上

maxNum = (int) Math.ceil(Math.sqrt(a / p));

for(int q = -1; q = -maxNum; q --) { // q和r必为负数

if(a % q != 0) {

continue;

}

int r = a / (p * q);

int nonZero = p * q + p * r + q * r;

if (nonZero == 0) {

continue;

}

if((a == p * q * r)  (a == (p * q * r) / (nonZero))) {

index ++;

breakOut = true;

break p; // 跳出外层循环

}

}

}

if(breakOut) {

System.out.println(String.format("第%d个压力山大数是%d", index, a));

}

}

}

}

Java算法题:判断并输出101-200中所有素数,代码中单等号与双等号的区别?

这是很基础的问题

单= 是赋值运算, 把后面的值赋值给前面的参数

双= 是关系运算, 比较前后两个参数是否相同

注意如果???处, 用单等, 就是赋值运算, 将ture 赋值 给 flag, 所以if中会一直是true, 也会一直执行if中的代码

双== 就是比较了啊, 结果是真 才会执行if中代码

java算法题

public class Monkey

{

public static void main(String[] args)

{

int sum=0,remain=1;

//每天吃剩的桃子加一个正好是前一天桃子的一半,每天桃子的总数就是前一天剩下桃子的数量

for(int day=9;day=1;day--)

{

sum=(remain+1)*2;

remain=sum;

System.out.println("第"+day+"天还剩"+remain+"个桃子");

}

System.out.println(sum);

}

}

一道java算法题提供了正确代码,不知道是不是我理解错误运行结果并不是最大值?

首先理解下题意,关键是连续的子数组,比如{1,2,-1} ,连续的子数组包括{1}、{2}、{-1}、{1,2}、{2,-1}、{1,2,-1}

其次是求各子数组和的最大值,上面的算法求最大值分两部分,循环遍历所有值

curSum :用于某一个子数组的累加和

curMaxSum:用于记录历史最大累加和

上面算法的start和end其实没用,本意是找出具体子数组,但上面算法部分情况下是无法实现的

@Test

public void test(){

//  int[] num = {1,-2,3,10,-4,7,2,-5};

//int[] num = {1,-2,3,10,-4,10,2,-5};

int[] num = {-1,-2,3,4,-5,-6,-7};

System.out.println(maxSum(num));

}

public int maxSum(int[] num){

int curSum = 0;

int curMaxSum = -99999999;

int finalStart = 0;

int finalEnd = 0;

int start = 0;

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

if(curSum=0){

curSum = num[i];

start = i;

}

else{

curSum += num[i];

}

if(curSumcurMaxSum){

finalStart = start;

finalEnd = i;

curMaxSum = curSum;

}

}

for(int i = finalStart;i=finalEnd;i++){

System.out.println(num[i]);

}

return curMaxSum;

}

java 一道算法题,阿里面试的题,我同学给我的,希望有人解答下?

HashMapString, Object ihp = new LinkedHashMapString, Object();

自定义一个类

static class MyMap

{

List[] lists;

public MyMap(List... lists)

{

this.lists = lists;

}

public String toString()

{

if (lists == null || lists.length == 0)

{

return "{}";

}

StringBuilder sb = new StringBuilder();

sb.append('{');

int i = 0;

for (List list: lists)

{

sb.append(list);

i++;

if (i == lists.length)

return sb.append('}').toString();

sb.append(",");

}

return "{}";

}

}

ihp.put("on1",new MyMap(list2,list1));

ihp.put("on2",new MyMap(list4,list3));

ihp.put("on3",new MyMap(list5));

ihp.put("on4",new MyMap(list6));

System.out.println(ihp.toString());

估计有更好的办法,最开始想到的是List[],发现打印出来是[[xxx,xxx,xxx],[xx,x,x]]这种结构