當前位置:首頁 » 操作系統 » 演算法原創題

演算法原創題

發布時間: 2022-09-19 10:56:16

1. 演算法題 日常記錄

題目:0-999999之間的所有整數數字中,任何一位都不包括數字3的數字總數有多少個?
答案:9+8*9+8*9*9+8*9*9*9+8*9*9*9*9+8*9*9*9*9*9

題目:25匹馬5個跑道,怎樣選出最快的5匹來?最少的次數。如果選3次呢?
答案:選5個最少8次,最多9次;
選3個,只需要比較7次。

題目:64匹馬,8條跑道,分幾次可以選出最快的4匹?
答案:11次。

從數組中找出連續的最大值
如輸入1,-3,5,5,-6,-2,-7 輸出10
我自己寫的maxSum()方法只通過百分之50
舍友的maxSum2()方法全通過了 不知道我漏掉哪裡了 先記錄一下

… 理解了 我輸出的時候從0開始了 真是蠢哭自己 如果最大是負數就輸出錯了 讓max從a0開始就好了 一個教訓…

從一堆數里選出第一個只出現一次的數,時間復雜度0(n)
如1,1,2,2,3,3,4,5,4,8 輸出 5

2. 演算法的題目

自然語言法:輸入 x平方-2x-3小於0
x1=3 x2=-1
輸出 -1<x<3

基本演算法:INPUT x平方-2x-3小於0
x^2-2x-3<0
(x-1)^2<4
PRINT -1<x<3

3. 阿裡面試演算法題合集一

0,1,,n-1這n個數字排成一個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後一個數字。

例如,0、1、2、3、4這5個數字組成一個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2、0、4、1,因此最後剩下的數字是3。

示例 1:

輸入: n = 5, m = 3
輸出: 3
示例 2:

輸入: n = 10, m = 17
輸出: 2

請實現一個函數,輸入一個整數,輸出該數二進製表示中 1 的個數。例如,把 9 表示成二進制是 1001,有 2 位是 1。因此,如果輸入 9,則該函數輸出 2。

示例 1:

輸入:
輸出:3
解釋:輸入的二進制串 中,共有三位為 '1'。

數字以0123456789101112131415…的格式序列化到一個字元序列中。在這個序列中,第5位(從下標0開始計數)是5,第13位是1,第19位是4,等等。

請寫一個函數,求任意第n位對應的數字。

示例 1:

輸入:n = 3
輸出:3
示例 2:

輸入:n = 11
輸出:0

注意這里必須是long 類型

輸入一個非負整數數組,把數組里所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。

示例 1:

輸入: [10,2]
輸出: "102"
示例 2:

輸入: [3,30,34,5,9]
輸出: "3033459"

老師想給孩子們分發糖果,有 N 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。

你需要按照以下要求,幫助老師給這些孩子分發糖果:

每個孩子至少分配到 1 個糖果。
相鄰的孩子中,評分高的孩子必須獲得更多的糖果。
那麼這樣下來,老師至少需要准備多少顆糖果呢?

示例 1:

輸入: [1,0,2]
輸出: 5
解釋: 你可以分別給這三個孩子分發 2、1、2 顆糖果。
示例 2:

輸入: [1,2,2]
輸出: 4
解釋: 你可以分別給這三個孩子分發 1、2、1 顆糖果。
第三個孩子只得到 1 顆糖果,這已滿足上述兩個條件。

在一條環路上有 N 個加油站,其中第 i 個加油站有汽油 gas[i] 升。

你有一輛油箱容量無限的的汽車,從第 i 個加油站開往第 i+1 個加油站需要消耗汽油 cost[i] 升。你從其中的一個加油站出發,開始時油箱為空。

如果你可以繞環路行駛一周,則返回出發時加油站的編號,否則返回 -1。

說明:

如果題目有解,該答案即為唯一答案。
輸入數組均為非空數組,且長度相同。
輸入數組中的元素均為非負數。
示例 1:

輸入:
gas = [1,2,3,4,5]
cost = [3,4,5,1,2]

輸出: 3

貪心的思路是,只要總和大於0 就可以繞一圈,
開始位置的貪心思路是,如果從剛開始sum小於0,一定不是從之前開始,而是從當前下一個位置,sum = 0 清空

給定一個非負整數數組,你最初位於數組的第一個位置。

