奇偶節點的排序和完全平方數問題

2022-04-08 20:54:39 字數 1970 閱讀 8043

遇到塗鴉的兩個題目,拿來寫一下,有理解不對的地方,望大家不吝指正。

1、將鍊錶中的所有元素為奇數的節點移到元素為偶數節點的前面,並保證奇數之間順序不變,偶數之間順序不變。

示例:4→5→3→1→2 ==>5→3→1→4→2

1==>1

2→1 ==>1→2

==> (鍊錶為空)

鍊錶節點定義為:

class node

node swap(node list)

要求如下:

1. swap函式要求對節點的指標/引用進行操作(不得建立任何新的鍊錶節點)

2. 不得使用任何庫函式/api,如需使用類似功能, 請自行實現

3. 不得將鍊錶轉化為其他型別資料結構再進行交換,如陣列等

解題思路:

定義:以p2表示當前節點,pre表示上一節點,p1表示上乙個奇數節點

調整方式:遍歷鍊錶,當前節點為p2,若為偶數節點,不作處理,繼續下乙個節點;若為奇數節點,則將p1和p2之間的節點放於p2之後,p2調整為p1之後,如圖:

以p2作為p1,nex作為p2,繼續執行,只需遍歷一遍,即可調整奇偶節點順序。

參考**

public class t;//測試用例

node root=new node(2);//首節點

node n=root;

for(int i:arr)

root=swap.swap(root);//調整移動函式

while(root!=null)

system.out.println(); }}

class node

}class swap

node p2=list;//當前節點

node pre=null;//迴圈中當前節點的上乙個節點

node p1=null;//上乙個奇數節點

while(p2!=null)else

}elseelse} }

pre=p2;

p2=p2.next;

} return list;

}}2、給乙個正整數 n, 找到若干個完全平方數(比如1, 4, 9, ... )使得他們的和等於 n。你需要讓平方數的個數最少。

示例:給出 n = 12, 返回 3 因為 12 = 4 + 4+ 4。

給出 n = 13, 返回 2 因為 13 = 4 + 9。

思路:先舉個典型的例子:

已上圖為例,a1~a7表示七個整數,求由根到葉子節點路徑上節點元素值之和最大是多少。

方式1:計算所有路徑上的和,找出最大值

如果不儲存臨時資料,則重複計算量太大,如計算a1+a2+a4,之後計算a1+a2+a5,(a1+a2)的部分屬於重複計算,此處資料量小,效能消耗不大,參考斐波那契數列,fi(1000)=fi(999)+fi(998),如果不儲存臨時資料,則fi(500)需要重複計算多少次。

方式2:由下向上,以a2儲存(a2+a4,a2+a5)中的較大值,a3儲存(a3+a6,a3+a7)的較大值,a1儲存(a1+a2,a1+a3)的較大值,以此避免重複計算。

題目分析:

任何乙個正整數n可以表達為:n=a+b*b ,以dp[a]表示a需要的平方數的個數,則dp[n]的值為dp[a]+1,如果a不為零,則令n=a,可以繼續表示為:n=a+b*b,參考斐波那契數列的計算過程可知,將中間計算資料儲存起來,可以極大幅度的提公升計算效率(fi(n)=fi(n-1)+fi(n-2),如果沒有儲存中間計算結果,則fi(n-i)可能計算許多次)。

此處表現的結果則是,n=a+b*b,即dp[n]=dp[a]+1,而dp[a]已知。

參考**

public class t3 }}

class square

int arr=new int[n+1];

for(int i=1;i<=n;i++)

for(int i=1;i*i<=n;i++)

for(int b=1;b*b<=n;b++)

} return arr[n];}}

Python完全平方數問題

python輸入正整數n,不大於n的數i,符合i的所有因子的平方和為完全平方數則相加 1 import math 2 n int raw input 1 3 k 0 4 y 0 5 count 0 6for i in range 1,n 不大於n的正整數i 7 l 0 8for j in range...

完全平方數的個數

多次查詢 l,r 範圍內的完全平方數個數 定義整數x為完全平方數當且僅當可以找到整數y使得y y x 第一行乙個數n表示查詢次數 之後n行每行兩個數l,r對於每個查詢,輸出乙個數表示答案示例1 複製5 1 31 4 2 44 4 1 1000000000 複製121 131622 n 100000 ...

367 有效的完全平方數

給定乙個正整數 num,編寫乙個函式,如果 num 是乙個完全平方數,則返回 true,否則返回 false。說明 不要使用任何內建的庫函式,如 sqrt。示例 1 輸入 16 輸出 true示例 2 輸入 14 輸出 false本題是在解決完我第一次刷題筆記中那道題之後推薦的題目,我看這兩題似乎很...