Skip to content

Commit 3fab52a

Browse files
Up to delete-columns-to-make-sorted-iii
1 parent eb6c985 commit 3fab52a

6 files changed

+368
-1
lines changed

delete-columns-to-make-sorted-iii.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func max(a, b int) int {
6+
if a > b {
7+
return a
8+
}
9+
10+
return b
11+
}
12+
13+
func minDeletionSize(A []string) int {
14+
// Get runes
15+
n := len(A[0])
16+
m := len(A)
17+
aa := make([][]rune, m)
18+
mem := make([]int, n)
19+
lis := 0
20+
21+
for i := 0; i < m; i++ {
22+
aa[i] = []rune(A[i])
23+
}
24+
25+
for i := 0; i < n; i++ {
26+
mem[i] = 1
27+
}
28+
29+
for i := 0; i < n; i++ {
30+
for j := i - 1; j >= 0; j-- {
31+
var k int
32+
33+
for k = 0; k < m; k++ {
34+
if aa[k][j] > aa[k][i] {
35+
break
36+
}
37+
}
38+
39+
if k == m {
40+
mem[i] = max(mem[i], mem[j]+1)
41+
}
42+
}
43+
44+
lis = max(lis, mem[i])
45+
}
46+
47+
return n - lis
48+
}
49+
50+
func test1() {
51+
strs := []string{"babca", "bbazb"}
52+
53+
fmt.Printf("%d\n", minDeletionSize(strs))
54+
}
55+
56+
func test2() {
57+
strs := []string{"edcba"}
58+
59+
fmt.Printf("%d\n", minDeletionSize(strs))
60+
}
61+
62+
func test3() {
63+
strs := []string{"ghi", "def", "abc"}
64+
65+
fmt.Printf("%d\n", minDeletionSize(strs))
66+
}
67+
68+
func test4() {
69+
strs := []string{
70+
"hcjfndramrebpigadjalqfirbkejhqpqsjddpcfbmmmplechmhnfogaoclhdqcodirtfsjmhodsoftahlirphpfmbm", "agtiehijkliafrdskeoqnhahtgjqksprqeigmhsrpcqhqtgjbtmqqhdfhapbmnpsbpmbcmkggjcdjghfocrjfarqfd", "kdflfmfogdsirhmiotjncerjeberihkllblgbgegkkqbcmhtjdhtdfgbjlkocseottnfqaejfsjgrnjhklddpbfqbi", "fhhbcsjcmmfptbjreqhkrtjqcknktakoejjjjccabaqflrenbnkaathitkncpfctacsrsgmtjirilojfehmcnegnsc", "aljbbogenfotjphqriakrbsrjniiethobjkgjetlsjemasmadlqpsgoidljnbaohqkntapsrocfjsgkfdpgiotadms", "ichcepfekmfrpaeddcjsdobdgsiiafdrkiqeqiisjgifhtqaqelkclodehjftbamokhhkbcrltomjscjpfpoearpff", "qciateapardlstofomrgpdreollksmaleipefqbkmegrakedaihscriksefajrrsagrarqdmfllpnnrkiqmotpoern", "jchgaqnqeqlmmtrksbqnlrtelogkghcheatacpfpsqhilgholtbaaelbikqaignmiljsccpkobcbnbakpcmiplkklp", "ldnkdgdnnmqodjfsdknipsrfbqqcmpqmnkijlqeqmcqbjmgtsesmisrmjfaslqarkkrfjpqqnmlnoheiirhmdleqdj", "rcbkctqjqnfkrlehebjlcgplfqqlipdgjsbetbnrcfqmftfgpkgpbanjcnqrthslelhcrtaccgrildfbiordpsodjr", "sgbhpaiiiqcnjsitateipreptapamkgcgdqqsspftpnijpmifpcalqcqpnfdfnbpjrsrtqaoicsoladnfdtrnegobg", "rgaitbjdsooopddbknlbtpdhssofmhjpmbrttkekalamnriaanjgsmpladfbnfairaigresmjqqtrpamqaoqicradn", "gsmlbsimogchnlhcsgpbcisanghjgrrljdnsmefacsmbhgqmtjpitakqoablegbjdqeeogfmqtfmtfeokqflrmrmbk", "ngkmhhpgspfftmihjdfrnflacgsrcjpnqrjjacfhgklilftiosffjhkenrrkssoqeqcphrnbecltccmrsbertglmoi", "oddpqllessqqmpirgkgptsarjbhjhageoqhqfgmaaelpfcdngsrnfaajqgbnjbmmdornpslmfljtqjabrngoaocncd", "orfsaaienhmofipgrhbmtocjoekipbsibbqhcnkoqfhkrrqjtlfpnokkhclsgcdfoffmhssinpqllohedtlgmdpchj", "jilladsfmgjlrtikapplbmsidkgqldopghpmgqecnegmcknboigemitqjogggescjkeodcmpqgobnrnmojhfcmokog", "nhoffnscqdofcmkqlhtqchelspsnddnpjnfdcfrrhnlpgggptblqsdfilrjjdmgqmpfqralrpddgbhejrhjejsikti", "rgbcnifffocepnsgefcjbfnsfijkfrikehralknakrkmrnpfajreeaireaqtedbrnjhttdspshenrkkhgmdcjamqqf", "flochimpajnnokeceoalptlekfeplhdkiefjdtcadebterefcojqlgoamiblngrhsrpichodqharfnsiliannctmfh", "riqomakgatddqrthfqtrlmgrgsfgcbhsleccckiqchdliifsqcajoplpbamclcqklncggiecdtqphprofbtfpphbho", "isldtcooqtqstaghqiekhsnjrssaehejppriqchajlbipcepcilrlcheeheeqrclbiromdsbqiapoqpecjqngtpmkm", "absahsqbqefhttbcfgatjrnpabtabiojcgdtknslegbigjaparhonkomgbsbgajdkljklaoihmmkaanjjqbbdtjsck", "lcfafbrrsrsaikbtqticjdbabransimkdigbelsogjetmmajpnontblidfpdglftnkngorbihbamtdoqahlmlqeiqb", "irajdrfitlnmldprcembcqhncekckapnlaaerkdclbttcjffhqheahfllppntjqgngkdiimfflgkqmrcfrfeqdqskp", "knoodoafdckccmrrrjetltkgqpptkbhttidhbdciocjamhehrrtciebtohqqkahhdmdjfjlelototgjrifdkhjhfdt", "lebmrmmmbgpkftgkirrsiifncoepolntrjgdrrqmnidecpqgoqibfhijdghranctbcbdqclbhorojlthllhbborkls", "nlbljahtgiblhnlngqpajdodlcdgbdicnjpkcjpjfmefogcprhongeqcbgtnhaippmqarontprfdhedgtkajqkhggp", "rjdftaaldqllknpgmngjorsnqdndfkfmksjttfssqlhbbdbdktmpqjiqoiqrbddsrksncdpshsrtggoiooljemqpls", "glaespcpjttjcbnsknsirkafbdkmcpkifraqanrisfstabboaitioefqcsoqdhlchedgihlnfqhjhjtgncptbkmpme", "bjgdkellqhtohkhtdtroedabrgsfbdjtrnliidbotfdenidgjskggqkqcskhahedicortckfrhklfsjffjidpfkerk", "mortfcsllcrffjrnlceijjpafagoemgteofpfkfndhcikedlhnnlerqaakiietfhpnpqdcpcjbmifjlgijqcrnhebt", "tfoigqlfdbtolagsfetnsninnnefqeirbppmcbkbgorknkiaemhrpqsjnmjsdastcscnmgintdrdkfjpsnbcomdrht", "rdbecoeehseqpbcbemfhirfbjltlnkphdanriqrphttgnktcrbokrihgmjtlkhbppjlsahqkiahefhobmljbrttdik", "janeolfhldpdrjigsgliatkrprlsnjeiralfrakfsrakirsaqjmsagopcelkogbodncpkmrhpppcoblgpisataafia", "nnraaqmsqanbkbsjbrgrkbbphbhpqdrmggkgctpladpljealisijlljkpqotsodbqsrboceatjhattdkoobgokpoms", "lclfifnclefbpcphfkpgbactdkdflnqbcggehcntsojanikgnefjflrqaldnojgiigiamlkiagaiqghrmssfipjjlb", "balkspphlamjofffjlkfsjbbenaoiorojmgsqdbdnqogettjihllmqiljnlorqiqtnahrskqfqsmmfefgmjoqarcmf", "msbcoomrimmoirpmasllhboasjsqjjssighidmtggojorlenafirbrmbfjcjhrflrhgknpatsdbteeoglhliacaolr", "rfhnhijlrrksqmajdebgdhmsmskhdtcmcobntniirmnfgbjlhrbmdbdnmfcmqrafnhorchesetkiflajroshmlfbnj", "andtiboifbkfdhnsjemfbqjhsfmbjajmrtmrhgcogsjdqbiophadnlqbnaoltaaeanitddaijpsflpbsdhlrssrprh", "gflfmarlookeeolakambrkfemmgfejmsfeonlaajojtjcqtcddeihgkelhbbgifkglggirsamacldtjplcgclpmfio", "jfgkmcfkbcpjblnhafskbfjrcbrqroqsqjibsocktendpcpcitdbaegfafcralcnrbaejsjcgrriiciococajkijbq", "npgrsrarcedltgqlpfgfmksmiiarjriakaslnjjoheaqdsqmdpdrnhntmmjaqbjekglfbsrtsecnfsotkfsbjdcdom", "nhokaatqalaldjtipocddnttiktqjksihhjsgnltscslhohikmnmkaostgafcknflkdiksbjdejfsamnlkgrhotnnh", "cogogrfgmfilcqotpkkkmgtqflkgoebbteasroodklmertpphabmptqkceinalposseccerptahnrtksbclddnqfog", "hfqhiapeohsrkibdqdngasfqskkkdmafnflohsdotamhonlbtrgoaoeoefhitlmtkjpceijrcjaflosqrlcgggjnai", "kogsdcmngdpkjthlkmpdqkigeddteacimnpomrbcttrjpkoetcnbecsnmtnmcthqdesodaapomeiqoackjopojcmse", "ojbtrebpegeqjmebhllrlipqirgrndhojohsoiokhoiljjqctcmrctoarqjmbkkpliacfbmnblbdhlsifspfkgmpqh", "creopjdbkklrbrkdnitbcjcorsiethkcrjnsokiphphhabermebpatjsacjmopjjcobcmnrsstjirrrkannbbspcst", "itgdleksltmlpipabfaseqdcmmeakddestjmpmqdcmooepsotdcsrrmljpohqmbnnlbbkmmbnbpjhcmlifsljatrro", "roefoplprksiggjcrqifqjpimnscncgflrglrjlhoprndqihcdlnklecjcomqqondrdelhcejrsfsojnrlrndjmjeq", "flclqbrbokcjcnhlggdjmlhtbrrpfmbsrolnargjdaamnchntaotjjstpbokjlqeqsbqhbjnohisceoltjeofqqlik", "sfqlfofjshlocrqrgjsrgkjtmjddnioclaehffqnncsprgtedbhlfisjontsdfdldlhphqgrksqelpgqoitckqqlge", "jbmggfrdiphdjkgndjkrgttmriglrrbasmppqcnhlqgthkmfnlasihcafdhpiekifaarmqhlirtsadigbbjinlqmis", "dgchrjoidpromqesgkoqkcthtsadanjbbgbskfrrbrcidiodtpdgktareqcpgoemgdhosshnnpqlmjkbspclfmtelp", "baolbeehpcqhpktcbsegfkmqhnkjetqrlrbarabascibnhdbebfagemrdhnplsaihofchqqjkssccegqfejgqlggab", "dafbomnhjhdrglbopqqohtmqtpgfdlqmlkafolsnscjbjeghsgbdolclikrmjjtdjncnepbdfaoolcomtfebipktpa", "lpctlcrdpjnpsntgnhtadfohcithqeidpdkncnecbbdtrtlnobgkhtqobgjqjahknspqhjqnooaihgkanlkbramfhr", "bedfircchocbdejdibgboqlmnakgkjpmmrmgmaicbjqjjtsankjmjlodghqrtaklqollkmnofjlrihcfnhfestbnkg", "rpbmcdpqbbgimpmqfocledtqltctnqlkqkgebkjnrtbaoammopgtmjlsihtdptlgsnrnckmhkfbrknheemaicdkqth", "taagjgfiljohsjlhmrmobarrbngrplnqjrpnfcdpssqtomnobgiaaemhhcnqkrmmbsnjadtlalpiqssertkskbbbit", "sdpicbqhijjqclijonijntdbleosfpmqkoldckbjojabglhscstiothcggapknjsdjqsiqmkkcrgbitinmaqnsjilm", "qfsmbipfjsjknmfkbeofcscnpetgrhdthgbddgbnlnidnprhlrgcdjnlihhcebaseifolrjjpfjglnmjtedttlskqi", "rgnaishdebsmafssaahibsfgdeqoceoeolqthrnrbjthaolssdbpjekejoqjehgjeebgtnniieogalhtjgkkskjlom", "gfesrsjrnfcflhcbtbraiqibeooqsgactiornhasdftjhofnknibqramrcqgrgffrmtnmacqtroorfpoibchodkibo", "ertfqdcmojbcgrgjthsfqgijgjkntmosleprgssrlrfietlblebjsicsqljdcekpilnjncpncjsceobkbrcrlbltnk", "cfmmmiddjstrdgijsmoqtdrtkkocgemqnllbffecmcpbqdacaplhgimrehdelffdscfopsqonhojnfspnkoomsrpdp", "pcskeorjfdelosmqcfdstiafdratqrsfineqocdblnhrgtjfrcaejsbegfgbrmooalpcfrpqmoqhqefdkkkgomqaif", "gtesnmhojapbsatmisrelrotmnfsbmafjscokchfstaroeaosqagdpdidhpanasfsjsrjesfakcsfipnohbprrpors", "ccdqdrfleallhibjtckrfdqcqjoajijnqbhrfolpracrkmaqcpnbforjcpntsstiiabcgtkopmqqqqftledctrirjn", "okqqtalpcpfbesirntlnblpghehrjfmlbrfogqplbmhojopbthrnchrhjrbbmfespnqrpqcpgkpmdsnoatgkopfjbt", "gasrprproqkimdrefgmcrtplaljaplqbnrfodmffbdpnlllgfapdlqahbrbetcethfmkoernpttobhdjdhmidoatao", "ingmlggomeahmspdrhimfhactbnqjqrmrlllbbmpcjltmsokrmlfkodrjtksfffseilkaeaahgfiitotlghkebiifm", "nmtkkegsesklcrkefmbjfdmesqrjhdtgslemcpgambsollqkarjocahklgqirlqesstrnoicsjmgcjlnqgsqsrqekm", "gafhodtnehnjajcrjodtrtlltgpohhlsoidmpfpilnamchbompcjrsaarfhqngdjhjaidmciiafelkkkblieabqssh", "njnfrlinkfqeklitqigontiiidaijaigkhhmnsgoloatbhkkoepfoqcjogpibobrighmdkddststkqknnmhnbsjgkn", "mmtnnefagaifsjajcdfajedbnfdpdmqnpeltcemhpiljhladqpsrgqicfjlnmnbjbqgkgagssmirciofrhokrmodlo", "fpsdmbrjlbiirrdnpjqlghiiaesqlmdoggdccstbcjnehitgjkmbajjrqrrbocclbqoabshklbtrpandfoganingdp", "ljlmtjkddhdpkqteqckmnallghipstiftglctcfktkhedfjjdpsipoejrsfdofhlflqaimtsjjjcclrfjqrbqiokkj", "icnhagcrqdesgjrjstdbpgqcsslolqffoknbtfmdtogiqftrrndtatcecdemccdfocmmfifnljspjrqjkiikhmcshm", "atmmknasfojhnpsqnjhkofjkanmjbitrbclhqjfpmblhofhermmdqfpfleplntfhjrfnqslmnaqhcmotqithpcpmhd", "nfebcjlibadtqnfiotmdiaodenetblohflbbehmqmidqdktehlqcdijdmgebfgdhdsbijokqetsfjddapppkralhgq", "kktophpichiqditdehbfcmmaprgbldgnpeakqhohctotkijldblpsaqbsjakniminglgapolatntmnedjtdobbcpmc", "jakejocankoerkripsdocerbracogetcmrjnhfnhqhkflctqlcfdoidqohclegbhbtckelkrkqfhssmrssbqinldjk", "maninqfrnemhgeorcamclsosikalsckjqsqslrgeoojgeiqorkaoaersaedqlnnjombbakokgmfcmdfikathefgpho", "igsjhjgonicefrmgdnslmckkpiglcqiqhatrpjnfkhpcjaqqtostnearkborljmlmopbrnkpscoqmeplssblehiqld", "mllhrkqjbsgjrsrgqpntqshpcicjshpmrkfffbsarkaohjbcmbadlbkmcfcilcqsebglmqgdatfpgfescasdiftrdg", "edroamrmmjmiaseaejqqrkgqrihnckllehhfopmlndtmnfdcscmaititperniejelsojgosdecdieradkepjbdrpar", "rjmkrkhglojacdcjdabbirmkmbbfqlcgdngqqeohpcgiqlfierabnleetghgbhhlaglgrhqpnlfhmhlmesksbgship", "ttbpkfthsjmrdqomctlethfpctqedcpmonlaplaelafiffibotqngdoeamehcfjrtplnhndoclflfkjdittkoeagfb", "tgheflscfoilrqaskohpqrmtmdbqfadcakclljhqneqsakpogcajklgamfofegiihjiteholmbtroensnnpdrndfoc", "csrehoifqhgbqkftlqpgsknfinpqgckidpitreaogatimfmgcpnnaoqgpttldaqttbckahsgdmodsncehpcejhjknc", "ngcjbjbkgfccgtrjaslnrtshfpaealjfgfatmaoamikfapckeorrlcmtktrnkqtenqigbhqgiqnebboljncnanphgh", "rgkjltcmcmapbblmctigpnkbcosarmlpliahghbashkcmqiqmlrildanhdlmkfldlkmfchpnbcogodpqchfobfngtm", "ciqcshjippbhdbbfqcroejfacmjhapbnlqrlomcctfpefcbqetlrmclqscpjnerppnebrfibcdkqfhkatltfkddfmj", "eaarpieffhkgjqqsmjiefiiaonoirgjippgcqgisfnbefdlbqoespitjcfqkfpdheogihrlecptkgkjmgmtqdfegjs", "nhmnistoqsadpjkkhecorqpbjokriakkqgnkisjgjqesclnafcqcdmsdaecgjcgtreeifcbolcrntjjebmeceqlbct", "fpomtreprhbsdkqrjnctilhpdgdicagfcbmodgkjfjhgqdiimmdjrsisadafmljjkhfnfqgjtmhtodnhaatmiodbtq", "lnqbjqpmlmgsimhtbqlbbtdqblskefibnkobqlllbtqieerkkfhgpkqafkrpiepsqakqndfjikblhhoonsiddghbqc",
71+
}
72+
73+
fmt.Printf("%d\n", minDeletionSize(strs))
74+
}
75+
76+
func main() {
77+
78+
// test1()
79+
// test2()
80+
// test3()
81+
test4()
82+
83+
}