數組中的每個元素代表你在該位置可以跳躍的最大長度。

你的目標是使用最少的跳躍次數到達數組的最後一個位置。

示例:

輸入: [2,3,1,1,4]
輸出: 2
解釋: 跳到最後一個位置的最小跳躍數是 2。
從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達數組的最後一個位置。

給定一個非負整數數組,你最初位於數組的第一個位置。

數組中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最後一個位置。

示例 1:

輸入: [2,3,1,1,4]
輸出: true
解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3 步到達最後一個位置。

一條包含字母 A-Z 的消息通過以下方式進行了編碼:

'A' -> 1
'B' -> 2
...
'Z' -> 26
給定一個只包含數字的非空字元串,請計算解碼方法的總數。

示例 1:

輸入: "12"
輸出: 2
解釋: 它可以解碼為 "AB"(1 2)或者 "L"(12)。

這里一定注意 第一個數為0 的情況,s.charAt(0) == '0' 第一個為0 要直接返回0 才行

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。

如果你最多隻允許完成一筆交易(即買入和賣出一支股票一次),設計一個演算法來計算你所能獲取的最大利潤。

注意:你不能在買入股票前賣出股票。

示例 1:

輸入: [7,1,5,3,6,4]
輸出: 5
解釋: 在第 2 天(股票價格 = 1)的時候買入,在第 5 天(股票價格 = 6)的時候賣出,最大利潤 = 6-1 = 5 。
注意利潤不能是 7-1 = 6, 因為賣出價格需要大於買入價格;同時,你不能在買入前賣出股票。

給定三個字元串 s1, s2, s3, 驗證 s3 是否是由 s1 和 s2 交錯組成的。

示例 1:

輸入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
輸出: true

給你一個字元串 s 和一個字元規律 p,請你來實現一個支持 '.' 和 '*' 的正則表達式匹配。

'.' 匹配任意單個字元
'*' 匹配零個或多個前面的那一個元素
所謂匹配,是要涵蓋 整個 字元串 s的,而不是部分字元串。

說明:

s 可能為空,且只包含從 a-z 的小寫字母。
p 可能為空,且只包含從 a-z 的小寫字母,以及字元 . 和 *。
示例 1:

輸入:
s = "aa"
p = "a"
輸出: false
解釋: "a" 無法匹配 "aa" 整個字元串。

給定一個整數矩陣,找出最長遞增路徑的長度。

對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。

示例 1:

輸入: nums =
[
[9,9,4],
[6,6,8],
[2,1,1]
]
輸出: 4
解釋: 最長遞增路徑為 [1, 2, 6, 9]。

使用帶記憶的可以避免超時

使用動態規劃解題

給出一個由無重復的正整數組成的集合,找出其中最大的整除子集,子集中任意一對 (Si,Sj) 都要滿足:Si % Sj = 0 或 Sj % Si = 0。

如果有多個目標子集,返回其中任何一個均可。

示例 1:

輸入: [1,2,3]
輸出: [1,2] (當然, [1,3] 也正確)

給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 (w, h) 出現。當另一個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另一個信封里,如同俄羅斯套娃一樣。

請計算最多能有多少個信封能組成一組「俄羅斯套娃」信封(即可以把一個信封放到另一個信封裡面)。

說明:
不允許旋轉信封。

示例:

輸入: envelopes = [[5,4],[6,4],[6,7],[2,3]]
輸出: 3
解釋: 最多信封的個數為 3, 組合為: [2,3] => [5,4] => [6,7]。

標準的動態規劃

一隻青蛙想要過河。 假定河流被等分為 x 個單元格,並且在每一個單元格內都有可能放有一石子(也有可能沒有)。 青蛙可以跳上石頭,但是不可以跳入水中。

給定石子的位置列表(用單元格序號升序表示), 請判定青蛙能否成功過河(即能否在最後一步跳至最後一個石子上)。 開始時, 青蛙默認已站在第一個石子上,並可以假定它第一步只能跳躍一個單位(即只能從單元格1跳至單元格2)。

如果青蛙上一步跳躍了 k 個單位,那麼它接下來的跳躍距離只能選擇為 k - 1、k 或 k + 1個單位。 另請注意,青蛙只能向前方(終點的方向)跳躍。

請注意:

