数学的题(2021-7-15)

这篇博客介绍了两种算法实现:一是计算第n个丑数的解决方案,利用三个指针维护2、3、5的幂次作为候选丑数;二是模拟孩子们游戏的场景,通过链表操作找出环形链表中最后剩下的数。这两题都涉及到高效的数据结构和算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.丑数

public class Solution{
  public int GetUglyNumber_Solution(int index){
     if(index<=0)  return 0;
     int p2=0,p3=0,p5=0;//初始化三个指向三个潜在成为最小丑数的位置
     int[] result=new int[index];
     result[0]=1;
     for(int i=1;i<index;i++){
        result[i]=Math.min(result[p2]*2,Math.min(result[p3]*3,result[p5]*5));
        if(result[i]==result[p2]*2)p2++;
        if(result[i]==result[p3]*3)p3++;
        if(result[i]==result[p5]*5)p5++;
     }
     return result[index-1];
  }
}
思路:1.先指定三个最小的丑数([p2]*2,[p3]*3,[p5]*5;
      2.定义一个数组结果集 int[] result=new int[index];
      3.遍历数组,result=Math.min([p2]*2,[p3]*3,[p5]*5)为最后的丑数结果集。
      4.分别求出其他丑数:      
      result[i]==result[p2]*2;result[i]==result[p3]*3;result[i]==result[p5]*5;
      丑数=2^x3^y5^z;(只需要把得到的丑数不断乘以235后按顺序放入)
      有序的放入为难点:1.要维持三个指针来记录当前乘以2、乘以3、乘以5的最小值,然后当其选为最小值后,把相应的指针+1;
      数组中的每一个值都会被乘以2、乘以3、乘以5,只不过不是同时乘以235,而是在需要的时候乘。

2.孩子们的游戏(圆圈中最后剩下的数)

import java.util.*;
public class Solution{
   public int LastRemaining_Solution(int n,int n){
   //用list模拟循环链表,并用一个索引cur指向删除的位置,当cur的值为list的size,就让cur到头位置
   if(n<1||m<1){
      return -1;
   }
   //构建list
   List<Integer> list=new ArrayList<>();
   for(int i=0;i<n;i++){//遍历
      list.add(i);
   }
   int cur=-1;
   while(list.size()>1){
   for(int i=0;i<m;i++){
        cur++;
        if(cur==list.size()){
          cur=0;
        }
   }
    list.remove(cur);//链表删除索引指定的数
    cur--;//cur--的原因,因为新的list中cur指向了下一个元素,为了保证移动m个准确性,向前移一位。
   }
   return list.get(0);
   }
}
思路:
1.先用list模拟环形链表List<Integer> list=new ArrayList<>();
2.然后将人数n添加到链表里;
3.然后遍历指定的数,指针移动到指定的数。
  如果指针遍历完整个链表,cur=0.

3.求1+2+3+…+n

public class Solution{
   public int Sum_Solution(int n){
   //使用递归
   int sum=n;
   boolean result=(n>0)&&((sum+=Sum_Solution(n-1))>0);
   return sum;
   }
}
因为求和公式:sum=[(1+n)*n]/2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值