longest-increasing-subsequence.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package main
2+
3+
func max(a, b int) int {
4+
if a > b {
5+
return a
6+
}
7+
8+
return b
9+
}
10+
11+
func lengthOfLIS(nums []int) int {
12+
n := len(nums)
13+
mem := make([]int, n)
14+
lis := 0
15+
16+
for i := 0; i < n; i++ {
17+
lisI := 1
18+
19+
for j := i - 1; j >= 0; j-- {
20+
if nums[j] < nums[i] {
21+
lisI = max(lisI, mem[j]+1)
22+
}
23+
}
24+
25+
mem[i] = lisI
26+
27+
lis = max(mem[i], lis)
28+
}
29+
30+
return lis
31+
}
32+
33+
func main() {
34+
35+
}

maximum-width-ramp.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
func max(a, b int) int {
8+
if a > b {
9+
return a
10+
}
11+
12+
return b
13+
}
14+
15+
func maxWidthRamp(A []int) int {
16+
rampSizeStack := []int{}
17+
18+
for i, s := range A {
19+
if len(rampSizeStack) == 0 || A[rampSizeStack[len(rampSizeStack)-1]] > s {
20+
rampSizeStack = append(rampSizeStack, i)
21+
}
22+
}
23+
24+
maxWidth := 0
25+
26+
for i := len(A) - 1; i >= 0 && len(rampSizeStack) > 0; i-- {
27+
if rampSizeStack[len(rampSizeStack)-1] > i {
28+
rampSizeStack = rampSizeStack[:len(rampSizeStack)-1]
29+
30+
continue
31+
}
32+
33+
for len(rampSizeStack) > 0 && A[rampSizeStack[len(rampSizeStack)-1]] <= A[i] {
34+
maxWidth = max(maxWidth, i-rampSizeStack[len(rampSizeStack)-1])
35+
36+
rampSizeStack = rampSizeStack[:len(rampSizeStack)-1]
37+
}
38+
}
39+
40+
return maxWidth
41+
}
42+
43+
func test1() {
44+
A := []int{6, 0, 8, 2, 1, 5}
45+
46+
fmt.Printf("ans = %d\n", maxWidthRamp(A))
47+
}
48+
49+
func test2() {
50+
A := []int{9, 8, 1, 0, 1, 9, 4, 0, 4, 1}
51+
52+
fmt.Printf("ans = %d\n", maxWidthRamp(A))
53+
}
54+
55+
func test3() {
56+
A := []int{9, 8, 1}
57+
58+
fmt.Printf("ans = %d\n", maxWidthRamp(A))
59+
}
60+
61+
func main() {
62+
test1()
63+
test2()
64+
test3()
65+
}

