已知順序表L中的元素為int,請寫一時間複雜度O(n)、空間複雜度為O(1)的程式,將L中的奇數元素排在前面,偶數元素排在後面
Status exchangeEvenOddNumbers(SeqList &S){ int j = 0,k = 0; for(int i = 0;i<=S.last;i++){ if(S.elem[i]%2 == 1){ k = S.elem[j]; S.elem[j] = S.elem[i]; S.elem[i] = k; j++; }else{ continue; } } return OK; };
演算法分析,由於時間複雜度為n,所以只能出現一個for迴圈;空間複雜度為1,只能使用原有順序表記憶體空間;
定義變數 j ,始終記錄順序表中第一個非奇數(也就是第一個偶數唄) 的下標;定義中間變數 k ,臨時儲存第一個非奇數的值,與查詢到的奇數的值進行互換;
整體思路:從頭查詢,只要查詢到奇數,就和第一個非奇數交換位置,因為只有一個 for 迴圈 , 所以時間複雜度為1;
相關推薦
已知順序表L中的元素為int,請寫一時間複雜度O(n)、空間複雜度為O(1)的程式,將L中的奇數元素排在前面,偶數元素排在後面
Status exchangeEvenOddNumbers(SeqList &S){ int j = 0,k = 0; for(int i = 0;i<=S.last;i++){ if(S.elem[i]%2 == 1){ k
已知長度為n的線性表A採用順序儲存結構,請寫一個時間複雜度為O(n)、空間複雜度為O(1)的演算法,該演算法可刪除線性表中所有值為item的資料元素。
語言:C++ #include <iostream> using namespace std; typedef int ElemType; //定義 #define MAXSIZE 100 typedef struct {ElemType *elem; int length;}Sq
排序演算法--時間複雜度(平均時間,最壞情況)、空間複雜度
1、時間複雜度:一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間量度記作:
資料結構--C語言--已知線性表中的元素以值遞增有序排列,並以單鏈表作儲存結構。試寫一高效演算法,刪除表中所有值大於mink且小於maxk的元素
#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define LEN sizeof(struct LNode) struct LNode{ int data;//資料域 struct
已知線性表中元素以值遞增有序排列,並以單鏈表作為儲存結構,設計一個演算法,刪除表中值相同的多餘元素
/* 已知線性表中元素以值遞增有序排列,並以單鏈表作為儲存結構 * 設計一個演算法,刪除表中值相同的多餘元素 * 使得操作後表中所用元素值均不同,同時釋放被刪除的結點空間 */ #include<stdio.h> #inclu
將陣列中奇數都放前面,偶數都放在後面
void adjust(int *arr,int left,int right) { int temp; while(left<right) { if(1==left%2)
假設高度已知,請寫出三欄佈局,其中左欄、右欄寬度各為300px,中間自適應
解決方案: <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>test1<
在股市的交易日中,假設最多可進行兩次買賣(即買和賣的次數均小於等於2),規則是必須一筆成交後進行另一筆(即買-賣-買-賣的順序進行)。給出一天中的股票變化序列,請寫一個程式計算一天可以獲得的最大收益。
思想來源於動態規劃,如果以arr[i]為第二個投資點,那麼,必須找到i-1前面的最大投資收益 class Stock { public: int maxProfit(vector<
雅虎面試題─有兩個雙向迴圈連結串列A,B,知道其頭指標為:pHeadA,pHeadB,請寫一函式將兩連結串列中data值相同的結點刪除
有雙向迴圈連結串列結點定義為: struct node { int data; struct node *front,*next; }; 有兩個雙向迴圈連結串列A,B,知道其頭指標為:pHeadA,pHeadB,請寫一函式將兩連結串列中data值相同的結點刪
設計一個程序,有一個虛擬存儲區和內存工作區,實現下述三種算法中的任意兩種,計算訪問命中率(命中率=1-頁面失效次數/頁地址流長度)。附加要求:能夠顯示頁面置換過程。算法包括:先進先出的算法(FIFO)、最少使用算法(LFU)、最近未使用算法(NUR)
== oat 程序 表示 隊列 ini ++ 等待 進程 第一部分。。。 #include <cstdlib>#include<conio.h> #include<stdio.h>#include<stdlib.h>#incl
SparkSQL中的三種Join及其實現(broadcast join、shuffle hash join和sort merge join)
1.小表對大表(broadcast join) 將小表的資料分發到每個節點上,供大表使用。executor儲存小表的全部資料,一定程度上犧牲了空間,換取shuffle操作大量的耗時,這在SparkSQL中稱作Broadcast Join Broadcast Jo
VS中的多執行緒(/MT)、多執行緒除錯(/MTd)、多執行緒DLL(/MD)、多執行緒除錯DLL(/MDd)的區別
一種語言的開發環境往往會附帶有語言庫,這些庫就是對作業系統的API的包裝,我們也稱這些語言庫為執行庫 對於MSVC的執行庫(CRT),按照靜態/動態連結,可以分為靜態版和動態版;按照除錯/釋出,可以分為除錯版本和釋出版本;按照單執行緒/多執行緒,可以分為單執行緒版本和多執行
PHP的strtolower()和strtoupper()函式在安裝非中文系統的伺服器下可能會導致將漢字轉換為亂碼,請寫兩個替代的函式實現相容Unicode文字的字串大小寫轉換
最近看到一個比較有意思的問題,如題。 首先檢視php函式的實現原始碼,以strtolower為例,原始碼如下 c = (unsigned char *)s; e = c+len; // 遍歷s,逐個變為小寫 while (c < e) { *c
十一、接口(接口的概念,實現,繼承,實現)、抽象類與抽象方法(抽象類,抽象方法概念,使用)
輸出 重寫 關鍵字 new clas main ride ring strac 接口 接口是一種用來定義程序的協議,它描述可屬於任何類和結構的一組相關行為。 接口可由方法、屬性、事件和索引器這四種成員類型的任何組合構成,但不能包含字段。 接口通過類繼承來實現,一個類雖然只能
作業系統,核心定時器:使用“訊號”建立一種使用者空間機制來測量一個多執行緒程式的執行時間。
核心是一個作業系統的核心。它負責管理系統的程序、記憶體、裝置驅動程式、檔案和網路系統,決定著系統的效能和穩定性。 定時器是Linux提供的一種定時服務的機制,它在某個特定的時間喚醒某個程序來進行工作。核心在時鐘中斷髮生後檢測各定時器是否到期,在li
deepin15.7安裝與解除安裝MySQL(解決不提示設定密碼問題)、修改預設編碼為utf-8以及查詢MySQL的一些命令
一、首先安裝MySQL 安裝前更新一下倉庫,輸入命令:sudo apt-get update [email protected]:~$ sudo apt-get autoremove --purge mysql-server-5.7 輸入命令:sudo
Rm –rf誤刪除了一個數據檔案,而備份集恰好損壞,請寫出恢復步驟
Oracle使用者下: rm -rf /u01/app/oracle/oradata/vastdb/users01.dbf ps -ef | grep ora_lgwr ps命令將某個程序顯示出來 grep命令是查詢 中間的|是管道命令 是指ps命令與g
有一個二叉樹,現在懷疑它有一個結點有2個父節點,請寫出一個函式來判斷該二叉樹是否存在一個節點含有2個父節點。如果存在,返回true,否則返回false。
可以這樣,要檢測一個結點是否有兩個父親時,先把從該結點開始的結點與原樹分離,分成兩部分,然後再從原樹再查詢該結點,如果找到那就是有兩個結點,如果沒有則遞迴查詢。</span> struct Node{ Node *pLeft; Node *pRight; int
手搖演算法(三重翻轉演算法)和空間複雜度為o(1)的歸併排序
http://blog.csdn.net/ltyqljhwcm/article/details/52155097?locationNum=6&fps=1這篇文章對手搖演算法以及歸併排序有很詳細的講解!! 手搖演算法就是空間複雜度為O(1),僅僅是依靠交換操作來對字串
YOLOv3 實練(以VOC2007、2012資料集為例)
訓練裝置:Lenovo 拯救者; GPU:1070ti; 視訊記憶體:8GB; 第一次訓練:採用預設引數,以預訓練好的darknet53.conv.74.1為預載入權重開始訓練;視訊記憶體,卒;報錯:out of memory; 第二次訓練:更改引數