java算法求助(java算法教程)

本文目录一览:

Java简单算法问题

初步做了一个出来,但是效率并不是很高,前100个计算速度还可以,但是往后就很慢了。如果什么时候有空的话可以再看看,先给你代码吧,不知道能不能帮上你

public class AlisandaNumber {

private static final int MAX_INDEX = 1000; // 可以先把这个常量改为1-6,验证正确性

public static void main(String[] args) {

int a = 0;

int index = 0;

while(index  MAX_INDEX) {

a += 6; // 每次循环自增6,由题目规律可知A是6的倍数

boolean breakOut = false;

// 最大的约数为此数的平方根,因为如果是两个平方根相乘的话,剩下的就只有1了

int maxNum = (int) Math.ceil(Math.sqrt(a));

p:

for(int p = 1; p = maxNum; p ++) {

if(a % p != 0) {

continue; // 如果不是约数的话,没必要考虑,下同

}

// 最大约数为平方根的相反数,原理同上

maxNum = (int) Math.ceil(Math.sqrt(a / p));

for(int q = -1; q = -maxNum; q –) { // q和r必为负数

if(a % q != 0) {

continue;

}

int r = a / (p * q);

int nonZero = p * q + p * r + q * r;

if (nonZero == 0) {

continue;

}

if((a == p * q * r)  (a == (p * q * r) / (nonZero))) {

index ++;

breakOut = true;

break p; // 跳出外层循环

}

}

}

if(breakOut) {

System.out.println(String.format(“第%d个压力山大数是%d”, index, a));

}

}

}

}

java算法问题,请大神帮帮忙

其实都很容易的,关键是你要理解heap的含义。完整代码如下:

import java.io.BufferedReader;

import java.io.FileReader;

import java.util.Arrays;

import java.util.LinkedList;

import java.util.List;

public class Assessment1 {

public static void main(String[] args) {

// DO NOT EDIT THIS METHOD

Framework FW = new Framework();

FW.parseArgs(args);

int[] heap = FW.getHeap();

int testType = FW.getTestType();

Test test = new Test();

if (testType == 0) // Test for heap

FW.parseResult(test.isHeap(heap));

else if (testType == 1) // Test for smallest values

FW.parseResult(test.smallest3(heap));

}

}

/**

* This class allow for the safe initialisation of your code in the automated

* system You MUST NOT modify this class

*/

class Framework {

private int[] heap;

private int testType;

public int[] getHeap() {

return heap;

}

public int getTestType() {

return testType;

}

private void loadHeap(String filePath) {

ListInteger list = new LinkedListInteger();

try {

BufferedReader fR = new BufferedReader(new FileReader(filePath));

String tmp;

while ((tmp = fR.readLine()) != null) {

list.add(Integer.parseInt(tmp));

}

} catch (Exception e) {

e.printStackTrace();

System.out.println(“Data set missing!”);

System.exit(1);

}

heap = new int[list.size()];

int i = 0;

for (Integer val : list) {

heap[i] = val;

i++;

}

}

public void parseArgs(String[] args) {

String split[];

for (String arg : args) {

split = arg.split(“=”, 2);

if (split[0].equalsIgnoreCase(“-dataset”))

loadHeap(split[1]);

else if (split[0].equalsIgnoreCase(“-testtype”))

testType = Integer.parseInt(split[1]);

}

}

public void parseResult(boolean bool) {

if (bool == true)

System.out.println(1);

else

System.out.println(0);

}

public void parseResult(int[] intArray) {

boolean first = true;

for (int i : intArray) {

if (!first)

System.out.print(“,”);

else

first = false;

System.out.print(i);

}

}

}

class Test {

/**

* Will receive an integer heap array, method will return true or false

* depending on whether the array is believed to be a valid heap or not

*

* @param heap

* 0-based integer array

* @return true if integer array is a heap, else false

*/

public boolean isHeap(int[] heap) {

if(heap == null || heap.length == 0){

return false;

}

int[] ary = new int[heap.length];

for(int i = 0; i heap.length; i++){

ary[i] = heap[i];

}

Arrays.sort(ary);

for(int i = 0; i heap.length; i++){

if(ary[i] != heap[i]){

return false;

}

}

return true;

}

/**

* Will receive an integer heap array, method will return the 3 smallest

* values within the heap

*

* @param heap

* @return The smallest 3 elements within the heap, ordered ascending

*/

public int[] smallest3(int[] heap) {

// TODO You must implement this method

//这里其实应该先检查辖heap == null?如果heap不够3个元素呢?

int[] smallest = new int[3];

//用Math.min(heap.length, 3)防止heap不够3个元素的情况。如果不够3个,剩下的其他元//素为0,例如heap为1 5,那么返回数组为 0 1 5

for(int i = 0; i Math.min(heap.length, 3); i++){

smallest[i] = heap[i];

}

Arrays.sort(smallest);

return smallest;

}

}

