面試中的算法(查找缺失的整數)

? ? ?在一個無序數組里有99個不重復的正整數,范圍是1~100,唯獨缺少1個1~100中的整數。如何找出這個缺失的整數?

? ? ? 一個很簡單也很高效的方法,先算出1~100之和,然后依次減去數組里的元素,最后得到的差值,就是那個缺失的整數。

假設數組長度是n,那么該解法的時間復雜度是O (n),空間復雜度是O (1)。

import random
#數組
def find_1(n):ll=[]#隨機生成1-n的一個數作為缺失數rd= random.randint(1,n+1)# print(rd)#循環數據for i in range(1,n+1):if i!=rd:ll.append(i)print(ll)return ll#查找缺失的整數
def find_number(n):ll=find_1(n)#累計和sum1=sum(ll)#累計1..n和sum2=((1+n)*n)//2print(sum1,sum2)return sum2-sum1if __name__ == '__main__':# print(find_number(10))print(find_number(100))

?

擴展題1:

一個無序數組里有若干個正整數,范圍是1~100,其中99個整數都出現了偶數次,只有1個整數出現了奇數次,如何找到這個出現奇數次的整數?

? ? ?遍歷整個數組,依次做異或運算。由于異或運算在進行運算時,相同為0,不同為1,

? ? ?因此所有出現偶次的整數都會相互抵消成為0,只有唯一出現奇數的整數會被留下。

?

def find2(ll):lost=0for i in range(len(ll)):#異或運算lost=lost^ll[i]return lostif __name__ == '__main__':ll=[3,1,3,2,2,8,1]print(find2(ll))

如果數組長度為n,該解法的時間復雜度是O(n),空間復雜度為O(1)。?

?擴展題2:

假設一個無序數組里有若干個正整數, 范圍是1~ 100, 其中有98個整數出現了偶數次, 只有2個整數出現了奇數次, 如何找到這2個出現奇數次的整數?

使用分治算法,設這兩個整數為A,B。

1、先將數組內元素異或得到A,B的異或值。

2、將該值對應的二進制位從右至左找到第一個為1的值sep,表示A,B對應的二進制表示在此處的位置相異,設A為1,B為0。

3、利用此區別,將數組中的其他元素和sep相與,為1和A劃為一組,為0和B劃為一組。

4、利用擴展1求解。

def find3(ll):# 用于存儲兩個出現奇數次的整數result=[0,0]# 第一次整體異或lost = 0for i in range(len(ll)):# 異或運算lost = lost ^ ll[i]# 如果異或結果為0,說明輸入數組不符合題目if lost==0:raise ValueError# 確定兩個整數的不同位,以此來做分組sep=1while lost & sep==0:sep<<=1# 第二次分組異或for i in range(len(ll)):if ll[i] & sep==0:result[0]^=ll[i]else:result[1]^=ll[i]return resultif __name__ == '__main__':ll=[3,1,3,2,2,8,1,4]print(find3(ll))

?

如果數組長度是n,該解法的時間復雜度是O(n)。把數組分成兩部分,并不需要借助額外的存儲空間,完全可以在按二進制位分組的同時來做異或運算,所以空間復雜度仍然是O(1)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11795.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11795.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11795.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

目標檢測YOLO實戰應用案例100講-基于深度學習的無人機航拍圖像目標檢測算法研究與應用(中)

目錄 4.2旋轉角度 4.3數據集預處理 4.4旋轉框網絡結構設計 4.5實驗結果與分析

集合系列(二十五) -二叉樹、平衡二叉樹、紅黑樹性能總結

一、摘要 二叉樹&#xff0c;作為一種數據結構&#xff0c;在實際開發中&#xff0c;有著非常廣泛的應用&#xff0c;尤其是以平衡二叉樹、紅黑樹為代表&#xff0c;在前幾篇文章中&#xff0c;我們詳細的介紹了BST、AVL、RBT的算法以及代碼實踐&#xff0c;下面簡要概括描述一…

deveco studio 打開官方案例,不顯示運行按鈕。

就拿官方的search舉例好了 git 地址 https://gitee.com/harmonyos/samples/tree/master/ETSUI/Search 使用deveco studio打開Search項目&#xff0c;打開Tools->Device-Manager中的Local Emulator本地模擬器&#xff0c; 此時會發現&#xff0c;運行按鈕是灰色的&#xff0…

水利行業工程設計資質如何去申請

申請水利行業工程設計資質通常需要按照以下步驟進行&#xff1a; 事前準備&#xff1a; 制定材料清單&#xff0c;羅列出所需準備的文件。下載相關的申請表和模板。準備企業資料和人員資料等附件材料。人員要求&#xff1a; 確保企業擁有符合水利行業工程設計資質標準要求的注…

源碼 axios 的創建過程模擬實現

1、在實例對象上添加兩個屬性&#xff1a;default(默認配置) 與 interscptors // //構造函數function Axios(config) {//初始化this.defaults config;//為了創建 default 默認屬性this.interceptors {request: {},response: {}}} 2、在原型對象上添加方法 //原型添加相關的…

從零學算法994

994. 腐爛的橘子 在給定的 m x n 網格 grid 中&#xff0c;每個單元格可以有以下三個值之一&#xff1a; 值 0 代表空單元格&#xff1b; 值 1 代表新鮮橘子&#xff1b; 值 2 代表腐爛的橘子。 每分鐘&#xff0c;腐爛的橘子 周圍 4 個方向上相鄰 的新鮮橘子都會腐爛。 返回 直…

微信小程序中的數據可視化組件封裝藝術【附代碼】

