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/zh-tw/n/127779.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
P08ZG的頭像P08ZG
上一篇 2024-10-03 23:16
下一篇 2024-10-03 23:16

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Python實現爬樓梯演算法

    本文介紹使用Python實現爬樓梯演算法,該演算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29

發表回復

登錄後才能評論