java十大算法

算法一:快速排序算法

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

算法步骤:

1 从数列中挑出一个元素,称为 “基准”(pivot),

2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

算法二:堆排序算法

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

堆排序的平均时间复杂度为Ο(nlogn) 。

算法步骤:

创建一个堆H[0..n-1]

把堆首(最大值)和堆尾互换

3. 把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置

4. 重复步骤2,直到堆的尺寸为1

算法三:归并排序

归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

算法步骤:

1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置

3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

4. 重复步骤3直到某一指针达到序列尾

5. 将另一序列剩下的所有元素

原创文章,作者:P08ZG,如若转载,请注明出处:https://www.506064.com/n/127779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
P08ZG的头像P08ZG
上一篇 2024-10-03 23:16
下一篇 2024-10-03 23:16

相关推荐

  • c语言中玫瑰花数有哪些,用C语言程序输出一朵玫瑰花

    本文目录一览: 1、c语言中什么是玫瑰花数 2、c语言输出所有得水仙花数,玫瑰花数和五角星数 3、输出1000到9999之间的四叶玫瑰数,用C语言的知识回答 c语言中什么是玫瑰花数…

    编程 2024-11-28
  • 会asp不会php,基于asp是什么意思

    本文目录一览: 1、学过PHP的人再学ASP会简单很多吗? 2、会asp的人是学习asp.net容易还是学PHP容易呢? 3、ASP难学还是PHP? 4、学PHP难吗?ASP呢? …

    编程 2024-10-26
  • 在php文件中,php的文件

    本文目录一览: 1、可以在一个php类文件中创建另一个php类文件的对象吗? 2、PHP中文件包含:/与. 3、怎样在一个PHP文件中执行另一个PHP文件 4、在php文件里如何引…

    编程 2024-11-21
  • java和拨号上网(java实现拨号)

    本文目录一览: 1、我打开网页 每个网页说需要java 导致许多东西打不开 有没有什么办法解决 2、java获得IP地址 3、局域网如何实现电信类似的拨号上网? 我打开网页 每个网…

  • JavaImage类:如何在Java中处理和操作图像

    一、Java中处理和操作图像的基础知识 在Java中处理和操作图像,我们需要了解基础的图像知识。图像在计算机中是由像素组成的,每个像素都有一个颜色值用于表示该像素的颜色。颜色值通常…

    编程 2024-10-12
  • python嵌入到c(python嵌入到网页)

    本文目录一览: 1、Python编程语言有什么特点 2、python怎样嵌入c 3、怎样把Python代码嵌入到C程序 Python编程语言有什么特点 1.简单易学、明确优雅、开发…

    编程 2024-11-04
  • c语言cpu频率,cpu频率是

    本文目录一览: 1、c语言死循环导致cpu飙高怎么处理 2、c语言的cpu占用率 3、C语言怎么取CPU的各项信息 4、C语言延时程序中,延时时间是如何计算出来的. (假如我想延时…

    编程 2024-10-04
  • Ubuntu重启网络

    一、检查网络连接 在重启网络之前,我们需要先确认网络是否正常连接。可以通过ping命令检查是否能够ping通百度的IP地址来测试网络连接情况。 ping 220.181.38.14…

    编程 2024-11-13
  • mysql数据库锁有几种,mysql有哪几种锁

    本文目录一览: 1、mysql中的锁都有哪些 2、深入理解MySQL数据库各种锁(总结) 3、下列什么不是mysql数据库锁级别 mysql中的锁都有哪些 MySQL 中有哪些锁?…

    编程 2024-10-04
  • 测试在线答案查询:Python工程师必备利器

    一、问题背景 在软件开发领域,需要进行各种各样的测试工作,其中就包括测试问题的答案。对于Python工程师来说,一个好用的在线答案查询工具是必不可少的。本文介绍了一个强大的Pyth…

    编程 2024-11-13

发表回复

登录后才能评论