`
xtuhcy
  • 浏览: 142637 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

算法3

    博客分类:
  • java
阅读更多

A non-negative integer is called heavy if the average value of its digits in decimal representation exceeds 7. Assume that 0 has an average value of its digits equal to 0.

For example, the number 8,698 is heavy because the average value of its digits is (8+6+9+8)/4 = 7.75. The number 53,141 has an average value of its digits of (5+3+1+4+1)/5 = 2.8, so it is not heavy.

Write a function:

class Solution { public int heavy_decimal_count(int A,int B); }

that, given two non-negative integers A and B, returns the number of heavy integers within the interval [A..B] (both ends included).

Assume that:

  • A is an integer within the range [0..200,000,000];
  • B is an integer within the range [0..200,000,000];
  • A ≤ B.

For example, given A=8,675 and B=8,689 the function should return 5, because there are five heavy integers within the range [8,675..8,689]:

 

8675    avg=6.50
8676    avg=6.75
8677    avg=7.00
8678    avg=7.25    HEAVY
8679    avg=7.50    HEAVY
8680    avg=5.50
8681    avg=5.75
8682    avg=6.00
8683    avg=6.25
8684    avg=6.50
8685    avg=6.75
8686    avg=7.00
8687    avg=7.25    HEAVY
8688    avg=7.50    HEAVY
8689    avg=7.75    HEAVY

 

Complexity:

  • expected worst-case time complexity is O((log(A)+log(B))3);
  • expected worst-case space complexity is O(log(A)+log(B)).

 

 

这个不确定,高手可以指教。

方案一:

public int heavy_decimal_count(int A,int B) {
  int result = 0;
  int n = B - A;
  for(int i = 0; i <= n; i++) {
   int t = A + i;
   if(t == 0) {
    continue;
   }
   int w = 0;
   double sum = 0;
   while(t > 0) {
    sum += (t % 10);
    t = t / 10;
    w++;
   };
   
   if((sum / w) > 7) {
    result++;
   }
  }
  return result;
 }

 

方案二:

public int heavy_decimal_count(int A,int B) {
  int result = 0;
  
  int x = A;
  double sum = 0;
  
  Vector<Integer> v = new Vector<Integer>(9);
  
  if(x == 0) {
   v.add(0);
  } else {
   while(x > 0) {
    int ys = (x % 10);
    v.add(ys);
    sum += ys;
    x = x / 10;
   };
   if(sum / v.size() > 7) {
    result++;
   }
  }
  
  
  int n = B - A;
  for(int i = 1; i <= n; i++) {
   int jw = 0;
   for(int j = 0; j < v.size(); j++) {
    if(v.get(j) + 1 == 10) {
     v.set(j, 0);
     jw++;
     if(jw < v.size()) {
      continue;
     } else {
      v.add(1);
     }
    } else {
     v.set(j, v.get(j) + 1);
    }
    break;
   }
   sum = sum - (9 * jw) + 1;//这个是关键,不需要每次循环求和,而是根据上一个数的结果得到下一个数的结果,其中jw表示相当上一个数,当前数做了几次进位操作
   if(sum / v.size() > 7) {
    result++;
   }
  }
  return result;
 }

分享到:
评论

相关推荐

    C++算法 图算法 第3版 part1

    C++算法 图算法 第3版

    java算法全卷(包括基本算法和图算法)

    3. Dijkstra算法:单源最短路径算法,适用于有权图,但不考虑负权重边。 4. Bellman-Ford算法:处理含有负权重边的单源最短路径问题。 5. Ford-Fulkerson算法:用于求解最大流问题,常用于网络流量分配。 6. Kruskal...

    3维RRT避障路径规划算法

    三维RRT( Rapidly-exploring Random Trees,快速探索随机树)...对于给定的压缩包文件“3维避障RRT算法”,很可能包含了实现这一算法的代码示例、仿真结果或者其他相关资料,可以帮助我们更深入地理解和应用这个算法。

    pytorcha3c是A3C算法的一个PyTorch实现

    pytorch-a3c是A3C算法的一个PyTorch实现。A3C算法是2015年DeepMind提出的相比DQN更好更通用的一个深度增强学习算法。A3C算法完全使用了Actor-Critic框架,并且引入了异步训练的思想,在提升性能的同时也大大加快了...

    CCD算法3D模拟程序源码

    一个IK的CCD算法在3D空间中的实现,非常好用

    最小二乘算法总结(算法+程序)

    1.1. 一次计算最小二乘算法 3 1.2. 递推最小二乘算法 3 2. 遗忘因子最小二乘算法 6 2.1. 一次计算法 6 2.2. 递推算法 6 3. 限定记忆最小二乘递推算法 9 4. 偏差补偿最小二乘法 11 5. 增广最小二乘法 13 6. 广义最小...

    智能算法详细ppt课件(遗传算法,模拟退火,禁忌搜索)

    在"第四章__遗传算法1.ppt"至"第四章__遗传算法3.ppt"中,详细介绍了遗传算法的原理、步骤和实际应用,如旅行商问题、组合优化等问题的求解。 **模拟退火算法(Simulated Annealing, SA)**是受到固体物理中材料...

    动态规划,分治算法,概率算法,模拟退火算法,搜索算法,贪婪算法,网上matlab,遗传算法,组合算法

    3. **概率算法**:这类算法在决策过程中引入随机性,通过概率模型和统计分析来解决问题。例如,蒙特卡洛方法就是一种常见的概率算法,用于解决数学和物理问题,如计算圆周率或求解最短路径问题。 4. **模拟退火算法...

    社区划分算法的python3实现, 包括KL算法、 COPAR、Louvain 算法、LFM算法、InfoMap算法等

    在这个Python3实现的压缩包中,包含了多种社区划分算法,包括KL算法、COPAR、Louvain算法、LFM算法以及InfoMap算法。这些算法各有特点,下面我们将详细探讨它们的原理和应用。 1. KL算法(Kernighan-Lin算法): ...

    纵横交叉算法纵横交叉算法2023

    纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能算法 纵横交叉算法纵横交叉算法新型的群智能...

    遗传算法原理与应用(详细介绍的PPT)

    3、遗传算法的特点 二、遗传算法原理 1、遗传算法的数学基础 2、遗传算法的收敛性分析 3、遗传算法的改进 三、遗传算法的应用 (1)组合优化 (2)函数优化 (3)自动控制 (4)生产调度 (5)图像处理 (6)...

    粒子群算法、遗传算法以及两者的结合的优化算法

    粒子群算法(Particle Swarm Optimization, PSO)与遗传算法(Genetic Algorithm, GA)是两种在优化问题中广泛应用的全局搜索方法。它们都是基于自然选择和群体智能的启发式算法,能够有效地解决复杂多模态优化问题...

    模型算法大全(20+种常用算法模型+代码实现)

    模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+...

    pythonMOPSO多目标粒子群优化算法 多目标优化算法

    【python】MOPSO多目标粒子群优化算法 多目标优化算法 【python】MOPSO多目标粒子群优化算法 多目标优化算法 【python】MOPSO多目标粒子群优化算法 多目标优化算法 【python】MOPSO多目标粒子群优化算法 多目标优化...

    SM3算法原理

    SM3算法原理,朋友亲自整理的,供大家交流学习。

    智能优化算法--遗传算法 模拟退火 禁忌搜索 蚁群算法等

    本文将深入探讨四种主要的智能优化算法:遗传算法、模拟退火算法、禁忌搜索和蚁群算法,以及这些算法的原理、应用场景和发展趋势。 **一、遗传算法** 遗传算法是受生物进化理论启发的一种全局优化方法,它通过模拟...

    KMP算法算法 KMP算法 KMP

    算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP

    基于matlab实现的RRT算法、双向RRT算法、A*算法、PRM、模糊路径规划算法、遗传算法路径规划

    3. **PRM(概率道路图)算法**:PRM预先在环境空间中随机采样一系列节点,然后建立节点之间的连边,形成一个图。当规划路径时,PRM会在图中寻找一条从起点到终点的最短路径。PRM算法能够处理大型环境和高维问题,但...

    常用算法pascal-ppt课件

    常用算法 1、穷举法 2、排序算法 3、不同进制数的转换及应用 4、高精度计算 5、回溯算法 6、递推法 7、排列和组合 8、动态规划基础

    Java算法集题大全.zip

    Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法...

Global site tag (gtag.js) - Google Analytics