minimum-path-sum.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
func min(a, b int) int {
8+
if a < b {
9+
return a
10+
}
11+
12+
return b
13+
}
14+
15+
func minPathSum(grid [][]int) int {
16+
m := len(grid)
17+
n := len(grid[0])
18+
gridSum := make([][]int, m)
19+
20+
for i := 0; i < m; i++ {
21+
gridSum[i] = make([]int, n)
22+
23+
for j := 0; j < n; j++ {
24+
gridSum[i][j] = -1
25+
}
26+
}
27+
28+
gridSum[0][0] = grid[0][0]
29+
30+
for i := 0; i < m; i++ {
31+
for j := 0; j < n; j++ {
32+
if i > 0 {
33+
if gridSum[i][j] == -1 {
34+
gridSum[i][j] = grid[i][j] + gridSum[i-1][j]
35+
} else {
36+
gridSum[i][j] = min(gridSum[i][j], grid[i][j]+gridSum[i-1][j])
37+
}
38+
}
39+
40+
if j > 0 {
41+
if gridSum[i][j] == -1 {
42+
gridSum[i][j] = grid[i][j] + gridSum[i][j-1]
43+
} else {
44+
gridSum[i][j] = min(gridSum[i][j], grid[i][j]+gridSum[i][j-1])
45+
}
46+
}
47+
}
48+
}
49+
50+
return gridSum[m-1][n-1]
51+
}
52+
53+
func test1() {
54+
grid := [][]int{
55+
[]int{1, 3, 1},
56+
[]int{1, 5, 1},
57+
[]int{4, 2, 1},
58+
}
59+
60+
fmt.Printf("minSum: %d\n", minPathSum(grid))
61+
}
62+
63+
func test2() {
64+
grid := [][]int{
65+
[]int{1, 3},
66+
[]int{5, 2},
67+
}
68+
69+
fmt.Printf("minSum: %d\n", minPathSum(grid))
70+
}
71+
72+
func main() {
73+
test1()
74+
test2()
75+
}

