程序员面试金典——第K个数

xiaoxiao2021-02-27  242

题目描述

有一些数的素因子只有3、5、7,请设计一个算法,找出其中的第k个数。

给定一个数int k,请返回第k个数。保证k小于等于100。

测试样例: 3 返回:7 思路: /*       * 时间复杂度O(N),按书中所讲,3个素数因子3、5、7分为三个队列 q3,q5,q7,其中最初存放3,5,7       * 之后每次添加找到三个队列头中最小的数,起初为3,将3移出队列 q3后,在q3添加3*3,在q5添加3*5,q7中添加3*7       * 此时可知q3{3*3},q5{5,3*5},q7{7,3*7}       * 下一轮找到最小数为5,重复上述步骤,将5从q5移出,添加5*5到 q5,因为5*3已经添加过所以不需要添加到q3中       * 将5*7添加到q7,结果q3{3*3},q5{3*5,5*5},q7{7,3*7,5*7}       * 依次找到第k个数       */ import java.util.*; public class KthNumber { public int findKth(int k) { // write code here Queue<Integer> que3 =new LinkedList<>(); Queue<Integer> que5 =new LinkedList<>(); Queue<Integer> que7 =new LinkedList<>(); que3.offer(3); que5.offer(5); que7.offer(7); int index = 1; int num =3; while(index<=k){ //取出三个队列中最小值 num = Math.min(Math.min(que3.peek(), que5.peek()), que7.peek()); if(num==que3.peek()){ que3.poll(); que3.offer(num*3); que5.offer(num*5); que7.offer(num*7); }else if (num==que5.peek()) { que5.poll(); que5.offer(num*5); que7.offer(num*7); }else { que7.poll(); que7.offer(num*7); } index++; } return num; } }
转载请注明原文地址: https://www.6miu.com/read-7202.html

最新回复(0)