劍指offer讀書筆記 第五章,優化時間和空間效率

2021-08-16 14:09:05 字數 2994 閱讀 4595

對於乙個陣列超過一半的數字就是眾數,直接摩爾投票方法,其他的方法都是渣渣。

參考這個部落格找出陣列中出現次數超過一半的數+ 尋找眾數 + 摩爾投票法

這道題和求第k小的數的做法是一樣的,直接快排的思想去做即可。

其實還可以使用堆來做

典型的動態規劃dp問題,直接做吧!

參考這個鏈結leetcode 233. number of digit one 從1到n的陣列中出現數字1的數量 + 尋找規律,公式計算

這道題其實是希望我們能找到乙個排序規則,根據這個規則排出來的陣列能排成乙個最小的數字。要確定排序規則,就得比較兩個數字,也就是給出兩個數字m和n,我們需要確定乙個規則m和n哪個更大,而不是僅僅只是比較這兩個數字的數值哪個更大。

這道題真的很棒!!!

我就喜歡下面的做法,很棒,雖然不是那麼的高效。

建議和leetcode 263. ugly number 醜數、leetcode 313. super ugly number 超級醜數和leetcode 264. ugly number ii 計算第k個醜數

直接使用map統計即可

最笨的方法就是暴力遍歷,複雜度是o(n),但是又更加快的方法,這個急速使用歸併排序,再歸併的時候完成逆序對的統計。

將歸併排序思想應用到題目中,假設我們將陣列劃分為兩部分,左邊陣列有leftnum個逆序對,右邊有rightnum個逆序對,那麼剩餘的逆序對必然是乙個數出現在左邊部分,乙個數出現在右邊部分,並且滿足出現左邊部分的數 a[i] > a[j]。由於左右部分依然排序,所以每當出現array[left]>array[right],必然會增加right-mid個逆序對。

**如下:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

class solution

}while (i <= mid)

tmp[k++] = a[i++];

while (j <= end)

tmp[k++] = a[j++];

for (int i = beg; i <= end; i++)

a[i] = tmp[i];

long

long res = (left + right + count) % mmd;

return (int)res;}}

int inversepairs(vector

a) };

思路很簡單,就是先統計鍊錶a和b的長度,假設分別是m和n,假如m>n,那麼設兩個遍歷指標i和j,那麼i像走(m-n)步,然後i和j就一起走,知道遇到公共節點。

其實還有乙個更加簡單的方法:遍歷鍊錶a,並把指標存入set之中,然後遍歷b,那麼就可以得到第乙個公共節點的指標。

第五章 讀書筆記

第五章 搭建s3c6410開發板的測試環境 一.s3c6410開發板簡介.s3c6410是三星公司推出的一款低功耗,高價效比的risc處理器,它基於arm11核心,可廣泛應用於移動 和通用處理器等領域。該處理器有乙個非常先進的3d加速器,能實現4m s的3d加速 二.安裝串列埠除錯工具 minico...

C Template 讀書筆記 第五章

內容 技巧性基礎知識 關鍵字 typename template this 模板的模板引數 零初始化 字串的模板實參 具體內容描述 1.對模板使用typename 場景 template class test 這裡需要增加typename,需要標記告訴編譯器這個是宣告乙個模板引數型別t裡面的subt...

C 讀書筆記 第五章 語句

空語句 程式某處語法上需要一條語句而邏輯上不需要 建議使用時加注釋 while cin s s sought 空塊的作用等同於空語句 上面的 也可以用 代替 懸垂 else switch case關鍵字和它對應的值一起被稱為case標籤,case標籤必須是整形常量表示式 case 3.14 錯誤 不...