2024-10-17

算法復(fù)習(xí)記錄
可能會有些亂

1. 數(shù)組處理

過濾器模板
26. 刪除有序數(shù)組中的重復(fù)項 - 力扣(LeetCode)

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int idx = 0;
        for (int i = 0; i < nums.size(); i++) 
            if (i == 0 || nums[i] != nums[i - 1])
                nums[idx++] = nums[i];
        return idx;
    }
};

283. 移動零 - 力扣(LeetCode)

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int n = 0;
        for (int i = 0; i < nums.size(); i++) 
            if (nums[i] != 0)
                nums[n++] = nums[i];
        while (n < nums.size())
            nums[n++] = 0;
    }
};

88. 合并兩個有序數(shù)組 - 力扣(LeetCode)

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int i = m - 1, j = n - 1;
        for (int k = m + n - 1; k >= 0; k--) 
            if (j < 0 || i >= 0 && nums1[i] >= nums2[j])
                nums1[k] = nums1[i--];
            else
                nums1[k] = nums2[j--];
    }
};

2. 鏈表處理

206. 反轉(zhuǎn)鏈表 - 力扣(LeetCode)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* pre = nullptr;
        ListNode* cur = head;
        while (cur != nullptr) {
            ListNode* nxt = cur->next;
            cur->next = pre;
            pre = cur;
            cur = nxt;
        }
        return pre;
    }
};

25. K 個一組翻轉(zhuǎn)鏈表 - 力扣(LeetCode)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        ListNode* protect = new ListNode(0, head);
        ListNode* last = protect;
        // 分組遍歷
        while (head != nullptr) {
            // 1. 分組
            ListNode* end = getKth(head, k);
            if (end == nullptr) break; // 此分組不夠k即為最后一組直接退出
            ListNode* nextHead = end->next;
            // 2. 內(nèi)部反轉(zhuǎn)
            reverse(head, nextHead);
            // 3. 組間重連
            head->next = nextHead;
            last->next = end;
            // 指針后移
            last = head;
            head = nextHead;
        }
        return protect->next;
    }

private:
    ListNode* getKth(ListNode* node, int k) {
        while (node != nullptr) {
            k--;
            if (k == 0) return node;
            node = node->next;
        }
        return nullptr;
    }
    void reverse(ListNode* begin, ListNode* end) {
        ListNode* last = begin;
        begin = begin->next;
        while (begin != end) {
            ListNode* next = begin->next;
            begin->next = last;
            last = begin;
            begin = next;
        }
    }
};

136. 鄰值查找 - AcWing題庫

#include<bits/stdc++.h>
using namespace std;
struct Node {
    int val, idx;
    Node* pre, * next;
};
const int SIZE = 100005;
int a[SIZE], ans[SIZE], rk[SIZE];
Node* pos[SIZE];
int n;
Node* AddNode(Node* node, int idx) {
    Node* newNode = new Node();
    newNode->idx = idx;
    newNode->val = a[idx];
    newNode->next = node->next; node->next->pre = newNode;
    node->next = newNode; newNode->pre = node;
    return newNode;
}
Node* DeleteNode(Node* node) {
    node->pre->next = node->next;
    node->next->pre = node->pre;
    delete node;
}
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++)  {
        cin >> a[i];
        rk[i] = i;
    }
    sort(rk + 1, rk + n, [&](int rki, int rkj) { return a[rki] < a[rkj]; }); // 此處要排序rk悉默,其中rk從下標(biāo)1到n,所以sort參數(shù)應(yīng)該為rk+1到rk+n+1才對。但報錯键思,改為rk+n就AC了锌钮。漏益。納悶~
    Node head, tail;
    head.next = &tail, tail.pre = &head;
    head.val = a[rk[1]] - 1e9;
    tail.val = a[rk[n]] + 1e9;
    for (int i = 1; i <= n; i++) 
        pos[rk[i]] = AddNode(tail.pre, rk[i]);
    for (int i = n; i > 1; i--) {
        Node* cur = pos[i];
        if (cur->val - cur->pre->val <= cur->next->val - cur->val)
            ans[i] = cur->pre->idx;
        else
            ans[i] = cur->next->idx;
        DeleteNode(cur);
    }
    for (int i = 2; i <= n; i++)
        cout << abs(a[ans[i]] - a[i]) << ' ' << ans[i] << endl;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳍征,一起剝皮案震驚了整個濱河市搁料,隨后出現(xiàn)的幾起案子狼讨,更是在濱河造成了極大的恐慌贝淤,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件政供,死亡現(xiàn)場離奇詭異播聪,居然都是意外死亡,警方通過查閱死者的電腦和手機布隔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門离陶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衅檀,你說我怎么就攤上這事枕磁。” “怎么了术吝?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵计济,是天一觀的道長茸苇。 經(jīng)常有香客問我,道長沦寂,這世上最難降的妖魔是什么学密? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮传藏,結(jié)果婚禮上腻暮,老公的妹妹穿的比我還像新娘。我一直安慰自己毯侦,他們只是感情好哭靖,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侈离,像睡著了一般试幽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卦碾,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天铺坞,我揣著相機與錄音,去河邊找鬼洲胖。 笑死济榨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绿映。 我是一名探鬼主播擒滑,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叉弦!你這毒婦竟也來了丐一?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤卸奉,失蹤者是張志新(化名)和其女友劉穎钝诚,沒想到半個月后颖御,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榄棵,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年潘拱,在試婚紗的時候發(fā)現(xiàn)自己被綠了疹鳄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡芦岂,死狀恐怖瘪弓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情禽最,我是刑警寧澤腺怯,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布袱饭,位于F島的核電站,受9級特大地震影響呛占,放射性物質(zhì)發(fā)生泄漏虑乖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一晾虑、第九天 我趴在偏房一處隱蔽的房頂上張望疹味。 院中可真熱鬧,春花似錦帜篇、人聲如沸糙捺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洪灯。三九已至,卻和暖如春逃沿,著一層夾襖步出監(jiān)牢的瞬間婴渡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工凯亮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留边臼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓假消,卻偏偏與公主長得像柠并,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子富拗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 打卡第一天: 理解數(shù)組的基礎(chǔ)知識文件位置:"E:\鼠鼠真的不會啊\代碼隨想錄題目\數(shù)組\數(shù)組的理論基礎(chǔ).md"臼予、i...
    echo_ed閱讀 45評論 0 0
  • 1.寫在前 本人非科班,雙非本/211碩啃沪,雖然不是生化環(huán)材粘拾,但是就業(yè)前景也不是很樂觀。我身邊很多轉(zhuǎn)碼的同學(xué)创千,而且很...
    _code_x閱讀 1,137評論 2 2
  • 297. 二叉樹的序列化與反序列化 - 力扣(LeetCode)[https://leetcode.cn/prob...
    _魔佃_閱讀 45評論 0 0
  • 以下都為面試算法題值得刷的題缰雇,需要理解并記住解題思路,反復(fù)練習(xí)追驴,熟練記住每個步驟械哟。這些題的題解幾乎都是3k數(shù)以上題...
    奔跑吧李博閱讀 1,669評論 1 10
  • 1122. 數(shù)組的相對排序 - 力扣(LeetCode)[https://leetcode.cn/problems...
    _魔佃_閱讀 37評論 0 0