原创 操作系統中的幾種進程調度算法

先來先服務調度算法 先來先服務(FCFS)調度算法是一種最簡單的調度算法,該算法既可用於作業調度,也可用於進程調度。FCFS算法比較有利於長作業(進程),而不利於短作業(進程)。所以,本算法適合於CPU繁忙型作業,而不利於I/O繁

原创 字符串拷貝的方法和陷阱

下面我主要說說memcpy、strcpy、string::copy這三種 內存拷貝memcpy 陷阱 內存拷貝不會對字符串結束符’\0’進行檢查 結果 拷貝結束後,在字符串末尾會出現亂碼。 解決方案 申請內存時多申請一個字節內存,

原创 面試題 16.07. 最大數值

int maximum(int a, int b) { long k = (((long)a - (long)b) >> 63) & 1;//取符號位 return b * k + a * (k ^ 1); } 思路: 問題

原创 面試題 02.01. 移除重複節點

ListNode* removeDuplicateNodes(ListNode* head) { if (head == NULL || head->next == NULL) return head; set<int> si

原创 數塔問題

#include <bits/stdc++.h> using namespace std; static int dp[10][10]; int main(void) { int n; cin >> n; for (i

原创 一年中的第幾天

對於要求輸入的是整形的題即可用下面的C++版本 #include <bits/stdc++.h> using namespace std; int main(void) { int y, m, d, num[12] = {

原创 110. 平衡二叉樹

class Solution { public: bool isBalanced(TreeNode* root) { return p(root)!=-1; } int p(Tre

原创 蓄水池抽樣算法(Reservoir Sampling)

問題: 給定很多很多很多的N個數據,如何在只遍歷一次的情況下隨機選出m個不重複的數據? 這個場景強調了3件事: 數據流長度N很大且不可知,所以不能一次性存入內存。 時間複雜度爲O(N)。 隨機選取m個數,每個數被選中的概率爲

原创 二叉樹非遞歸前中後序遍歷

先序遍歷 void preOrderS(Node* root) { stack<Node*> s; Node* p = root; while (p || !s.empty()) { while (p) {

原创 54. 螺旋矩陣

vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> vi; if (matrix.size() == 0 || matrix[0].size()

原创 C++ STL set詳解

set底層是紅黑樹。 關於set,必須說明的是set關聯式容器。set作爲一個容器也是用來存儲同一數據類型的數據類型,並且能從一個數據集合中取出數據,在set中每個元素的值都唯一,而且系統能根據元素的值自動進行排序。應該注意的是s

原创 虛擬內存

虛擬內存是計算機系統內存管理的一種技術。它使得應用程序認爲它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。而操作系統則完成從虛

原创 160. 相交鏈表

class Solution { public: ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) { auto la = headA, lb

原创 斐波那契查找C++

#include<bits/stdc++.h> using namespace std; int Fibonacci(int n) { int f = 0, g = 1; while (n--) { g += f;

原创 分塊查找C++

#include <bits/stdc++.h> using namespace std; struct index { int key; int start; } newIndex[3]; int search(int