演算法題 20200409

2021-10-04 20:59:05 字數 3241 閱讀 4750

/**

給定乙個int[n] a,其在下標為0到k上以及k到n-1上都是單調遞增,且a[n-1]小於a[0],求k

*/public

class

bbb//初始下標

int left =0;

int right = length -1;

int startvalue = source[0]

;int mid =0;

int k =0;

//二分

while

(left < right)

//若右邊的區域的第乙個數小於起始值,說明k在左邊,反之,在右邊

if(source[mid +1]

< startvalue)

else

}//迴圈退出後,若左右座標相同,說明這個座標就是k

return left == right ? left : k;

}public

static

void

main

(string[

] args)

;// int a = ;

int[

] a =

; system.out.

println

(findk

(a));}

}

/**

給定⼀乙個 ⽆無向圖 包含 n 個節點和 m 條邊, 每條邊 mi 的代價為 ci 。圖中⼀一條 路路徑的懲罰是指對該路路徑上所有邊的代價 ci 執⾏行行位運算或(bitwise or)操 作得到的。假如⼀一條路路徑上包含了了邊 m1,m2,m3 ... ... ,mk,那麼對應的懲 罰就是 c1 or c2 or c3 or ... or ck。(or代表位運算或,即 「|」 )

問題:給定圖上兩個節點 start 和 end,找到從 start 到 end 的所有路路徑中懲罰 值最⼩小的路路徑,對應的最⼩小懲罰值作為結果返回。如果路路徑不不存在就返回 -1。

注意:任意兩個節點之間最多存在⼀一條邊,圖中可能存在有環路路。

引數含義:

n:節點總數;節點編號從 1 開始,⼀一直到 n,共有 n 個; edges:⽆無向圖的邊;edges[i] 表示邊mi,其中 edges[i][0] 和 edges[i][1] 是mi的兩個節點的編號,edges[i][2] 是mi對應的代價 ci; start 和 end:路路徑的開始和結束節點編號

*/public

class

findsnodepunish

//獲得點到其它的距離集合

private

static map

>

getedgesmap

(int n,

int[

] edges));

return map;

}//深度優先,獲取所有可能的路徑及懲罰

private

static

intminpath

(map

> edgesmap,

int start,

int end)

if(path < result)

}return result;

}public

static

void

main

(string[

] args),,

};system.out.

println

(beautifulpath(3

, edges,1,

3));

}}

/**

* 給定⼀乙個按開始時間從⼩小到⼤大排序的時間區間集合,請將重疊的區間合併。

* 時 間區間集合⽤用⼀乙個⼆二維陣列表示,⼆二維陣列的每⼀一⾏行行表示⼀乙個時間區間(閉區 間),

* 其中 0 位置元素表示時間區間開始,1 位置元素表示時間區間結束。

*/public

class

combinetime

int[

] midlevalue =

newint

[intervals.length]

;//返回區間的偏移量

int returnvalueindex =0;

//迴圈,每個區間跟後乙個區間比較,若右閉大於左起,合併,合併後的右閉取兩者的右閉中大的

for(

int i =

0; i < intervals.length -

1; i++

)int

rightone = intervals[i +1]

;if(leftone[1]

>= rightone[0]

)else

}//去掉null值

int[

] returnvalue =

newint

[returnvalueindex +1]

;for

(int i =

0; i <= returnvalueindex; i++

)return returnvalue;

}public

static

void

main

(string[

] args),,

,}; system.out.

println

(arrays.

deeptostring

(merge

(intervals)))

;}}

/**

* 給定⼀乙個⾮非空字串串 s 和⼀乙個縮寫 abbr,請校驗它們是否匹配。

* 假設字串串中只包含⼩小寫字⺟母,縮寫中只包含⼩小寫字⺟母和數字。

* 縮寫中的數字 表示其縮略略的字元數;連續多位數字表示⼀乙個多位數

*/public

class

validabbr

else

if(wordsindex >= words.length)

//是否匹配

if(temp == words[wordsindex]

)else}}

return wordsindex == words.length;

}public

static

void

main

(string[

] args)

}

每日一題 2020 04 09

題目鏈結 這題字首和 雙指標 指標指的比較迷 這類題型大體知道思路,畢竟柑橘這是我最熟悉的題型了 太菜了 解題思路 include include include include using namespace std typedef long long ll const int n 200010 ...

20200409 日誌配置檔案

日誌jar包衝突 既然拋了jar包衝突 那我們就排除乙個jar 包即可。關鍵是排除哪乙個jar包 這裡注意下了,如果你用的是logback日誌,一定要排除slf4j log4j12包,不要排除logback classic包。最重要的是你想使用哪個日誌框架?日誌門面,日誌實現,橋接包。這三個是必備的...

演算法 常見演算法題

演算法題 假如有100個不相同的數,比如從1到100,怎樣使用10次取出其中的10個不同的數字,要求每個數取出的概率一樣 一開始沒有說10次,所以我說,使用乙個random函式,以時間為種子來取,當取出乙個時,做標記,下次再取到這個數時,重新取一次 然後他就說了如果只能夠取10次怎麼辦?一開始我想到...