这题三指针应该不好想把,怎么算是暴力呢。我是做过leetcode的这一题所以对三指针有印象,然而做的时候还是卡了好半天。
两个问题,
1:为什么数组创建之后不能用{}花括号的数据来赋值数组,书上说是不匹配数组名是指针类型,可是编译器优化一下不行吗,和初始化时用花括号没什么区别吧。这样一个个赋值好麻烦的
2:我又自作聪明了,以为只要3,5,7这3个指针不指向3,5,7这3个数就不会出现相等的情况,导致没有判断相等代码出现死循环了。后面想了一下,比如3只要指向了一个丑数a,且这个丑数有一个因子是5,把这个因子换成3得到b=3a/5也是一个丑数,那么3a和5b也是会相等的。像下面我学习别人的代码一样,相等就都往后指一个就行了。
import java.util.Scanner;
public class Main {
static long[] data=new long[10000000];
static int res=2;
public static void main(String[] args) {
int tag=0;
data[0]=7;
data[1]=9;
data[2]=15;
data[3]=21;
data[4]=25;
data[5]=27;
data[6]=35;
data[7]=45;
int pi=3,pj=2,pk=0,index=8;
while (true){
long temp1=data[pi]*3,temp2=data[pj]*5,temp3=data[pk]*7;
long min=Math.min(temp1,Math.min(temp2,temp3));
if (min==temp1)pi++;
if (min==temp2)pj++;
if (min==temp3)pk++;
if ((data[index++]=min)==59084709587505l)break;
}
System.out.println(res+index);
// Scanner scanner=new Scanner(System.in);
}
}