prison-cells-after-n-days.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func prisonAfterNDays(cells []int, N int) []int {
9292
}
9393

9494
if lastSeen[num] == 0 {
95-
N = N%(checkedOffset-lastSeen[num]) + 1
95+
N = N % (checkedOffset - lastSeen[num])
9696
} else {
9797
N = (N % (checkedOffset - lastSeen[num])) + (checkedOffset - lastSeen[num] - 1)
9898
}

rotate-list.go

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
type ListNode struct {
8+
Val int
9+
Next *ListNode
10+
}
11+
12+
func listLen(head *ListNode) int {
13+
n := 0
14+
15+
for head != nil {
16+
head = head.Next
17+
n++
18+
}
19+
20+
return n
21+
}
22+
23+
/**
24+
* Definition for singly-linked list.
25+
* type ListNode struct {
26+
* Val int
27+
* Next *ListNode
28+
* }
29+
*/
30+
func rotateRight(head *ListNode, k int) *ListNode {
31+
n := listLen(head)
32+
var newHead *ListNode
33+
origHead := head
34+
35+
if n == 0 {
36+
return head
37+
}
38+
39+
k = k % n
40+
41+
if k == 0 {
42+
return head
43+
}
44+
45+
var lastNode *ListNode
46+
47+
for i := 0; i < n; i++ {
48+
lastNode = head
49+
50+
if i == n-k-1 {
51+
newHead = head.Next
52+
head.Next = nil
53+
head = newHead
54+
} else {
55+
head = head.Next
56+
}
57+
}
58+
59+
lastNode.Next = origHead
60+
61+
return newHead
62+
}
63+
64+
func printList(head *ListNode) {
65+
for head != nil {
66+
fmt.Printf("%d", head.Val)
67+
68+
if head.Next != nil {
69+
fmt.Printf(" ")
70+
}
71+
72+
head = head.Next
73+
}
74+
75+
fmt.Println()
76+
}
77+
78+
func test1() {
79+
n3 := &ListNode{3, nil}
80+
n2 := &ListNode{2, n3}
81+
n1 := &ListNode{1, n2}
82+
83+
rotated := rotateRight(n1, 1)
84+
printList(rotated)
85+
}
86+
87+
func test2() {
88+
n3 := &ListNode{3, nil}
89+
n2 := &ListNode{2, n3}
90+
n1 := &ListNode{1, n2}
91+
92+
rotated := rotateRight(n1, 2)
93+
printList(rotated)
94+
}
95+
96+
func test3() {
97+
n3 := &ListNode{3, nil}
98+
n2 := &ListNode{2, n3}
99+
n1 := &ListNode{1, n2}
100+
101+
rotated := rotateRight(n1, 3)
102+
printList(rotated)
103+
}
104+
105+
func main() {
106+
test1()
107+
test2()
108+
test3()
109+
}

0 commit comments

Comments
 (0)