石子的數量 ≥ 2 且 < 1100;
每一個石子的位置序號都是一個非負整數,且其 < 231;
第一個石子的位置永遠是0。
示例 1:

[0,1,3,5,6,8,12,17]

true

使用數組+ 鏈表枚舉所有的可能

給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少操作數 。

你可以對一個單詞進行如下三種操作:

插入一個字元
刪除一個字元
替換一個字元

示例 1:

輸入:word1 = "horse", word2 = "ros"
輸出:3
解釋:
horse -> rorse (將 'h' 替換為 'r')
rorse -> rose (刪除 'r')
rose -> ros (刪除 'e')

給定不同面額的硬幣 coins 和一個總金額 amount。編寫一個函數來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。

示例 1:

輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
示例 2:

輸入: coins = [2], amount = 3
輸出: -1

給定一個字元串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。

示例 1:

輸入: "babad"
輸出: "bab"
注意: "aba" 也是一個有效答案。

給定一個字元串 S 和一個字元串 T,計算在 S 的子序列中 T 出現的個數。

一個字元串的一個子序列是指,通過刪除一些(也可以不刪除)字元且不幹擾剩餘字元相對位置所組成的新字元串。(例如,"ACE" 是 "ABCDE" 的一個子序列,而 "AEC" 不是)

題目數據保證答案符合 32 位帶符號整數范圍。

示例 1:

輸入:S = "rabbbit", T = "rabbit"
輸出:3

給定一個無序的整數數組,找到其中最長上升子序列的長度。

示例:

輸入: [10,9,2,5,3,7,101,18]
輸出: 4

使用二分查詢

在一個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。

示例:

輸入:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

輸出: 4

給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, ...)使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。

示例 1:

輸入: n = 12
輸出: 3
解釋: 12 = 4 + 4 + 4.

你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定一個代表每個房屋存放金額的非負整數數組,計算你 不觸動警報裝置的情況下 ,一夜之內能夠偷竊到的最高金額。

示例 1:

輸入:[1,2,3,1]
輸出:4

你是一個專業的小偷,計劃偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第一個房屋和最後一個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定一個代表每個房屋存放金額的非負整數數組,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

示例 1:

輸入: [2,3,2]
輸出: 3

思路是忽略第一個求一個結果,忽略最後一個求一個結果,只要一個時一個結果

// 可以使用rangeCopy 將其放入一個函數中求解

給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。

相鄰的結點 在這里指的是 下標 與 上一層結點下標 相同或者等於 上一層結點下標 + 1 的兩個結點。

例如,給定三角形:

[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自頂向下的最小路徑和為 11(即,2 + 3 + 5 + 1 = 11)。

給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。

說明:每次只能向下或者向右移動一步。

示例:

輸入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
輸出: 7

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為「Start」 )。

機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為「Finish」)。

現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?

示例 1:

輸入:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
輸出: 2

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為「Start」 )。

機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為「Finish」)。

問總共有多少條不同的路徑?

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是一個正整數。

示例 1:

輸入: 2
輸出: 2

4. 演算法設計題