微信小程序中的數據可視化組件封裝藝術 一、數據可視化的魅力與重要性數據可視化簡述為什么要在小程序中封裝數據可視化組件 二、微信小程序數據可視化基礎小程序中的繪圖工具&#xff1a;Canvas 三、實戰&#xff1a;封裝一個簡易折線圖組件設計思路組件結構&#xff08;line-…

java mybatis配置

MyBatis是一種支持自定義SQL、存儲過程和高級映射的持久層框架。下面是一個簡單的Java MyBatis配置示例&#xff1a; 首先&#xff0c;需要添加MyBatis的依賴到項目的pom.xml文件中&#xff1a; <dependency><groupId>org.mybatis</groupId><artifactId…

Python3 筆記:順序結構

三種程序執行結構&#xff1a;順序結構、選擇結構和循環結構。 這三種結構對應的是&#xff1a;順序執行所有的語句、選擇執行部分語句和循環執行部分語句。 順序結構是程序最基本的結構。就是程序按照語句順序&#xff0c;從上到下依次執行各條語句。 例如&#xff1a; nu…

【運維實踐項目|003】:Nginx集群化運維升級項目

項目名稱 項目簡稱或代號&#xff1a;SUN項目&#xff08;這個可以自己隨便編一個&#xff0c;每個公司的每個項目簡稱或代號都是內部任意起名的&#xff0c;顯得專業一點&#xff0c;一般是項目關鍵詞的首拼&#xff0c;比如這個CSUN是&#xff1a;ScaleUp Nginx&#xff09;…

一道dp錯題

dis(a,b)就是兩點之間的距離公式 那么這道題該怎么解呢,.先看數據范圍x,y<1e4,so,18個點兩點之間距離最大18*1e4*sqrt(2)<2^18,所以如果跳過的點大于18個點,那么顯然一個區間內最多不會跳躍超過17個點 現在我們想知道前i個點跳躍幾次在哪跳躍能夠達到最小花費,不妨設跳…

【OceanBase診斷調優】—— 轉儲錯誤(錯誤代碼 4138/ORA-01555)

當讀事務很長時&#xff0c;租戶進行轉儲會報 4138/ORA-01555 錯誤。本文介紹該錯誤的處理方法。 適用版本 OceanBase 數據庫 V2.X 及以后的版本 問題現象 當讀事務很長&#xff0c;租戶進行轉儲時會出現以下錯誤。 Oracle 租戶&#xff1a; ORA-01555&#xff1a;snapsho…

Keil調用跟蹤

調試時程序卡在一個位置&#xff0c;恰巧這個函數被很多地方調用&#xff0c;需要知道上一步在哪。 程序暫停后&#xff0c; 查看調用堆棧&#xff0c;點擊Keil菜單欄中的“View”&#xff0c;然后選擇“Call Stack”&#xff08;調用堆棧&#xff09;選項。這將顯示當前的調用…

市場活動系統搭建

精細差異化運營在今天的企業越來越普遍&#xff0c;運營驅動占據了業務經營的主導地位。各種營銷活動&#xff0c;幫助我們差異化運營、激發潛在客戶、帶動連帶消費、增加銷售額度、提升用戶增長、實現品牌宣傳。 天貓、京東上有各種各樣的促銷活動。如&#xff1a;滿減、滿返、…

算法day04

第一題 &#xff1a; 209. 長度最小的子數組 有上題可知&#xff0c;我們會采用雙指針和單調性的思路來解決 我們本題采用左右雙指針從數組的0位置同向前進&#xff0c;所以將此類模型稱為滑塊&#xff1b; 步驟思路如下&#xff1a; 步驟一&#xff1a; 定義所有雙指針都指向…

Prompt提示詞的技巧

Prompt提示詞的技巧 要讓GPT類模型產生最符合我們需求的輸出&#xff0c;我們需要精心設計和調整輸入的提示詞&#xff08;Prompt&#xff09;。 1、明確性&#xff1a; 確保你的提示詞清晰、具體。GPT類模型會根據你給出的信息來生成文本&#xff0c;因此&#xff0c;提供詳…

【實踐】使用vscode來debug go程序的嘗鮮

配置 首先&#xff0c;當然得配置好vscode 的go環境&#xff0c; 裝個go插件就基本滿足了 配置 launch.json, 可以配置多個環境的程序啟動參數&#xff08;很友好&#xff09; {"version": "0.2.0","configurations": [{"name": &…

ArrayList與LinkedList的區別

一、背景與現狀 在Java編程中&#xff0c;ArrayList和LinkedList都是實現List接口的重要類&#xff0c;用于存儲和操作動態大小的元素集合。兩者在Java集合框架中占據了核心地位&#xff0c;并被廣泛應用于各種軟件項目中。然而&#xff0c;盡管它們都提供了類似的功能&#x…

海外客戶開發渠道有哪些

海外客戶開發是一個多元化的過程&#xff0c;涉及線上與線下多個渠道。以下是一些有效的海外客戶開發渠道&#xff1a; 平臺電商&#xff1a; 利用國際B2B電商平臺&#xff0c;如阿里巴巴國際站、 Globalsources、Made-in-China等&#xff0c;這些平臺擁有龐大的國際買家流量&a…

STM32學習和實踐筆記(27):USART串口通信實驗程序

本實驗所要實現的功能是&#xff1a;STM32F1通過USART1實現與PC機對話&#xff0c;STM32F1的USART1收到PC機發來的數據后原封不動的返回給PC機顯示。同時使用D1指示燈不斷閃爍提示系統正常運行。程序框架如下&#xff1a; &#xff08;1&#xff09;初始化USART1&#xff0c;并…