2022-3-21 剑指offer day38
作者:互联网
题1:
JZ49 丑数
描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第 n个丑数。 数据范围:0 \le n \le 20000≤n≤2000 要求:空间复杂度 O(n)O(n) , 时间复杂度 O(n)O(n)1 import java.util.*; 2 public class Solution { 3 public int GetUglyNumber_Solution(int index) { 4 // 2^1 3^1 5^1 5 if (index==0) return 0; 6 PriorityQueue<Integer> queue=new PriorityQueue<>(); 7 queue.offer(1); 8 int count=1; 9 while (count<index) { 10 int t=queue.poll(); 11 if (!queue.contains(2*t)&&2*t>0){ 12 queue.offer(2*t); 13 } 14 if (!queue.contains(3*t)&&3*t>0){ 15 queue.offer(3*t); 16 } 17 if (!queue.contains(5*t)&&5*t>0){ 18 queue.offer(5*t); 19 } 20 count++; 21 } 22 return queue.poll(); 23 } 24 }
思路:优先队列对生成的丑数排序,再通过丑数生成下一个丑数。
题2:
JZ74 和为S的连续正数序列
描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? 数据范围:0 < n \le 1000<n≤100进阶:时间复杂度 O(n)O(n)
返回值描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序1 import java.util.ArrayList; 2 public class Solution { 3 public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { 4 // 1-n (n+1)*n/2 5 ArrayList<ArrayList<Integer>> ans=new ArrayList<>(); 6 for (int i=0;i<=sum/2;i++) { 7 for (int j=i+1;j<=sum/2+1;j++) { 8 if (j*(j+1)/2-i*(i+1)/2==sum) { 9 ArrayList<Integer> list=new ArrayList<>(); 10 for (int k=i+1;k<=j;k++) list.add(k); 11 if (list.size()>=2) ans.add(list); 12 }else if (j*(j+1)/2-i*(i+1/2)>sum){ 13 break; 14 } 15 } 16 } 17 return ans; 18 } 19 }
思路:利用求和公式计算序列和。
标签:丑数,21,day38,offer,int,ArrayList,queue,2022,序列 来源: https://www.cnblogs.com/benbicao/p/16034262.html