1.遍歷字元串,如果遇到「(」字元則把「(」push入棧,如果遇到「)」字元則pop,(pop前檢查棧是否為空,如果為空則停止遍歷,返回0)。便利完後檢查棧是否為空,如果為空返回1,否則返回0。
2.用兩個指針p1,p2。p1開始向後移動(p1=p1->next),等p1移動到k個元素時p2開始移動,以後p1,p2同步向後移,等p1移動到尾節點時(即p1->next==NULL)停止,此時p2所指即倒數第k個節點。

5. 數學演算法題

用visual basic6.0 計算迴文數:
for i = 100 to 99999 '這里從100開始 後面可以隨便填,我這里填99999 表示所有3位數到五位數之間的迴文數
if StrReverse(i)=i then print i '用StrReverse函數 判斷倒序後的數和原來數是否相同,如果相同者表示此數為迴文數
next
=========================================
用C++語言編程計算迴文數
代碼如下:
#include <iostream>
using namespace std;
//判斷迴文數的函數
void huiwen(int huiwen){
int a=0,b,m=huiwen;
while(huiwen){
b=huiwen%10;
a=a*10+b;
huiwen=huiwen/10;
}
if(a==m)cout<<"Is hui wen shu"<<endl;
else cout<<"not hui wen"<<endl;
}
int main(){
int a;
cin>>a;
huiwen(a);
}
T-SQL 演算法 100到 100000之間的
DECLARE @INT INT,@I INT,@J INT
SET @I=100
SET @J=1
SET @INT=0
WHILE (@I<100000)
BEGIN
SELECT @INT=LEN(@I)
IF @INT%2=1
BEGIN
WHILE (@J<=@INT/2)
BEGIN
IF( SUBSTRING(CAST(@I AS VARCHAR(50)),@J,1)=SUBSTRING(CAST(@I AS VARCHAR(50)),@INT-@J+1,1))
BEGIN
SET @J=@J+1
CONTINUE
END
ELSE
BEGIN
BREAK
END
END
IF (@J>@INT/2)
BEGIN
PRINT @I
END
SET @J=1
END
ELSE
BEGIN
WHILE (@J<=@INT/2)
BEGIN
IF (SUBSTRING(CAST(@I AS VARCHAR(50)),@J,1)=SUBSTRING(CAST(@I AS VARCHAR(50)),@INT-@J+1,1))
BEGIN
SET @J=@J+1
CONTINUE
END
ELSE
BEGIN
BREAK
END
END
IF (@J>@INT/2)
BEGIN
PRINT @I
END
SET @J=1
END
SET @I=@I+1
END
用pascal語言判斷是否為迴文數
var
s:string;
i:longint;
yes:boolean;
begin
readln(s);
repeat
if (s[1]=s[5])and(s[2]=s[4]) then writeln('Yes.')
else writeln('No.');
readln(s);
until s='0';
end.
補充:在C語言編程中,也會遇到與迴文數類似的字元串:ABA、ABDEEDBA。下面是一串C代碼,判斷你輸入的一串字元是不是迴文。
#include <stdio.h>
int h(char p[20],int d);
void main()
{
char hui[20];
int l;
printf("請輸入字元串:\n");
scanf("%s",hui);
for(l=0;;l++)
if(hui[l]=='\0')
break;
printf("輸入的字元串長度:%d\n",l);
if(h(hui,l)==1)//也可寫為if(h(hui,l))
printf("%s 是迴文。",hui);
else
printf("%s 不是迴文。",hui);
}
int h(char p[20],int d)
{
int i,n;
for(i=0;i<d;i++)
{
if(p[i]!=p[d-1-i])
{
n=0;
break;
}
else
n=1;
}
return n;
}

6. 幾個關於演算法的題目

第1題,先統計一下每一點的入度和出度,出度代表認為幾個人,入度代表被幾個人認識。
最後看看哪一個人的入度是==n-1,出度是0的就行

大整數相乘的話可以模擬小學生擺豎式。
先把數字的每一位存在整型數組中。
然後一位一位乘過去。把結果加起來就行。復雜度是n*m

最後一個是狀態壓縮DP
設dp[i][j]代表前i-1已經擺好,第i行每一狀態是j的情況下的種數。

然後按行行轉移。
復雜度是2^n*2^n*n

7. 面試會出哪些經典演算法題

1、排序演算法∶快速排序、歸並排序、計數排序

2、搜索演算法∶回溯、遞歸、剪枝技巧

3、圖論∶最短路、最小生成樹、網路流建模

4、動態規劃:背包問題、最長子序列、計數問題

5、基礎技巧:分治、倍增、二分、貪心

6、數組與鏈表:單/雙向鏈表、跳舞鏈

7、棧與隊列

8、樹與圖:最近公共祖先、並查集

9、哈希表

10、堆:大/小根堆、可並堆

11、字元串∶字典樹、後綴樹

(7)演算法原創題擴展閱讀:

演算法的重要性:

1、演算法能力能夠准確辨別一個程序員的技術功底是否扎實;

2、演算法能力是發掘程序員的學習能力與成長潛力的關鍵手段;

3、演算法能力能夠協助判斷程序員在面對新問題時,分析並解決問題的能力;

4、演算法能力是設計一個高性能系統、性能優化的必備基礎。

8. python習題(演算法)

這個就是循環2n次呀。先是讓x=x+c,在把c更新一下c=c+b,最後讓b=b+a,這就完成一次循環了。
不過你給的程序不完整。

9. 演算法題目

C C B A
給點分吧,嘿嘿

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:741
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372