其他分享
首页 > 其他分享> > 2022-3-21 剑指offer day38

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