日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 知識百科

調整數組元素順序,你了解幾分?

來源: 責編: 時間:2023-08-07 16:30:11 318觀看
導讀 前言有一個整數數組,我們想按照特定規則對數組中的元素進行排序,比如:數組中的所有奇數位于數組的前半部分。實現思路我們通過一個實例來分析下:假設有這樣一個數組:[2, 4, 5, 6,

前言iA628資訊網——每日最新資訊28at.com

有一個整數數組,我們想按照特定規則對數組中的元素進行排序,比如:數組中的所有奇數位于數組的前半部分。iA628資訊網——每日最新資訊28at.com

實現思路iA628資訊網——每日最新資訊28at.com

我們通過一個實例來分析下:假設有這樣一個數組:[2, 4, 5, 6, 7, 8, 9, 11],將奇數移動到最前面后,就是:[11, 9, 5, 7, 6, 8, 4, 2]。iA628資訊網——每日最新資訊28at.com

通過觀察后,我們發現在掃描這個數組的時候,如果發現有偶數出現在奇數的前面, 就交換他們的順序,交換之后就符合要求了。iA628資訊網——每日最新資訊28at.com

因此,我們可以維護兩個指針:iA628資訊網——每日最新資訊28at.com

第一個指針初始化時指向數組的第一個數字,它只向后移動;第二個指針初始化時指向數組的最后一個數字,它只向前移動;iA628資訊網——每日最新資訊28at.com

在兩個指針相遇之前,第一個指針總是位于第二個指針的前面。如果第一個指針指向的數字是偶數,并且第二個指針指向的數字是奇數,則交換這兩個數字。iA628資訊網——每日最新資訊28at.com

接下來,我們來通過圖來描述下上述例子交換指針的過程,如下所示:iA628資訊網——每日最新資訊28at.com

第一個指針永遠指向偶數,如果不為偶數就向后移動;第二個指針永遠指向奇數,如果不為奇數就向前移動;當兩個指針各自指向的數都符合條件時,就交換兩個元素的位置;交換完成后,重復上述步驟,直至兩個指針相遇或者第一個指針位于第二個指針之后則代表問題已得到解決。iA628資訊網——每日最新資訊28at.com

iA628資訊網——每日最新資訊28at.com

實現代碼iA628資訊網——每日最新資訊28at.com

有了思路之后,我們來看下實現代碼,如下所示:iA628資訊網——每日最新資訊28at.com

export class AdjustArrayOrder {iA628資訊網——每日最新資訊28at.com
// 指向數組元素的兩個指針:一個指向數組頭部、一個指向數組尾部iA628資訊網——每日最新資訊28at.com
private begin = 0;iA628資訊網——每日最新資訊28at.com
private end = 0;iA628資訊網——每日最新資訊28at.com
iA628資訊網——每日最新資訊28at.com
// 調整數組中奇數與偶數元素的位置:奇數位于偶數前面iA628資訊網——每日最新資訊28at.com
reorderOddEven(arr: Array): void {iA628資訊網——每日最新資訊28at.com
this.end = arr.length - 1;iA628資訊網——每日最新資訊28at.com
while (this.begin < this.end) {iA628資訊網——每日最新資訊28at.com
// 向后移動begin(轉成二進制跟1做與運算,運算結果為0就表示為偶數),直至其指向偶數iA628資訊網——每日最新資訊28at.com
while (this.begin < this.end && (arr[this.begin] & 0x1) !== 0) {iA628資訊網——每日最新資訊28at.com
this.begin++;iA628資訊網——每日最新資訊28at.com
}iA628資訊網——每日最新資訊28at.com
iA628資訊網——每日最新資訊28at.com
// 向前移動end(轉成二進制跟1做與運算,運算結果為1就表示為奇數),直至其指向奇數iA628資訊網——每日最新資訊28at.com
while (this.begin < this.end && (arr[this.end] & 0x1) === 0) {iA628資訊網——每日最新資訊28at.com
this.end--;iA628資訊網——每日最新資訊28at.com
}iA628資訊網——每日最新資訊28at.com
iA628資訊網——每日最新資訊28at.com
// begin指向了偶數,end指向了奇數iA628資訊網——每日最新資訊28at.com
if (this.begin < this.end) {iA628資訊網——每日最新資訊28at.com
// 交換兩個元素的順序iA628資訊網——每日最新資訊28at.com
[arr[this.begin], arr[this.end]] = [arr[this.end], arr[this.begin]];iA628資訊網——每日最新資訊28at.com
}iA628資訊網——每日最新資訊28at.com
}iA628資訊網——每日最新資訊28at.com
// 重置指針位置iA628資訊網——每日最新資訊28at.com
this.begin = 0;iA628資訊網——每日最新資訊28at.com
this.end = 0;iA628資訊網——每日最新資訊28at.com
}iA628資訊網——每日最新資訊28at.com
}代碼的可擴展iA628資訊網——每日最新資訊28at.com

性如果數組中的元素不按照奇前偶后排列,我們需要將其按照大小進行劃分,所有負數都排在非負數的前面,應該怎么做?iA628資訊網——每日最新資訊28at.com

聰明的開發者可能已經想到了方案:雙指針的思路還是不變,我們只需修改內層while循環的的判斷條件即可。iA628資訊網——每日最新資訊28at.com

這樣回答沒有問題,確實解決了這個問題,那么如果再改改題目,我們需要把數組中的元素分為兩部分,能被3整除的數都在不能被3整除的數前面,應該怎么做?iA628資訊網——每日最新資訊28at.com

經過思考后,我們發現這個問題無論再怎么改變都有一個共同的部分:雙指針的邏輯永遠不會變。變化的只是判斷條件,那么我們就可以把變化的部分提取成函數,當作參數讓調用者傳進來,這樣就完美的解決了這個問題,也正是我們所提及的代碼的可擴展性。iA628資訊網——每日最新資訊28at.com

最后,我們來看下實現代碼,如下所示:iA628資訊網——每日最新資訊28at.com

// 元素排序iA628資訊網——每日最新資訊28at.com
reorder(arr: Array, checkFun: (checkVal: number) => boolean): void {iA628資訊網——每日最新資訊28at.com
this.end = arr.length - 1;iA628資訊網——每日最新資訊28at.com
while (this.begin < this.end) {iA628資訊網——每日最新資訊28at.com
// 向后移動beginiA628資訊網——每日最新資訊28at.com
while (this.begin < this.end && !checkFun(arr[this.begin])) {iA628資訊網——每日最新資訊28at.com
this.begin++;iA628資訊網——每日最新資訊28at.com
}iA628資訊網——每日最新資訊28at.com
iA628資訊網——每日最新資訊28at.com
// 向前移動endiA628資訊網——每日最新資訊28at.com
while (this.begin < this.end && checkFun(arr[this.end])) {iA628資訊網——每日最新資訊28at.com
this.end--;iA628資訊網——每日最新資訊28at.com
}iA628資訊網——每日最新資訊28at.com
iA628資訊網——每日最新資訊28at.com
// begin與end都指向了正確的位置iA628資訊網——每日最新資訊28at.com
if (this.begin < this.end) {iA628資訊網——每日最新資訊28at.com
// 交換兩個元素的順序iA628資訊網——每日最新資訊28at.com
[arr[this.begin], arr[this.end]] = [arr[this.end], arr[this.begin]];iA628資訊網——每日最新資訊28at.com
}iA628資訊網——每日最新資訊28at.com
}測試用例iA628資訊網——每日最新資訊28at.com

我們先來測試下奇數在偶數之前的函數處理代碼能否正常執行,如下所示:iA628資訊網——每日最新資訊28at.com

const adjustArrayOrder = new AdjustArrayOrder();iA628資訊網——每日最新資訊28at.com
// 奇數在前iA628資訊網——每日最新資訊28at.com
const arr = [2, 4, 5, 6, 7, 8, 9, 11];iA628資訊網——每日最新資訊28at.com
adjustArrayOrder.reorderOddEven(arr);iA628資訊網——每日最新資訊28at.com
console.log(arr);iA628資訊網——每日最新資訊28at.com

執行結果如下所示:iA628資訊網——每日最新資訊28at.com

iA628資訊網——每日最新資訊28at.com

最后,我們來測試下reorder函數能否正常執行:iA628資訊網——每日最新資訊28at.com

負數在數組的最前面// 負數在前iA628資訊網——每日最新資訊28at.com
const checkMinusNumber = function (val: number) {iA628資訊網——每日最新資訊28at.com
return val > 0;iA628資訊網——每日最新資訊28at.com
};iA628資訊網——每日最新資訊28at.com
const arr = [2, 4, 5, 6, 7, -8, -10 - 12, -2];iA628資訊網——每日最新資訊28at.com
adjustArrayOrder.reorder(arr, checkMinusNumber);iA628資訊網——每日最新資訊28at.com
console.log(arr);iA628資訊網——每日最新資訊28at.com

iA628資訊網——每日最新資訊28at.com

能被3整除的數在數組的最前面const checkDivisible = function (val: number) {iA628資訊網——每日最新資訊28at.com
return val % 3 !== 0;iA628資訊網——每日最新資訊28at.com
};iA628資訊網——每日最新資訊28at.com
const arr = [2, 4, 5, 6, 3, 6, 9, 12];iA628資訊網——每日最新資訊28at.com
adjustArrayOrder.reorder(arr, checkDivisible);iA628資訊網——每日最新資訊28at.com
console.log(arr);iA628資訊網——每日最新資訊28at.com

iA628資訊網——每日最新資訊28at.com

示例代碼iA628資訊網——每日最新資訊28at.com

文中所舉代碼的完整版請移步:iA628資訊網——每日最新資訊28at.com

AdjustArrayOrder.ts[1]adjustArrayOrder-test.ts[2]參考資料iA628資訊網——每日最新資訊28at.com

[1]AdjustArrayOrder.ts: https://github.com/likaia/algorithm-practice/blob/e7f6a38021426397af60a73d4c6b8bf88548ba91/src/AdjustArrayOrder.ts#L2iA628資訊網——每日最新資訊28at.com

[2]adjustArrayOrder-test.ts: https://github.com/likaia/algorithm-practice/blob/e7f6a38021426397af60a73d4c6b8bf88548ba91/src/test-case/adjustArrayOrder-test.ts#L3iA628資訊網——每日最新資訊28at.com

[3]個人網站: https://www.kaisir.cn/iA628資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-119-2283-0.html調整數組元素順序,你了解幾分?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 數據分析和數據科學的五大不同之處 譯文

下一篇: 亞馬遜云計算主管:AWS將保持云服務領先地位 不打算將其分拆

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 5月iOS設備好評榜:iPhone 14僅排第43?

    來到新的一月,安兔兔的各個榜單又重新匯總了數據,像安卓陣營的榜單都有著比較大的變動,不過iOS由于設備的更新換代并沒有那么快,所以相對來說變化并不大,特別是iOS好評榜,老款設
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業務來說可快速實現自動化的上手工作。Selenium IDEKat
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態LT(ID:LingTai_LT)2023年,出海市場戰況空前,中國創業者在海外紛紛摩拳擦掌,以期能夠把中國的商業模式、創業理念、戰略打法輸出海外,他們依
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一
  • OPPO K11評測:旗艦級IMX890加持 2000元檔最強影像手機

    【Techweb評測】中端機型用戶群體巨大,占了中國目前手機市場的大頭,一直以來都是各手機品牌的“必爭之地”,其中OPPO K系列機型一直以來都以高品質、
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風扇版本

    據10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風扇版本。另外,這款顯卡 PCB
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美性色综合| 欧美日韩一区二区三区高清| 香蕉成人久久| 久久久99久久精品女同性| 麻豆精品视频在线观看| 欧美片第一页| 国产精品麻豆成人av电影艾秋 | 欧美欧美全黄| 国产精品私房写真福利视频| 韩国av一区二区三区| 亚洲高清不卡在线| 制服丝袜亚洲播放| 久久精品人人做人人爽电影蜜月 | 免费亚洲电影| 欧美体内谢she精2性欧美| 国产亚洲欧美在线| 亚洲精品在线免费| 欧美亚洲视频在线观看| 欧美高清不卡在线| 国产精品丝袜xxxxxxx| 黄色精品网站| 亚洲性图久久| 美女尤物久久精品| 国产精品美女诱惑| 亚洲国产精品悠悠久久琪琪| 亚洲欧美日韩国产综合| 久久在精品线影院精品国产| 欧美视频一区二区三区四区| 玉米视频成人免费看| 亚洲尤物精选| 欧美国产日韩二区| 国产一区二区三区久久久| 一本色道久久88精品综合| 久久久水蜜桃| 国产精品伦子伦免费视频| 亚洲日本久久| 久久久噜噜噜| 国产精品亚洲一区二区三区在线| 91久久极品少妇xxxxⅹ软件| 欧美一区二区视频观看视频| 欧美日韩亚洲激情| 亚洲国产清纯| 久久久久久久久伊人| 国产精品伦子伦免费视频| 亚洲欧洲一区二区天堂久久| 亚洲男人天堂2024| 亚洲激情在线观看| 国产精品一区免费观看| 影音先锋中文字幕一区| 在线亚洲伦理| 牛人盗摄一区二区三区视频| 国产精品影院在线观看| 欧美日韩另类字幕中文| 欧美一区二区三区在线视频| 国产一区二区三区最好精华液| 国产精品红桃| 国产精品理论片在线观看| 国产精品自拍在线| 国产综合视频| 亚洲国产欧美久久| 亚洲一区二区不卡免费| 亚洲婷婷综合久久一本伊一区| 国产精品爱久久久久久久| 亚洲网站视频| 国产午夜亚洲精品羞羞网站| 美国成人直播| 亚洲综合精品四区| 亚洲精品久久久久久一区二区| 国产精品外国| 欧美精品亚洲二区| 久久av老司机精品网站导航| 国产午夜精品理论片a级探花| 国产日韩欧美亚洲一区| 国产精品99久久不卡二区| 欧美日韩第一区| 亚洲美女毛片| 欧美片网站免费| 亚洲精品一二区| 欧美高清日韩| 亚洲精品在线视频观看| 欧美精品久久久久久久免费观看 | 国产精品国产福利国产秒拍 | 一本色道88久久加勒比精品 | 国产亚洲欧美激情| 99国产精品| 欧美精品日韩| 日韩视频在线播放| 欧美激情综合五月色丁香| 亚洲日本电影| 欧美久久综合| 亚洲无线观看| 国产伦精品一区| 欧美一区二区女人| 黄色精品免费| 嫩草成人www欧美| 亚洲日本免费| 欧美天天视频| 久久爱另类一区二区小说| 尤物yw午夜国产精品视频| 欧美激情久久久久| 亚洲午夜视频在线观看| 国产嫩草一区二区三区在线观看| 欧美一区二区三区四区在线 | 亚洲一区网站| 国产欧美在线播放| 久久人91精品久久久久久不卡| 亚洲高清久久久| 欧美美女bb生活片| 亚洲欧美制服另类日韩| 韩国v欧美v日本v亚洲v| 模特精品在线| 亚洲无限av看| 国产综合一区二区| 欧美成人日本| 亚洲综合激情| 经典三级久久| 欧美日韩天天操| 欧美一级久久久| 在线成人小视频| 欧美日韩精品久久久| 午夜久久黄色| 亚洲国产成人久久综合一区| 欧美日韩18| 欧美资源在线| 日韩系列欧美系列| 国产喷白浆一区二区三区| 免播放器亚洲| 亚洲制服少妇| 亚洲第一主播视频| 国产精品jizz在线观看美国| 久久精品国内一区二区三区| 亚洲精品综合精品自拍| 国产欧美激情| 欧美日韩成人网| 欧美伊人久久久久久午夜久久久久| 亚洲第一精品夜夜躁人人爽| 欧美先锋影音| 免费不卡在线观看av| 亚洲综合色视频| 亚洲国产另类久久精品| 国产精品五区| 欧美黑人一区二区三区| 新狼窝色av性久久久久久| 最新中文字幕一区二区三区| 国产精品男女猛烈高潮激情| 美女久久网站| 欧美一区二区三区视频| 亚洲精品老司机| 国产综合网站| 国产精品极品美女粉嫩高清在线| 米奇777在线欧美播放| 亚洲欧美日韩国产一区二区三区 | 欧美日韩喷水| 久久免费少妇高潮久久精品99| 亚洲一级免费视频| 亚洲人成在线播放| 好吊视频一区二区三区四区| 欧美视频在线观看视频极品| 老司机精品福利视频| 午夜在线成人av| 这里只有精品视频在线| 亚洲国产美女精品久久久久∴| 国产亚洲欧美日韩一区二区| 欧美性色aⅴ视频一区日韩精品| 欧美成人精品三级在线观看| 性做久久久久久| 亚洲午夜影视影院在线观看| 亚洲精品小视频| 在线日韩一区二区| 国产婷婷色一区二区三区在线| 欧美视频在线观看免费网址| 欧美成人免费播放| 久久亚洲国产成人| 欧美在线免费一级片| 亚洲欧美国产精品桃花| 一区二区三区福利| 亚洲伦理在线免费看| 亚洲国产视频一区| 在线观看av一区| 国产一区清纯| 国产欧美视频一区二区| 国产精品成人一区| 欧美日韩一区三区| 欧美日韩网址| 欧美日本亚洲视频| 欧美久久在线| 欧美日本韩国一区| 欧美激情一级片一区二区| 美玉足脚交一区二区三区图片| 久久婷婷国产综合尤物精品| 久久精品日韩欧美| 欧美在线影院| 久久国产精品网站| 久久久久**毛片大全| 久久久久久电影| 久久精品国产第一区二区三区最新章节| 亚洲欧美在线免费观看| 午夜精彩国产免费不卡不顿大片| 亚洲一级电影| 亚洲在线视频一区| 亚洲综合第一页| 亚洲欧美一区二区在线观看| 午夜精品久久久久久久99水蜜桃| 亚洲免费一级电影|