3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法工程师笔试 -剑指offer-习题详细解答

發布時間:2024/7/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法工程师笔试 -剑指offer-习题详细解答 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說明

  • 主要編程語言為 C/C++
  • 涉及字符串的問題可能會使用 Python
  • 題目編號以原書為準,如“面試題 3:數組中重復的數字
    • 因為題目不多,所以就不做分類了
  • 所有代碼均通過 OJ 測試

    在線 OJ 地址:劍指Offer_編程題 - 牛客網

Reference

  • 《劍指 Offer(第二版)》 - 何海濤
  • Interview-Notebook/劍指 offer 題解.md · CyC2018/Interview-Notebook
  • 牛客網相關問題討論區

3.1 數組中重復的數字

數組中重復的數字 - NowCoder

題目描述

在一個長度為 n 的數組里的所有數字都在 0 到 n-1 的范圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的,也不知道每個數字重復幾次。 請找出數組中任意一個重復的數字。
  • 要求:時間復雜度O(N),空間復雜度O(1)
  • 示例Input: {2, 3, 1, 0, 2, 5}Output: 2

思路

  • 復雜度要求表明不能使用排序,也不能使用 map/set
  • 注意到 n 個數字的范圍為 0 到 n-1,考慮類似選擇排序的思路,通過一次遍歷將每個數交換到排序后的位置,如果該位置已經存在相同的數字,那么該數就是重復的
  • 示例position-0 : (2,3,1,0,2,5) // 2 <-> 1(1,3,2,0,2,5) // 1 <-> 3(3,1,2,0,2,5) // 3 <-> 0(0,1,2,3,2,5) // already in position position-1 : (0,1,2,3,2,5) // already in position position-2 : (0,1,2,3,2,5) // already in position position-3 : (0,1,2,3,2,5) // already in position position-4 : (0,1,2,3,2,5) // nums[i] == nums[nums[i]], exit

Code

class Solution { public:bool duplicate(int numbers[], int length, int* duplication) {if(numbers == nullptr || length <= 0)return false;for(int i = 0; i < length; ++i) {while(numbers[i] != i) {if(numbers[i] == numbers[numbers[i]]) {*duplication = numbers[i];return true;}// 交換numbers[i]和numbers[numbers[i]]swap(numbers[i], numbers[numbers[i]]);}}return false;} };

3.2 不修改數組找出重復的數字

題目描述

在一個長度為n+1的數組里的所有數字都在1到n的范圍內,所以數組中至少有一個數字是重復的。 請找出數組中任意一個重復的數字,但不能修改輸入的數組。 例如,如果輸入長度為8的數組{2, 3, 5, 4, 3, 2, 6, 7},那么對應的輸出是重復的數字2或者3。
  • 要求:時間復雜度O(NlogN),空間復雜度O(1)

思路

  • 二分查找
  • 以長度為 8 的數組 {2, 3, 5, 4, 3, 2, 6, 7} 為例,那么所有數字都在 1~7 的范圍內。中間的數字 4 將 1~7 分為 1~4 和 5~7。統計 1~4 內數字的出現次數,它們一共出現了 5 次,說明 1~4 內必要重復的數字;反之,若小于等于 4 次,則說明 5~7 內必有重復的數字。
  • 因為不能使用額外的空間,所以每次統計次數都要重新遍歷整個數組一次

Code

int countRange(const int* numbers, int length, int start, int end);int getDuplication(const int* numbers, int length) {if(numbers == nullptr || length <= 0)return -1;int start = 1;int end = length - 1;while(end >= start) {int middle = ((end - start) >> 1) + start;int count = countRange(numbers, length, start, middle);if(end == start) {if(count > 1)return start;elsebreak;}if(count > (middle - start + 1))end = middle;elsestart = middle + 1;}return -1; }// 因為不能使用額外的空間,所以每次統計次數都要重新遍歷整個數組一次 int countRange(const int* numbers, int length, int start, int end) {if(numbers == nullptr)return 0;int count = 0;for(int i = 0; i < length; i++)if(numbers[i] >= start && numbers[i] <= end)++count;return count; }

4. 二維數組中的查找

二維數組中的查找 - NowCoder

題目描述

在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
  • 示例Consider the following matrix: [[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30] ]Given target = 5, return true. Given target = 20, return false.

思路

  • 左下角開始查找,它左邊的數都比它小,下邊的數都比它大;因此可以根據 target 和當前元素的大小關系來縮小查找區間
  • 同理,也可以從右上角開始查找
  • 時間復雜度:O(M + N)

Code

class Solution { public:bool Find(int target, vector<vector<int> > array) {int N = array.size(); // 行數int M = array[0].size(); // 列數int i = N - 1;int j = 0;while (i >= 0 && j < M) {if (array[i][j] > target)i--;else if (array[i][j] < target)j++;elsereturn true;}return false;} };

5. 替換空格

替換空格 - NowCoder

題目描述

請實現一個函數,將一個字符串中的空格替換成“%20”。 例如,當字符串為 "We Are Happy". 則經過替換之后的字符串為 "We%20Are%20Happy"。

思路

  • 先遍歷一次,找出空格的數量,得到替換后的長度;然后從后往前替換

Code

class Solution { public:void replaceSpace(char *str, int length) {if (str == nullptr || length < 0)return;int l_old = strlen(str); // == lengthint n_space = count(str, str + l_old, ' '); // <algorithm>int l_new = l_old + n_space * 2;str[l_new] = '\0';int p_old = l_old-1;int p_new = l_new-1;while (p_old >= 0) {if (str[p_old] != ' ') {str[p_new--] = str[p_old--];}else {p_old--;str[p_new--] = '0';str[p_new--] = '2';str[p_new--] = '%';}}} };

6. 從尾到頭打印鏈表

從尾到頭打印鏈表 - NowCoder

題目描述

輸入鏈表的第一個節點,從尾到頭反過來打印出每個結點的值。

思路

  • 頭插法

Code

class Solution { public:vector<int> printListFromTailToHead(ListNode* head) {vector<int> ret;ListNode *p = head;while (p != NULL) {ret.insert(ret.begin(), p->val); // 頭插p = p->next;}return ret;} };

7. 重建二叉樹

重建二叉樹 - NowCoder

題目描述

根據二叉樹的前序遍歷和中序遍歷的結果,重建出該二叉樹。 假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。

思路

  • 涉及二叉樹的問題,應該條件反射般的使用遞歸(無優化要求時)
  • 前序遍歷的第一個值為根節點的值,使用這個值將中序遍歷結果分成兩部分,左部分為左子樹的中序遍歷結果,右部分為右子樹的中序遍歷的結果。

Code - 無優化

struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} };class Solution { public:TreeNode * reConstructBinaryTree(vector<int> pre, vector<int> vin) {if (pre.size() <= 0)return NULL;TreeNode* root = new TreeNode{ pre[0] };for (auto i = 0; i < vin.size(); i++) {if (vin[i] == pre[0]) {root->left = reConstructBinaryTree(vector<int>(pre.begin() + 1, pre.begin() + 1 + i), vector<int>(vin.begin(), vin.begin() + i));root->right = reConstructBinaryTree(vector<int>(pre.begin() + 1 + i, pre.end()), vector<int>(vin.begin() + 1 + i, vin.end()));}}return root;} };

Code - 優化

class Solution { public:TreeNode * reConstructBinaryTree(vector<int> pre, vector<int> vin) {return reConstructCore(pre, 0, pre.size(), vin, 0, vin.size());}TreeNode * reConstructCore(vector<int> &pre, int pre_beg, int pre_end, vector<int> &vin, int vin_beg, int vin_end) {if (pre_end - pre_beg <= 0)return NULL;TreeNode* root = new TreeNode{ pre[pre_beg] };for (auto i = 0; i < vin_end-vin_beg; i++) {if (vin[i+vin_beg] == pre[pre_beg]) {root->left = reConstructCore(pre, pre_beg+1, pre_beg+1+i, vin, vin_beg, vin_beg+i);root->right = reConstructCore(pre, pre_beg+1+i, pre_end, vin, vin_beg+1+i, vin_end);}}return root;} };

8. 二叉樹的下一個結點

二叉樹的下一個結點 - NowCoder

題目描述

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點并且返回。 注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。

思路

  • 回顧中序遍歷的順序
  • 如果一個節點的右子樹不為空,那么下一個節點是該節點右子樹的最左葉子;
  • 否則(右子樹為空),沿父節點向上直到找到某個節點是其父節點的左孩子,那么該父節點就是下一個節點

Code

struct TreeLinkNode {int val;struct TreeLinkNode *left;struct TreeLinkNode *right;struct TreeLinkNode *next;TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {} };class Solution { public:TreeLinkNode * GetNext(TreeLinkNode* pNode) {if (pNode == nullptr)return nullptr;if(pNode->right != nullptr) {auto p = pNode->right;while(p->left != nullptr)p = p->left;return p;}else {auto p = pNode; // 當前節點while(p->next != nullptr) { // 當前節點的父節點不為空if (p->next->left == p) // 當前節點是其父節點的左海子return p->next; // 那么下一個節點就是當前節點的父節點p = p->next;}}return nullptr; // 當前節點是根節點且沒有右孩子,即沒有下一個節點} };

9. 用兩個棧實現隊列

用兩個棧實現隊列 - NowCoder

題目描述

用兩個棧來實現一個隊列,完成隊列的 Push 和 Pop 操作。

思路

  • 假設 stack_in 用于處理入棧操作,stack_out用于處理出棧操作
  • stack_in 按棧的方式正常處理入棧數據;
  • 關鍵在于出棧操作
    • 當stack_out為空時,需要先將每個stack_in中的數據出棧后壓入stack_out
    • 反之,每次彈出stack_out棧頂元素即可

Code

class Solution { public:void push(int node) {stack_in.push(node);}int pop() {if(stack_out.size() <= 0) {while (stack_in.size() > 0) {auto tmp = stack_in.top();stack_in.pop();stack_out.push(tmp);}}auto ret = stack_out.top();stack_out.pop();return ret;}private:stack<int> stack_in;stack<int> stack_out; };

10.1 斐波那契數列

斐波那契數列 - NowCoder

題目描述

寫一個函數,輸入n,求斐波那契(Fibonacci)數列的第n項。 數列的前兩項為 0 和 1

思路

  • 遞歸
    • 遞歸可能會重復計算子問題——例如,計算 f(10) 需要計算 f(9) 和 f(8),計算 f(9) 需要計算 f(8) 和 f(7),可以看到 f(8) 被重復計算了
    • 可以利用額外空間將計算過的子問題存起來
  • 查表
    • 因為只需要前 40 項,所以可以先將值都求出來

Code - 遞歸

// 該代碼會因復雜度過大無法通過評測 class Solution { public:int Fibonacci(int n) {if(n <= 0)return 0;if(n == 1)return 1;return Fibonacci(n - 1) + Fibonacci(n - 2);} };

Code - 循環

class Solution { public:int Fibonacci(int n) {int f = 0;int g = 1;while (n--) {g = g + f;f = g - f;}return f;} };

Code - 查表

class Solution { public:Solution(){fib = new int[40];fib[0] = 0;fib[1] = 1;for (int i = 2; i < 40; i++)fib[i] = fib[i - 1] + fib[i - 2];}int Fibonacci(int n) {return fib[n];}private:int* fib; };

10.2 跳臺階(遞歸)

跳臺階 | 變態跳臺階 - NowCoder

題目描述

一只青蛙一次可以跳上1級臺階,也可以跳上2級。 求該青蛙跳上一個n級的臺階總共有多少種跳法(先后次序不同算不同的結果)。

思路

  • 遞歸
  • 記跳 n 級臺階有 f(n) 種方法
    • 如果第一次跳 1 級,那么之后的 n-1 級有 f(n-1) 種跳法
    • 如果第一次跳 2 級,那么之后的 n-2 級有 f(n-2) 種跳法
  • 實際上就是首兩項為 1 和 2 的斐波那契數列

    Code
class Solution { public:int jumpFloor(int number) {int f = 1;int g = 2;number--;while (number--) {g = g + f;f = g - f;}return f;} };

10.3 變態跳臺階(動態規劃)

變態跳臺階 - NowCoder

題目描述

一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。 求該青蛙跳上一個n級的臺階總共有多少種跳法。

思路

  • 動態規劃
  • 遞推公式f(1) = 1 f(n) = 1 + f(1) + .. + f(n-1)

Code - DP

class Solution { public:int jumpFloorII(int number) {vector<int> dp(number+1, 1);for (int i=2; i<=number; i++)for(int j=1; j<i; j++)dp[i] += dp[j];return dp[number];} };

Code - 空間優化

class Solution { public:int jumpFloorII(int number) {int f = 1;int sum = 1 + f;for (int i = 2; i <= number; i++) {f = sum;sum += f;}return f;} };

10.4 矩形覆蓋(動態規劃)

矩形覆蓋 - NowCoder

題目描述

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。 請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?

思路

  • 動態規劃
  • 遞推公式f(1) = 1 f(2) = 2 f(n) = f(n-1) + f(n-2)
  • 即前兩項為 1 和 2 的斐波那契數列

Code

class Solution { public:int rectCover(int number) {if (number == 0)return 0;int f = 1;int g = 2;for (int i = 2; i <= number; i++) {g = g + f;f = g - f;}return f;} };

11. 旋轉數組的最小數字(二分查找)

旋轉數組的最小數字 - NowCoder

題目描述

把一個數組最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。 輸入一個非遞減排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如數組 {3, 4, 5, 1, 2} 為 {1, 2, 3, 4, 5} 的一個旋轉,該數組的最小值為 1。 NOTE:給出的所有元素都大于 0,若數組大小為 0,請返回 0。

思路

  • 二分查找
  • 二分查找需要有一個目標值 target,這里的 target 可以選 nums[hi] 或 nums[lo],這里使用過的是 nums[hi]
  • 注意有重復的情況,特別是 {3, 4, 5, 1, 2, 3},這里有一個簡單的處理方法

Code

class Solution { public:int minNumberInRotateArray(vector<int> rotateArray) {if (rotateArray.empty())return 0;int lo = 0;int hi = rotateArray.size() - 1;// 完全旋轉,或者說沒有旋轉(不需要)//if (rotateArray[lo] < rotateArray[hi])// return rotateArray[lo];while (lo + 1 < hi) {int mid = lo + (hi - lo) / 2;if (rotateArray[mid] > rotateArray[hi])lo = mid;else if (rotateArray[mid] < rotateArray[hi])hi = mid;elsehi--; // 防止這種情況 {3,4,5,1,2,3}}return rotateArray[hi];} };

12. 矩陣中的路徑(DFS)

矩陣中的路徑 - NowCoder

題目描述

請設計一個函數,用來判斷在一個矩陣中是否存在一條包含某字符串所有字符的路徑。路徑可以從矩陣中的任意一個格子開始,每一步可以在矩陣中向左,向右,向上,向下移動一個格子。如果一條路徑經過了矩陣中的某一個格子,則該路徑不能再進入該格子。
  • 例如下面的矩陣包含了一條 bfce 路徑。

思路

  • 深度優先搜索(DFS)
  • 注意邊界判斷

Code

class Solution { public:bool hasPath(char* matrix, int rows, int cols, char* str) {bool *visited = new bool[rows * cols]{false};for (int i=0; i<rows; i++) {for (int j=0; j<cols; j++) {if (dfs(matrix, rows, cols, str, visited, i, j, 0))return true;}}return false;}bool dfs(char* matrix, int rows, int cols, char* str, bool* visited, int i, int j, int step) { // l 為當前已找到的長度// 結果存在if(step == strlen(str))return true;// 邊界條件if(i<0 || i>=rows || j<0 || j>cols || matrix[i*cols+j]!=str[step] || visited[i*cols+j])return false;// 定義 4 個方向;int next[][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; // 最好的做法是作為成員變量,但是 C++ 成員變量的初始化比較麻煩,// 而且這還是個二維數組,更麻煩,所以每次都重新定義一次,所幸不大visited[i*cols+j] = true; // 訪問標記for (auto k : next)if (dfs(matrix, rows, cols, str, visited, i+k[0], j+k[1], step+1))return true;visited[i*cols+j] = false; // 清除訪問標記return false;} };

13. 機器人的運動范圍(DFS) TODO

機器人的運動范圍 - NowCoder

題目描述

地上有一個 m 行和 n 列的方格。 一個機器人從坐標 (0, 0) 的格子開始移動,每一次只能向左右上下四個方向移動一格, 但是不能進入行坐標和列坐標的數位之和大于 k 的格子。例如,當 k 為 18 時,機器人能夠進入方格(35, 37),因為 3+5+3+7=18。 但是,它不能進入方格(35, 38),因為 3+5+3+8=19。請問該機器人能夠達到多少個格子?

思路

  • 深度優先搜索(DFS)
  • 注意邊界條件判斷

Code

14. 剪繩子(動態規劃 | 貪心)

整數拆分 - LeetCode

題目描述

把一根長度為 n 的繩子剪成 m 段,并且使得每段的長度的乘積最大(n, m 均為整數)。

思路

  • 動態規劃
    • 遞推公式

      f(n) = 0 n = 1 f(n) = 1 n = 2 f(n) = 2 n = 3 f(n) = max{dp(i) * dp(n-i)} n > 3, 1<=i<=n-1
    • 注意:當 n <= 3 時因為必須剪至少一次的緣故,導致 f(1)=0, f(2)=1*1=1, f(3)=1*2=2;但是當 n>=4 時,將n<=3的部分單獨作為一段能提供更大的乘積

      因此,初始化時應該 dp[1]=1≠f(1), dp[2]=2≠f(2), dp[3]=3≠f(3),同時將 f(1), f(2), f(3) 單獨返回

    • 時間復雜度:O(N^2),空間復雜度:O(N)

  • 貪心
    • 當 n>=5 時,盡可能多剪長度為 3 的繩子;當 n=4 時,剪成兩段長度為 2 的繩子
    • 證明當 n >= 5 時,可以證明: 3(n-3) > 2(n-2) > n 當 n == 4 時,2*2 > 3*1
    • 時間復雜度:O(1),空間復雜度:O(1)

Code - 動態規劃

class Solution { public:int integerBreak(int n) {if(n < 2) return 0;if(n == 2) return 1;if(n == 3) return 2;int dp[n+1]{0}; // 記得初始化為 0dp[1] = 1;dp[2] = 2;dp[3] = 3;for (int i=4; i<=n; i++) {for (int j=1; j<=i/2; j++) {int p = dp[j] * dp[i-j];if (dp[i] < p)dp[i] = p;}}return dp[n];}};

Code - 貪心

class Solution { public:int integerBreak(int n) {if(n < 2) return 0;if(n == 2) return 1;if(n == 3) return 2;int n3 = n / 3; // 切成 3 的數量if (n%3 == 1) // 如果余下的長度為 4n3--;int n2 = (n - 3*n3) / 2; // 切成 2 的數量return (int)pow(3, n3) * (int)pow(2, n2);} };

15. 二進制中 1 的個數(位運算)

二進制中1的個數 - NowCoder

題目描述

輸入一個整數,輸出該數二進制表示中1的個數。 其中負數用補碼表示。

思路

  • 位運算 - 移位計數
    • 時間復雜度:O(N),N 為整型的二進制長度
    • 注意移位判斷有兩種方式:一是移動 n,一是移動"1",后者更好
    • 當 n 為 負數時,移動 n 可能導致死循環
  • 位運算 - 利用 n&(n-1)
    • 該運算的效果是每次除去 n 的二進制表示中最后一個 1n : 10110100 n-1 : 10110011 n&(n-1) : 10110000
    • 時間復雜度:O(M),M 為二進制中 1 的個數

Code - 移位計數

class Solution { public:int NumberOf1(int n) {int ret = 0;int N = sizeof(int) * 8;while(N--) {if(n & 1)ret++;n >>= 1;}return ret;} };

Code - 移位計數(改進)

class Solution { public:int NumberOf1(int n) {int ret = 0;int N = sizeof(int) * 8;int flag = 1;while(N--) {if(n & flag)ret++;flag <<= 1; // 移動 1 而不是 n}return ret;} };

Code - n&(n-1)

class Solution { public:int NumberOf1(int n) {int ret = 0;while(n) {ret++;n = (n-1)&n;}return ret;} };

16. 數值的整數次方(位運算)

數值的整數次方 - NowCoder

題目描述

給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。

思路

  • 位運算 - 快速冪

  • 示例

    求 `3^20 = 9^10 = 81^5 (= 81*81^4) = 81*6561^2 = 81*43046721` 循環次數 = `bin(20)`的位數 = `len(10100)` = 5
  • 時間復雜度 O(logN)

Code

class Solution { public:double Power(double base, int exponent) {int p = abs(exponent);double ret = 1.0;while (p != 0) {if (p & 1) // 如果是奇數ret *= base;base *= base;p >>= 1;}return exponent < 0 ? 1 / ret : ret;} };

17. 打印從 1 到最大的 n 位數(字符串 + DFS)

題目描述

輸入數字 n,按順序打印出從 1 到最大的 n 位十進制數。 比如輸入 3,則打印出 1、2、3 一直到最大的 3 位數即 999。

思路

  • 由于 n 可能會非常大,因此不能直接用 int 表示數字,包括 long, long long
  • 正確的做法是用 char 數組進行存儲。
  • 由于使用 char 存儲數字,那么就不適合使用普通的運算操作了,此時可以使用 DFS 來獲取所有的數字

Code

void printOneToMax(int n) {if (n <= 0) return;char* number = new char[n + 1];number[n] = '\0';dfs(number, n, 0); // DFSdelete[] number; }void dfs(char* number, int length, int index) {if (index == length) { // 遞歸最重要的就是結束條件要正確PrintNumber(number);return;}for (int i = 0; i < 10; ++i) {number[index] = i + '0';dfs(number, length, index + 1);} }// 打印出這個數字,忽略開頭的 0 void PrintNumber(char* number) {bool isBeginning0 = true;int nLength = strlen(number);for (int i = 0; i < nLength; ++i) {if (isBeginning0 && number[i] != '0')isBeginning0 = false;if (!isBeginning0) {printf("%c", number[i]);}}printf("\t"); }

18.1 在 O(1) 時間內刪除鏈表節點(鏈表)

題目描述

給定單向鏈表的頭指針和需要刪除的指針,定義一個函數在 O(1) 時間內刪除該節點 前提:該節點在鏈表中

思路

  • 因為不能遍歷,所以只能通過修改節點的值來實現這個操作

  • 簡單來說,就是將該節點的值修改為其下一個節點的值,實際上刪除的是該節點的下一個節點(題目的描述可能會帶來誤導)

  • 如果該節點不是尾節點,那么按上述操作即可——時間的復雜度為 O(1)

  • 如果該節點是尾節點,此時必須通過遍歷來找到該節點的前一個節點,才能完成刪除——時間復雜度為 O(N)

  • 如果是 C++,一定要注意 delete 指針指向的內存后,必須將指針重新指向 nullptr

    delete p; p = nullptr;
  • 總的時間復雜度:[(n-1)O(1) + O(n)] / n = O(1)

Code

void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted) {if(!pListHead || !pToBeDeleted)return;if(pToBeDeleted->next != nullptr) { // 要刪除的結點不是尾結點ListNode* p = pToBeDeleted->next;pToBeDeleted->val = p->val;pToBeDeleted->next = p->next;delete p; // delete 指針指向的內存后,必須將指針重新指向 nullptrp = nullptr; }else if(*pListHead == pToBeDeleted) { // 鏈表只有一個結點,刪除頭結點delete pToBeDeleted;pToBeDeleted = nullptr; *pListHead = nullptr;}else { // 鏈表中有多個結點,刪除尾結點ListNode* p = *pListHead;while(p->next != pToBeDeleted)p = p->next; p->next = nullptr;delete pToBeDeleted;pToBeDeleted = nullptr;} }

18.2 刪除鏈表中重復的結點(鏈表)

刪除鏈表中重復的結點 - NowCoder

題目描述

在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點; 重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理后為 1->2->5

思路

  • 注意重復的節點不保留,所以要特別注意頭結點也重復的情況——最好的做法是新設一個頭結點
  • delete 指針指向的內存后,必須將指針重新指向 nullptr

Code

class Solution { public:ListNode * deleteDuplication(ListNode* pHead){ if (pHead == NULL) return pHead;ListNode* head = new ListNode{-1}; // 設置一個頭結點head->next = pHead;ListNode* pre = head;ListNode* cur = pHead;while (cur != NULL && cur->next != NULL) {if (cur->val != cur->next->val) { // 不重復時向后遍歷pre = cur;cur = cur->next;}else { // 發現重復int val = cur->val;while (cur != NULL && cur->val == val) { // 循環刪除重復auto tmp = cur;cur = cur->next;delete tmp; // delete + nullptrtmp = nullptr;}pre->next = cur;}}auto ret = head->next;delete head; // delete + nullptrhead = nullptr;return ret;} };

19. 正則表達式匹配(自動機:動態規劃 | DFS)

正則表達式匹配 - NowCoder

題目描述

請實現一個函數用來匹配包括'.'和'*'的正則表達式。 模式中的字符'.'表示任意一個字符,而'*'表示它前面的字符可以出現任意次(包含0次)。 在本題中,匹配是指字符串的所有字符匹配整個模式。 例如,字符串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配

思路

  • ‘.’ 用于當做一個任意字符,’*’ 用于重復前面的字符,注意兩者區別
  • 下面提供 dfs(C++) 和 dp(Java) 兩種做法

Code - dfs

class Solution { public:bool match(char* str, char* pattern) {if(str==NULL||pattern==NULL)return false;return dfs(str,pattern);}bool dfs(char* str, char* pattern) {if(*str=='\0'&&*pattern=='\0')return true;if(*str!='\0'&&*pattern=='\0')return false;if(*(pattern+1)=='*') {if(*pattern==*str||(*pattern=='.'&&*str!='\0'))/*dfs(str,pattern+2): 模式串不匹配dfs(str+1,pattern): 模式串已經匹配成功,嘗試匹配下一個字符串dfs(str+1,pat+2): 模式串已經成功匹配,并且不匹配下一個字符串內容 */return dfs(str+1,pattern)||dfs(str,pattern+2);elsereturn dfs(str,pattern+2);}if(*str==*pattern||(*pattern=='.'&&*str!='\0'))return dfs(str+1,pattern+1);return false;} };

Code - dp

public boolean match(char[] str, char[] pattern) {int m = str.length, n = pattern.length;boolean[][] dp = new boolean[m + 1][n + 1];dp[0][0] = true;for (int i = 1; i <= n; i++)if (pattern[i - 1] == '*')dp[0][i] = dp[0][i - 2];for (int i = 1; i <= m; i++)for (int j = 1; j <= n; j++)if (str[i - 1] == pattern[j - 1] || pattern[j - 1] == '.')dp[i][j] = dp[i - 1][j - 1];else if (pattern[j - 1] == '*')if (pattern[j - 2] == str[i - 1] || pattern[j - 2] == '.') {dp[i][j] |= dp[i][j - 1]; // a* counts as single adp[i][j] |= dp[i - 1][j]; // a* counts as multiple adp[i][j] |= dp[i][j - 2]; // a* counts as empty} elsedp[i][j] = dp[i][j - 2]; // a* only counts as emptyreturn dp[m][n]; }

20. 表示數值的字符串(自動機 | 正則)

表示數值的字符串 - NowCoder

題目描述

請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。 例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

思路

  • if 判斷 - 自動機
  • 正則表達式

Code - 自動機

class Solution { public:// 數字的格式可以用A[.[B]][e|EC]或者.B[e|EC]表示,其中A和C都是// 整數(可以有正負號,也可以沒有),而B是一個無符號整數bool isNumeric(const char* str) {if(str == nullptr)return false;bool numeric = scanInteger(&str);// 如果出現'.',接下來是數字的小數部分if(*str == '.') {++str;// 下面一行代碼用||的原因:// 1. 小數可以沒有整數部分,例如.123等于0.123;// 2. 小數點后面可以沒有數字,例如233.等于233.0;// 3. 當然小數點前面和后面可以有數字,例如233.666numeric = scanUnsignedInteger(&str) || numeric;}// 如果出現'e'或者'E',接下來跟著的是數字的指數部分if(*str == 'e' || *str == 'E') {++str;// 下面一行代碼用&&的原因:// 1. 當e或E前面沒有數字時,整個字符串不能表示數字,例如.e1、e1;// 2. 當e或E后面沒有整數時,整個字符串不能表示數字,例如12e、12e+5.4numeric = numeric && scanInteger(&str);}return numeric && *str == '\0';}bool scanUnsignedInteger(const char** str) {const char* before = *str;while(**str != '\0' && **str >= '0' && **str <= '9')++(*str);// 當str中存在若干0-9的數字時,返回truereturn *str > before;}// 整數的格式可以用[+|-]B表示, 其中B為無符號整數bool scanInteger(const char** str) {if(**str == '+' || **str == '-')++(*str);return scanUnsignedInteger(str);} };

Code - 正則(Python)

import re class Solution:# s字符串def isNumeric(self, s):# Python 中完全匹配需要以 ^ 開頭,以 $ 結尾# r"" 表示不轉義# if re.match("^[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?$", s):if re.match(r"^[+-]?\d*(\.\d+)?([eE][+-]?\d+)?$", s):return Trueelse:return False

Code - 正則(C++)

#include <regex>class Solution { public:bool isNumeric(char* string) {regex reg("[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?");return regex_match(string, reg);} };

Code - 正則(Java)

public class Solution {public boolean isNumeric(char[] str) {if (str == null)return false;return new String(str).matches("[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?");} }

21. 調整數組順序使奇數位于偶數前面(數組)

調整數組順序使奇數位于偶數前面 - NowCoder

題目描述

輸入一個整數數組,實現一個函數來調整該數組中數字的順序, 使得所有的奇數位于數組的前半部分,所有的偶數位于數組的后半部分, 并保證奇數和奇數,偶數和偶數之間的相對位置不變。
  • 要求:空間復雜度 O(1)
  • 本題與原書不同,這里要求相對順序不變,原書的側重點在于函數指針

思路

  • 如果可以使用額外空間,那么問題就很簡單
  • 如果不想使用額外空間,那么只能通過循環移位來達到避免覆蓋的目的,時間復雜度 O(N^2)
    • 可以利用“冒泡排序”的思想避免循環位移

Code - 使用額外空間

class Solution { public:void reOrderArray(vector<int> &array) {vector<int> odd; // 存奇數vector<int> eve; // 存偶數for (auto i : array) {if (i & 1) // 是奇數odd.push_back(i);elseeve.push_back(i);}array.swap(odd);array.insert(array.end(), eve.begin(), eve.end());} };

Code - 不使用額外空間

討論區第二個回答

class Solution { public:void reOrderArray(vector<int> &array) {for(int i = 0; i < array.size() / 2; i++)for(int j = 0; j < array.size()-i; j++)if((array[j]%2 == 0) && (array[j+1]%2 == 1))swap(array[j] ,array[j+1]);} };

22. 鏈表中倒數第 K 個結點(鏈表 + 雙指針)

鏈表中倒數第k個結點 - NowCoder

題目描述

輸入一個鏈表,輸出該鏈表中倒數第k個結點。

思路

  • 設置快慢指針快指針先走 k-1 步,然后慢指針開始走,當快指針到達鏈表尾時,慢指針即指向倒數第 k 個節點
  • 健壯性檢驗:
    • 輸入是一個空鏈表
    • 鏈表長度小于 k

Code

class Solution { public:ListNode * FindKthToTail(ListNode* pListHead, unsigned int k) {if(pListHead == nullptr)return nullptr;ListNode * slow = pListHead;ListNode * fast = pListHead;//先讓 fast 走 k-1 步while (k && fast) {fast = fast->next;k--;}// 如果 k > 0,說明 k 大于鏈表長度if (k > 0)return nullptr;// 接著讓兩個指針一起往后走,當 fast 到最后時,slow 即指向倒數第 k 個while (fast) {fast = fast->next;slow = slow->next;}return slow;} };

23. 鏈表中環的入口結點(鏈表 + 雙指針)

鏈表中環的入口結點 - NowCoder

題目描述

給一個鏈表,若其中包含環,請找出該鏈表的環的入口結點,否則,輸出null。
  • 要求:不使用額外空間

思路

  • 快慢雙指針

  • 快指針 fast 每次移動 2 步,慢指針 slow 每次 1 步;因為存在環,fast 和 slow 總會相遇,此時 fast 剛好比 slow 多走一圈(?)

  • 如圖,假設他們相遇在 z1 點,此時將 fast/slow 之一重新指向頭結點,繼續每次一步移動,它們再次相遇的點就是入口

Code

class Solution { public:ListNode * EntryNodeOfLoop(ListNode* pHead) {if (pHead == NULL) return nullptr;ListNode* slow = pHead;ListNode* fast = pHead;while (fast != NULL && fast->next != NULL) {slow = slow->next;fast = fast->next->next;if (slow == fast) { // 找到環中相遇點slow = pHead; // 將 fast/slow 中的任一個重新指向頭指針while (slow != fast) { // 直到他們再次相遇,相遇的這個點就是入口slow = slow->next;fast = fast->next;}return slow;}}return nullptr;} };

24. 反轉鏈表(鏈表)

反轉鏈表 - NowCoder

題目描述

輸入一個鏈表,反轉鏈表后,輸出新鏈表的表頭。
  • 要求:不使用額外空間

思路

  • 可以輔助圖示思考

Code - 迭代

class Solution { public:ListNode * ReverseList(ListNode* pHead) {if (pHead == NULL)return NULL;ListNode* cur = pHead;ListNode* pre = NULL;ListNode* nxt = cur->next;cur->next = NULL; // 斷開當前節點及下一個節點while (nxt) {pre = cur;cur = nxt;nxt = nxt->next;cur->next = pre;}return cur;} };

Code - 遞歸

class Solution { public:ListNode * ReverseList(ListNode* pHead) {if (pHead == nullptr || pHead->next == nullptr)return pHead;auto nxt = pHead->next;pHead->next = nullptr; // 斷開當前節點及下一個節點auto newHead = ReverseList(nxt);nxt->next = pHead;return newHead;} };

25. 合并兩個排序的鏈表(鏈表)

合并兩個排序的鏈表 - NowCoder

題目描述

輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表,當然我們需要合成后的鏈表滿足單調不減規則。

Code - 迭代

class Solution { public:ListNode * Merge(ListNode* pHead1, ListNode* pHead2) {ListNode head{-1};ListNode *cur = &head;while (pHead1 && pHead2) {if (pHead1->val <= pHead2->val) {cur->next = pHead1;pHead1 = pHead1->next;} else {cur->next = pHead2;pHead2 = pHead2->next;}cur = cur->next;}if (pHead1) cur->next = pHead1;if (pHead2) cur->next = pHead2;return head.next;} };

Code - 遞歸

class Solution { public:ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {if (!pHead1) return pHead2;if (!pHead2) return pHead1;if(pHead1->val <= pHead2->val){pHead1->next = Merge(pHead1->next, pHead2);return pHead1;} else {pHead2->next = Merge(pHead1, pHead2->next);return pHead2;}} };

26. 樹的子結構(二叉樹)

樹的子結構 -NowCoder

題目描述

輸入兩棵二叉樹A,B,判斷B是不是A的子結構。 約定空樹不是任意一個樹的子結構。
  • 圖示

思路

  • 遞歸
  • 有兩個遞歸的點:一、遞歸尋找與子樹根節點相同的點;二、遞歸判斷子結構是否相同

Code

class Solution { public:bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {if (pRoot2 == NULL || pRoot1 == NULL)return false;// 遞歸尋找與子樹根節點相同的點return isSubTree(pRoot1, pRoot2)|| HasSubtree(pRoot1->left, pRoot2)|| HasSubtree(pRoot1->right, pRoot2);}bool isSubTree(TreeNode* pRoot1, TreeNode* pRoot2) {if (pRoot2 == NULL) return true;if (pRoot1 == NULL) return false;// 遞歸判斷子結構是否相同if (pRoot1->val == pRoot2->val)return isSubTree(pRoot1->left, pRoot2->left)&& isSubTree(pRoot1->right, pRoot2->right);elsereturn false;} };

27. 二叉樹的鏡像(二叉樹)

二叉樹的鏡像 - NowCoder

題目描述

操作給定的二叉樹,將其變換為源二叉樹的鏡像。
  • 圖示

思路

  • 前序遍歷,每次交換節點的左右子樹;即必須先交換節點的左右子樹后,才能繼續遍歷

Code

class Solution { public:void Mirror(TreeNode *pRoot) {if (pRoot == nullptr) return;auto tmp = pRoot->left;pRoot->left = pRoot->right;pRoot->right = tmp;Mirror(pRoot->left);Mirror(pRoot->right);} };

28 對稱的二叉樹(二叉樹)

對稱的二叉樹 NowCoder

題目描述

請實現一個函數,用來判斷一顆二叉樹是不是對稱的。 注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其為對稱的。 空樹也認為是對稱的

思路

  • 遞歸
  • 同時遍歷左子樹和右子樹,然后是“左子樹的左子樹和右子樹的右子樹”,及左子樹的右子樹和右子樹的左子樹,遞歸以上步驟

Code

class Solution { public:bool isSymmetrical(TreeNode* pRoot) {if (pRoot == nullptr) return true;return dfs(pRoot->left, pRoot->right);}bool dfs(TreeNode* l, TreeNode* r) {if (l == nullptr && r == nullptr)return true;if (l == nullptr || r == nullptr) // 注意這個條件return false;if (l->val == r->val)return dfs(l->left, r->right)&& dfs(l->right, r->left);elsereturn false;} };

29. 順時針打印矩陣(二維數組)

順時針打印矩陣 - NowCoder

題目描述

下圖的矩陣順時針打印結果為:1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
  • 圖示

  • 注意,不是蛇形打印,而是一層一層順時針打印

思路

  • 二維數組遍歷

Code

class Solution { public:vector<int> printMatrix(vector<vector<int> > matrix) {vector<int> ret;int rl = 0, rr = matrix.size()-1;int cl = 0, cr = matrix[0].size()-1;while(rl <= rr && cl <= cr) {for (int i = cl; i <= cr; i++)ret.push_back(matrix[rl][i]);for (int i = rl+1; i <= rr; i++)ret.push_back(matrix[i][cr]);if (rl != rr)for (int i = cr - 1; i >= cl; i--)ret.push_back(matrix[rr][i]);if (cl != cr)for (int i = rr - 1; i > rl; i--)ret.push_back(matrix[i][cl]);rl++; rr--; cl++; cr--;}return ret;} };

30. 包含 min 函數的棧(數據結構:棧)

包含min函數的棧 - NowCoder

題目描述

定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數
  • 要求:時間復雜度 O(1)

思路

  • 因為要求在常數時間內完成所有操作,所以不能有排序操作
  • 使用一個輔助棧保存最小、次小、…

Code

class Solution {stack<int> s;stack<int> s_min;public:void push(int value) {s.push(value);if (s_min.empty())s_min.push(value);if (value <= s_min.top()) // 注意是小于等于s_min.push(value);}void pop() {if (s.top() == s_min.top())s_min.pop();s.pop();}int top() {return s.top();}int min() {return s_min.top();}};

31. 棧的壓入、彈出序列(數據結構:棧)

棧的壓入、彈出序列 -NowCoder

題目描述

輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。 假設壓入棧的所有數字均不相等。 例如序列 1,2,3,4,5 是某棧的壓入順序,序列 4,5,3,2,1 是該壓棧序列對應的一個彈出序列, 但 4,3,5,1,2 就不可能是該壓棧序列的彈出序列。

思路

  • 使用一個輔助棧
  • 依次將入棧序列入棧,如果棧頂元素等于出棧序列的棧頂元素,則彈出
  • 當流程無法繼續時,如果輔助棧是空的,則出棧序列是符合的

Code

class Solution { public:bool IsPopOrder(vector<int> pushV, vector<int> popV) {if (pushV.empty()) return false;stack<int> tmp;int j = 0;for (int i = 0; i < pushV.size(); i++) {tmp.push(pushV[i]);while (!tmp.empty() && tmp.top() == popV[j]) {tmp.pop();j++;}}return tmp.empty();} };

32.1 從上往下打印二叉樹(BFS)

從上往下打印二叉樹 - NowCoder

題目描述

從上往下打印出二叉樹的每個節點,同層節點從左至右打印。 例如,以下二叉樹層次遍歷的結果為:1,2,3,4,5,6,7
  • 圖示

思路

  • 廣度優先搜索 + 隊列
  • 注意入隊時先左子節點,后右節點
  • 注意不需要修改原二叉樹

Code

class Solution {queue<TreeNode*> q; // 輔助隊列 public:vector<int> PrintFromTopToBottom(TreeNode* root) {if (root == nullptr) return vector<int>();q.push(root);vector<int> ret;while (!q.empty()) {auto cur = q.front();q.pop();ret.push_back(cur->val);if (cur->left != nullptr)q.push(cur->left);if (cur->right != nullptr)q.push(cur->right);}return ret;} };

32.2 分行從上到下打印二叉樹(BFS)

把二叉樹打印成多行 - NowCoder

題目描述

從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。

思路

  • 除了利用隊列和 BFS
  • 為了分行輸出,還需要兩個變量:一個表示在當前層中還沒有打印的節點數、一個表示下一層的節點數
  • 注意根節點為空的情況

Code

class Solution {queue<TreeNode*> q; public:vector<vector<int>> Print(TreeNode* pRoot) {if (pRoot == nullptr) return vector<vector<int>>();q.push(pRoot);int curL = 1; // 當前層的節點數,初始化為 1,根節點int nxtL = 0; // 下一層的節點數vector<vector<int>> ret;vector<int> tmp;while (!q.empty()) {auto node = q.front();q.pop();curL--;tmp.push_back(node->val);if (node->left != nullptr) {q.push(node->left);nxtL++;}if (node->right != nullptr) {q.push(node->right);nxtL++;}if (curL == 0) {ret.push_back(tmp);tmp.clear();curL = nxtL;nxtL = 0;}}return ret;} };

32.3 按之字形順序打印二叉樹(BFS)

按之字形順序打印二叉樹 - NowCoder

題目描述

請實現一個函數按照之字形打印二叉樹, 即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印, 第三行按照從左到右的順序打印,其他行以此類推。

思路

  • 利用一個隊列+一個棧,分奇偶討論;
  • 使用兩個棧,根據奇偶,改變左右子樹的入棧/入隊順序
  • 利用雙端隊列,分奇偶改變入隊/出隊方向(C++ 不推薦,編碼量大)(有坑,不好寫)
  • 反轉層結果:根據奇偶,判斷是否反轉中間結果(最直觀的方法)
  • Code - 兩個棧

    class Solution { public:vector<vector<int>> Print(TreeNode* pRoot) {if(pRoot == nullptr)return vector<vector<int>>();// 定義兩個棧,s[0] 始終存放偶數層的節點,s[1] 始終存放奇數層的節點stack<TreeNode*> s[2];int cur = 0; // 當前層(假設根節點所在的第0層是偶數層)s[cur & 1].push(pRoot); // 第 0 層入棧vector<vector<int>> ret;vector<int> tmp;while(!s[0].empty() || !s[1].empty()) {auto pNode = s[cur & 1].top();s[cur & 1].pop();tmp.push_back(pNode->val);if(cur & 1) { // 當前是奇數層// 下一層是偶數層// 先壓右節點if(pNode->right != nullptr)s[0].push(pNode->right);if(pNode->left != nullptr)s[0].push(pNode->left);}else {// 下一層是奇數層,壓入 s1// 先壓左節點if(pNode->left != nullptr)s[1].push(pNode->left);if(pNode->right != nullptr)s[1].push(pNode->right);}if(s[cur & 1].empty()) {ret.push_back(tmp);tmp.clear();cur++; // 累計層數}}return ret;} };

    Code - 層反轉

    class Solution {queue<TreeNode*> q; public:vector<vector<int>> Print(TreeNode* pRoot) {if (pRoot == nullptr) return vector<vector<int>>();q.push(pRoot);int cur = 0; // 當前層int curL = 1; // 當前層的節點數,初始化為 1,根節點int nxtL = 0; // 下一層的節點數vector<vector<int>> ret;vector<int> tmp;while (!q.empty()) {auto node = q.front();q.pop();curL--;tmp.push_back(node->val);if (node->left != nullptr) {q.push(node->left);nxtL++;}if (node->right != nullptr) {q.push(node->right);nxtL++;}if (curL == 0) {if (cur & 1) // 如果是奇數層,就反轉中間結果reverse(tmp.begin(), tmp.end());cur++;ret.push_back(tmp);tmp.clear();curL = nxtL;nxtL = 0;}}return ret;} };

    33. 二叉搜索樹的后序遍歷序列(二叉樹:遞歸)

    二叉搜索樹的后序遍歷序列 - NowCoder

    題目描述

    輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。 如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。

    思路

    • 二叉搜索樹:左子樹都小于根節點,右子樹都大于根節點,遞歸定義
    • 后序遍歷:會先輸出整個左子樹,再輸出右子樹,最后根節點;也就是說,數組可以被劃分為三個部分
      • 示例:1,2,3 | 5,6,7 | 4 第一部分都小于最后的元素,第二部分都大于最后的元素——雖然這不是一顆二叉搜索樹,但是它滿足第一次判斷的結果,后序再遞歸判斷左右子樹

    Code

    class Solution { public:bool VerifySquenceOfBST(vector<int> s) {if (s.empty()) return false;return dfs(s, 0, s.size()-1);}bool dfs(vector<int> &s, int l, int r) {if (l >= r) return true;int base = s[r]; // 根節點int mid = 0; // 尋找第一個大于根節點的元素for (; mid < r; mid++)if (s[mid] > base)break;bool flag = true; // 如果第一個大于根節點的元素到根節點之間的元素都大于根節點for (int i = mid; i<r; i++)if (s[i] < base) {flag = false;break;}return flag && dfs(s, l, mid-1) && dfs(s, mid, r-1); // 遞歸判斷} };

    34. 二叉樹中和為某一值的路徑(DFS)

    二叉樹中和為某一值的路徑 - NowCoder

    題目描述

    輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。 路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 (注意: 在返回值的list中,數組長度大的數組靠前)

    思路

    • 注意,必須要從根節點到葉子節點,才叫一條路徑,中間結果都不算路徑

    Code

    class Solution { public:vector<vector<int>> ret;vector<int> trace;vector<vector<int> > FindPath(TreeNode* root, int expectNumber) {if (root != nullptr)dfs(root, expectNumber);return ret;}void dfs(TreeNode* cur, int n) {trace.push_back(cur->val);// 結束條件if (cur->left == nullptr && cur->right == nullptr) {if (cur->val == n)ret.push_back(trace); // C++ 默認深拷貝}if (cur->left)dfs(cur->left, n - cur->val); // 這里沒有求和,而是用遞減的方式if (cur->right)dfs(cur->right, n - cur->val);trace.pop_back();} };

    35. 復雜鏈表的復制(鏈表)

    復雜鏈表的復制 - NowCoder

    題目描述

    輸入一個復雜鏈表—— 每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點, 返回結果為復制后鏈表的頭節點。 (注意,輸出結果中請不要返回參數中的節點引用,否則判題程序會直接返回空)
    • 要求:時間復雜度 O(N)

    思路

    • 基本思路 O(N^2)
      • 第一步,依次復制每個節點
      • 第二步,對每個節點,尋找特殊指針指向的節點;因為特殊指針的位置不定,必須從頭開始找
        • 假設經過 m 步找到了某個節點的特殊節點,那么在新鏈表中也走 m 步
    • 問題的難點在于不知道特殊指針所指的節點在新鏈表中位置
    • 一個經典的方法
      • 第一步,復制每個節點,如:原來是 A->B->C 變成 A->A'->B->B'->C->C';
      • 第二步,遍歷鏈表,使:A'->random = A->random->next;
      • 第三步,拆分鏈表

    Code

    class Solution { public:RandomListNode * Clone(RandomListNode* pHead) {if (!pHead) return NULL;RandomListNode *cur = pHead;// 1. 復制每個節點,如:原來是A->B->C 變成A->A'->B->B'->C->C'while (cur) {RandomListNode* node = new RandomListNode(cur->label);node->next = cur->next; // 注意順序cur->next = node;cur = node->next;}// 2. 遍歷鏈表,使:A'->random = A->random->next;cur = pHead;RandomListNode* tmp;while (cur) {tmp = cur->next;if (cur->random != nullptr) {tmp->random = cur->random->next;}cur = cur->next->next; // 跳過復制的節點}// 3. 拆分鏈表cur = pHead;RandomListNode* ret = cur->next;while (cur->next) {tmp = cur->next;cur->next = tmp->next;cur = tmp;}return ret;} };

    36. 二叉搜索樹與雙向鏈表(DFS)

    二叉搜索樹與雙向鏈表 - NowCoder

    題目描述

    輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。 要求不能創建任何新的結點,只能調整樹中結點指針的指向。

    思路

    • 因為要求是有序鏈表,因此考慮中序遍歷
    • 利用兩個額外的指針保存前一個節點和頭結點,具體見代碼中注釋

    Code

    class Solution { public:TreeNode * pre; // 記錄上一個節點TreeNode * ret; // 雙向鏈表的頭結點TreeNode * Convert(TreeNode* pRootOfTree) {// C++ 小坑,不能在類類初始化,默認初始化不為 NULLpre = nullptr;ret = nullptr;dfs(pRootOfTree);return ret;}// 中序遍歷void dfs(TreeNode* node) {if (node == nullptr) return;dfs(node->left);if (ret == nullptr) // 到達最左葉子,即鏈表頭;只會執行一次ret = node;// 第一次執行該語句時,pre == nullptr;這并不矛盾。// 因為頭節點的前一個指針就是指向 nullptr 的node->left = pre;if (pre != nullptr)pre->right = node;pre = node;dfs(node->right);} };

    37. 序列化二叉樹(DFS)***

    序列化二叉樹 - NowCoder

    題目描述

    請實現兩個函數,分別用來序列化和反序列化二叉樹。 接口如下:char* Serialize(TreeNode *root);TreeNode* Deserialize(char *str);
    • 比如中序遍歷就是一個二叉樹序列化
    • 反序列化要求能夠通過序列化的結果還原二叉樹
    • 空節點用 ‘#’ 表示,節點之間用空格分開

    思路

    • 一般在做樹的遍歷時,會以非空葉子節點作為最底層,此時還原二叉樹必須要前序遍歷+中序遍歷或后序遍歷
    • 如果以空節點作為樹的最底層,那么只需要前序遍歷就能還原二叉樹,而且能與反序列化同步進行(這是最關鍵的一點)

    Code

    class Solution {// 因為接口限制,所以需要使用了兩個 ssstringstream ss;stringstream sd;char ret[1024];//char* ret;void dfs_s(TreeNode *node) {if (node == nullptr) {ss << "#";return;}ss << node->val;ss << " ";dfs_s(node->left);ss << " ";dfs_s(node->right);}TreeNode* dfs_d() {if (sd.eof())return nullptr;string val; // 只能用 string 接收,用 int 或 char 都會有問題sd >> val;if (val == "#")return nullptr;TreeNode* node = new TreeNode{ stoi(val) }; // node->left = dfs_d();node->right = dfs_d();return node;}public:char* Serialize(TreeNode *root) {dfs_s(root);// 這里耗了很久// return (char*)ss.str().c_str(); // 會出問題,原因未知return strcpy(ret, ss.str().c_str());}TreeNode* Deserialize(char *str) {if (strlen(str) < 1) return nullptr;sd << str;return dfs_d();} };

    38. 字符串的排列(DFS)

    字符串的排列 - NowCoder

    排列組合專題 TODO

    題目描述

    輸入一個字符串,按字典序打印出該字符串中字符的所有排列。 例如輸入字符串 abc, 則打印出由字符 a,b,c 所能排列出來的所有字符串 abc, acb, bac, bca, cab 和 cba。

    思路

    • 深度優先搜索

    Code

    class Solution {string s;string tmp;int strlen;vector<string> ret;vector<int> used;void dfs(int step) {if (step == strlen) {ret.push_back(tmp);return;}for (int i = 0; i<strlen; i++) {if (used[i]) continue;if (i > 0 && s[i] == s[i-1] && !used[i-1])continue;tmp[step] = s[i];used[i] = 1;dfs(step + 1);used[i] = 0;}}public:vector<string> Permutation(string str) {if (str.empty()) return vector<string>();// 當做全局變量s = str;strlen = s.length();sort(s.begin(), s.end()); // 因為可能存在重復,所以需要先排序,將重復的字符集合在一起// 初始化tmp.resize(strlen, '\0');used.resize(strlen, 0);dfs(0);return ret;} };

    39.1 數組中出現次數超過一半的數字(多數投票問題)

    數組中出現次數超過一半的數字 - NowCoder

    題目描述

    數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。 例如輸入一個長度為9的數組{1,2,3,2,2,2,5,4,2}。 由于數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。 如果不存在則輸出0。
    • 要求:時間復雜度 O(N),空間復雜度 O(1)

    思路

  • 多數投票問題(Majority Vote Algorithm)
    • 設置一個計數器 cnt 和保存最多元素的變量 majority
    • 如果 cnt==0,則將 majority 設為當前元素
    • 如果 majority 和當前元素值相同,則 cnt++,反之 cnt--
    • 重復以上兩步,直到掃描完數組
    • cnt 賦值為 0,再次掃描數組,如果數組元素與 majority 相同,cnt++
    • 如果掃描結束后,cnt > nums.size() / 2,則返回 majority,否則返回 0。
  • 找出數組中第 k 大的數字
  • Code

    class Solution {int cnt;int majority; public:int MoreThanHalfNum_Solution(vector<int> nums) {if (nums.empty()) return 0;cnt = 0;for (int i=0; i<nums.size(); i++) {if (cnt == 0)majority = nums[i];if (nums[i] == majority)cnt++;elsecnt--;}cnt = 0;for (auto i : nums) {if (i == majority)cnt++;}return cnt > nums.size()/2 ? majority : 0;} };

    40. 找出數組中第 k 大的數字(數據結構:堆)***

    數組中的第K個最大元素 - LeetCode

    最小的K個數 - NowCoder

    海量數據 Top K 專題 TODO

    題目描述

    找出數組中第 k 大的數/前 k 大的數/第 k 個最大的數
    • 正序找第 k 大的元素和逆序找第 k 大的元素方法是一致的;牛客是前者,LeetCode 是后者
    • 可以改變原數組
      • 要求:時間復雜度 O(N),空間復雜度 O(1)
    • 不可以改變原數組
      • 要求:時間復雜度 O(NlogK),空間復雜度 O(K)
    • 實際上,找出數組中出現次數超過一半的數字可以看做是找出數組中第 n/2 大的數字

    思路

    • 可以改變原數組時:
      • 參考快速排序中的 partition([pɑ:?t??n]) 過程
      • 經過一次 partition 后,數組被 pivot 分成左右兩部分:l 和 r。
        • 當 |l| = k-1 時,pivot 即是所找的第 k 大的數;
        • 當 |l| < k-1,所找的數位于 r 中;
        • 當 |l| > k-1,所找的數位于 l 中.
    • 不可以改變原數組
      • 使用額外空間 - 優先隊列(堆)或 multiset

    Code - 優先隊列(無優化 O(NlogN))(牛客)

    class Solution {vector<int> ret; public:vector<int> GetLeastNumbers_Solution(vector<int>& nums, int k) {// 注意越界條件if (nums.empty() || k <= 0 || k > nums.size()) return vector<int>();if (k == nums.size())return vector<int>(nums);// 構造最小堆,注意:priority_queue 默認是最小堆 priority_queue<int, vector<int>, greater<int>> p;for (auto i : nums) // 缺點,需要完全放入數組,如果是從 100000 個中找前 2 個p.push(i);while (k--) {ret.push_back(p.top());p.pop();}return ret;} };

    Code - 優先隊列(優化 O(NlogK))(牛客)

    class Solution {vector<int> ret; public:vector<int> GetLeastNumbers_Solution(vector<int> &nums, int k) {// 注意越界條件if (nums.empty() || k <= 0 || k > nums.size()) return vector<int>();if (k == nums.size())return vector<int>(nums);// 注意使用堆與無優化的方法不同,這里要使用最大堆priority_queue<int> p;// 先把前 K 個數壓入int i = 0;for (; i < k; i++)p.push(nums[i]);// 判斷后面的數for (; i < nums.size(); i++) {if (nums[i] < p.top()) {p.pop();p.push(nums[i]);}}// 導出結果while (!p.empty()) {ret.push_back(p.top());p.pop();}return ret;} };

    Code - 可以改變數組(牛客)

    class Solution {int partition(vector<int> &nums, int lo, int hi) {// 隨機選擇切分元素// srand(time(0));int base = rand() % (hi - lo + 1) + lo; // 隨機選擇 pivotswap(nums[base], nums[hi]); // 把 pivot 交換到末尾auto& pivot = nums[hi]; // 注意是引用int i = lo, j = hi; // j = hi-1; // errwhile (i < j) {while (nums[i] <= pivot && i < j) // 這里是求正序i++;while (nums[j] >= pivot && i < j) j--;if (i < j)swap(nums[i], nums[j]);}swap(nums[i], pivot);return i;} public:vector<int> GetLeastNumbers_Solution(vector<int> &nums, int k) {// 注意越界條件if (nums.empty() || k <= 0 || k > nums.size()) return vector<int>();if (k == nums.size())return vector<int>(nums);int lo = 0, hi = nums.size() - 1;int index = partition(nums, lo, hi);while(index != k-1) {if (index > k-1) {hi = index - 1;index = partition(nums, lo, hi);} else {lo = index + 1;index = partition(nums, lo, hi);}}return vector<int>(nums.begin(), nums.begin() + k);} };

    Code - 第 k 個最大的數(LeetCode)

    class Solution {int partition(vector<int>& nums, int lo, int hi) {int base = rand() % (hi - lo + 1) + lo; // 隨機選擇 pivotswap(nums[base], nums[hi]); // 把 pivot 交換到末尾auto& pivot = nums[hi]; // 注意是引用int i = lo, j = hi; // j = hi-1; // errwhile (i < j) {while (nums[i] >= pivot && i < j) // 這里是求逆序i++;while (nums[j] <= pivot && i < j)j--;if (i < j)swap(nums[i], nums[j]);}swap(nums[i], pivot);return i;}public:int findKthLargest(vector<int>& nums, int k) {if (nums.empty() || k < 0) return 0;int lo = 0;int hi = nums.size() - 1;int index = partition(nums, lo, hi);while (index != k - 1) {if (index > k - 1) {hi = index - 1;index = partition(nums, lo, hi);}else {lo = index + 1;index = partition(nums, lo, hi);}}return nums[k - 1];} };

    41. 數據流中的中位數(數據結構:堆)

    數據流中的中位數 - NowCoder

    題目描述

    如何得到一個數據流中的中位數? 如果從數據流中讀出奇數個數值,那么中位數就是所有數值排序之后位于中間的數值。 如果從數據流中讀出偶數個數值,那么中位數就是所有數值排序之后中間兩個數的平均值。 我們使用Insert()方法讀取數據流,使用GetMedian()方法獲取當前讀取數據的中位數。

    思路

    • 使用平衡二叉樹 AVL
      • 不推薦,因為一般沒有哪個語言會實現這個結構,它的綜合性能不如紅黑樹
    • 使用兩個堆:一個最大堆,一個最小堆
    • 保持兩個堆的大小平衡

    Code - 使用*_heap系列函數

    class Solution {// 用優先隊列會更方便,這里試試使用 C++ 的 *_heap() 系列函數vector<int> left; // 最大堆vector<int> right; // 最小堆,最小堆中的元素都大于最大堆中的元素int N; // 記錄讀入的元素數 public:Solution(): N(0) {} // 這一步不用也沒關系,默認會初始化為 0void Insert(int num) {N++; // 從 1 開始計數if (N & 1) { // 通過奇偶確保兩個堆中的元素數是平衡的// 如果是第奇數個就加入到 right// 為了保證 right 永遠大于 left,正確的添加方法是,// 先加入到 left,然后彈出 left 的堆頂元素加入到 rightleft.push_back(num);push_heap(left.begin(), left.end()); // push 后要重新調整堆,默認是最大堆num = left[0]; // 保存堆頂元素pop_heap(left.begin(), left.end()); // 在 pop 前,需要將堆頂元素移到末尾left.pop_back();right.push_back(num);push_heap(right.begin(), right.end(), greater<int>()); // 調整到最小堆,需要加入仿函數} else {// 如果是第偶數個就加入到左邊right.push_back(num);push_heap(right.begin(), right.end(), greater<int>());num = right[0];pop_heap(right.begin(), right.end(), greater<int>());right.pop_back();left.push_back(num);push_heap(left.begin(), left.end());}}double GetMedian() { if (N & 1) { // 如果是奇數,那么中位數就是 right 的堆頂return (double)right[0];} else {return (double)(left[0] + right[0]) / 2;}} };

    Code - 使用優先隊列

    class Solution {priority_queue<int> left; // 最大堆priority_queue<int, vector<int>, greater<int>> right; // 最小堆,最小堆中的元素都大于最大堆中的元素int N; // 記錄讀入的元素數 public:Solution(): N(0) {} // 這一步不用也沒關系,默認會初始化為 0void Insert(int num) {N++; // 從 1 開始計數if(N & 1) { // 通過奇偶確保兩個堆中的元素數是平衡的// 如果是第奇數個就加入到 right// 為了保證 right 永遠大于 left,正確的添加方法是,// 先加入到 left,然后彈出 left 的堆頂元素加入到 rightleft.push(num);num = left.top();left.pop();right.push(num);} else { // 如果是第偶數個就加入到左邊right.push(num);num = right.top();right.pop();left.push(num);}}double GetMedian() { if (N & 1) { // 如果是奇數,那么中位數就是 right 的堆頂return (double)right.top();} else {return (double)(left.top() + right.top()) / 2;}} };

    42. 連續子數組的最大和

    連續子數組的最大和 - NowCoder

    題目描述

    {6,-3,-2,7,-15,1,2,2},連續子數組的最大和為 8(從第 0 個開始,到第 3 個為止)

    思路

    • 因為不需要輸出路徑,所以不需要 DP
    • 法1)暴力枚舉-兩層循環
    • 法2)實際上,只要遍歷一次即可,首先用一個變量保存當前的最大值
      • 如果當前和 sum 為負數,那么直接舍棄,用下一個值作為當前和
      • 否則,加上下一個值(無論正負)
      • 與當前最大值比較,保留最大的

    Code - 法1

    class Solution { public:int FindGreatestSumOfSubArray(vector<int>& array) {int _max = array[0]; // 存在全為負數的情況// 最安全的作法是賦值為數組的第一個數for (int i = 0; i < array.size(); i++) {int _sum = 0;for (int j = i; j < array.size(); j++) {_sum += array[j];_max = max(_max, _sum);}}return _max;} };

    Code - 法2

    class Solution { public:int FindGreatestSumOfSubArray(vector<int>& array) {if (array.empty()) return int();if (array.size() == 1) return array[0];int _max = array[0]; // 存在全為負數的情況// 最安全的作法是賦值為數組的第一個數int _sum = array[0];for (int i = 1; i < array.size(); i++) {if (_sum < 0) {_sum = array[i];} else {_sum += array[i];}_max = max(_sum, _max);}return _max;} };

    43. 從 1 到 n 整數中 1 出現的次數(Trick)

    整數中1出現的次數(從1到n整數中1出現的次數) - NowCoder

    數字 1 的個數 - LeetCode

    題目描述

    給定一個整數 n,計算所有小于等于 n 的非負整數中數字 1 出現的個數。

    思路

    • 暴力枚舉,時間復雜度 O(NlogN)
    • 找規律 O(logN)

    Code - 暴力枚舉

    class Solution {int numberOf1(int i) {int cnt = 0;while(i) {if(i % 10 == 1)cnt++;i /= 10;}return cnt;} public:// int countDigitOne(int n) { // LeetCodeint NumberOf1Between1AndN_Solution(int n) {int cnt = 0;for (int i=1; i<=n; i++)cnt += numberOf1(i);return cnt;} };
    • LeetCode 會超時

    Code - 找規律

    class Solution { public:// int countDigitOne(int n) { // LeetCodeint NumberOf1Between1AndN_Solution(int n) {int cnt = 0;for (long m=1; m<=n; m*=10) { // 注意這里用 int m 在 LeetCode 會越界int a = n/m;int b = n%m;cnt += (a+8) / 10 * m + (a%10==1)*(b+1);}return cnt;} };

    LeetCode 討論區

    44. 數字序列中的某一位數字(Trick)

    題目描述

    數字以 0123456789101112131415... 的格式序列化到一個字符串中,求這個字符串的第 index 位。 在這個序列中,第 5 位是 5(從 0 計數),第 13 位是 1,第 19 位是 4.

    思路

    • 暴力求解
      • 累加每個數的長度
    • Trick-類似二分的思想
      • 比如第 1001 位,
      • 0~9 的長度為 10——10 < 1001
      • 10~99 的長度為 180——10+180 < 1001
      • 100~999 的長度 為 2700——10+180+2700 > 1001
      • (1001 - 10 - 180) = 811 = 270*3 + 1
      • 100 + 270 = 370 的第 1 位(從 0 計數),即 7

    Code

    int countOfIntegers(int digits); int digitAtIndex(int index, int digits); int beginNumber(int digits);int digitAtIndex(int index) {if(index < 0)return -1;int digits = 1;while(true) {int numbers = countOfIntegers(digits);if(index < numbers * digits)return digitAtIndex(index, digits);index -= digits * numbers;digits++;}return -1; }int countOfIntegers(int digits) {if(digits == 1)return 10;int count = (int) std::pow(10, digits - 1);return 9 * count; }int digitAtIndex(int index, int digits) {int number = beginNumber(digits) + index / digits;int indexFromRight = digits - index % digits;for(int i = 1; i < indexFromRight; ++i)number /= 10;return number % 10; }int beginNumber(int digits) {if(digits == 1)return 0;return (int) std::pow(10, digits - 1); }

    45. 把數組排成最小的數(排序)

    把數組排成最小的數 - NowCoder

    題目描述

    輸入一個正整數數組,把數組里所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。 例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字為321323。

    思路

    • 自定義排序
      • 在比較兩個字符串 S1 和 S2 的大小時,應該比較的是 S1+S2 和 S2+S1 的大小,
      • 如果 S1+S2 < S2+S1,那么應該把 S1 排在前面,否則應該把 S2 排在前面。
    • 利用 stringstream 拼接數字
    • C++ 中 int 轉 string 的函數
      • to_string()

    Code - 使用比較函數

    class Solution {static bool cmp(const int &l, const int &r) {string ll = to_string(l) + to_string(r);string rr = to_string(r) + to_string(l);return ll < rr;} public:string PrintMinNumber(vector<int> numbers) {sort(numbers.begin(), numbers.end(), cmp);stringstream ss;for (auto i : numbers) ss << to_string(i);return ss.str();} };

    Code - 使用Lambda表達式

    class Solution { public:string PrintMinNumber(vector<int> numbers) {sort(numbers.begin(), numbers.end(), [](const int &l, const int &r){return to_string(l) + to_string(r) < to_string(r) + to_string(l)});stringstream ss;for (auto i : numbers) ss << to_string(i);return ss.str();} };

    46. 把數字翻譯成字符串(解碼方法)(動態規劃)

    解碼方法 - LeetCode

    題目描述

    給定一個數字,按照如下規則翻譯成字符串:1 翻譯成“a”,2 翻譯成“b”... 26 翻譯成“z”。 給定一個只包含數字的非空字符串,請計算解碼方法的總數。
    • 劍指Offer 上是數字范圍為 0~25,其他一致

    思路

    • 動態規劃
    • 遞推公式dp[0] = 1 dp[1] = 0 int(s[0]) == 0= 1 其他 dp[i] += dp[i-1] int(s[i-1: i]) != 0 && int(s[i-2: i]) > 26+= dp[i-1] + dp[i-2] int(s[i-1: i]) != 0 && int(s[i-2: i]) <= 26

    Code(Python)

    class Solution:def numDecodings(self, s):""":type s: str:rtype: int"""if len(s) < 1: return 0n = len(s)dp = [0] * (n + 1)dp[0] = 1 # 注意初始化 dp[0] = 1dp[1] = 1 if s[0] != '0' else 0for i in range(2, n+1):if int(s[i-1]) != 0:dp[i] += dp[i-1]if int(s[i-2]) == 0:continueif int(s[i-2: i]) <= 26:dp[i] += dp[i-2]return dp[n]

    47. 禮物的最大價值(年終獎)(動態規劃)

    年終獎_牛客網

    題目描述

    在一個 m*n 的棋盤的每一個格都放有一個禮物,每個禮物都有一定價值(大于 0)。 從左上角開始拿禮物,每次向右或向下移動一格,直到右下角結束。 給定一個棋盤,求拿到禮物的最大價值。例如,對于如下棋盤1 10 3 812 2 9 65 7 4 113 7 16 5 禮物的最大價值為 1+12+5+7+7+16+5=53。

    思路

    • 深度優先搜索-復雜度大
    • 動態規劃
    • 二維遞推公式初始化 dp[0][0] = board[0][0] dp[i][0] = dp[i-1][0] + board[i][0] dp[0][j] = dp[0][j-1] + board[0][j]dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + board[i][j]
      • 注意邊界條件
    • 一維遞推公式(優化版)TODO

    Code - 二維DP

    class Bonus { public:int getMost(vector<vector<int>>& board) {if (board.empty() || board[0].empty())return 0;int m = board.size();int n = board[0].size();vector<vector<int>> dp(m, vector<int>(n, 0));dp[0][0] = board[0][0];for (int i=1; i<m; i++)dp[i][0] = dp[i-1][0] + board[i][0];for (int j=1; j<n; j++)dp[0][j] = dp[0][j-1] + board[0][j];for (int i=1; i<m; i++) {for (int j=1; j<n; j++) {dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + board[i][j];}}return dp[m-1][n-1];} };

    Code - 一維DP

    class Bonus { public:int getMost(vector<vector<int>>& board) {if (board.empty() || board[0].empty())return 0;int n = board[0].size();vector<int> dp(n, 0); // 注意不是 dp(0, n)for (auto& v: board) {dp[0] += v[0];for (int i=1; i<n; i++)dp[i] = max(dp[i], dp[i-1]) + v[i];}return dp[n-1];} };

    48. 最長不含重復字符的子字符串(動態規劃)

    題目描述

    輸入一個字符串(只包含 a~z 的字符),求其最長不含重復字符的子字符串的長度。 例如對于 arabcacfr,最長不含重復字符的子字符串為 acfr,長度為 4。

    思路

    • 暴力枚舉,時間復雜度 O(N^3),如果使用 set 的結構,可以降到 O(N^2)
    • 動態規劃
    • 遞推思路記:dp[i] := 以 s[i] 結尾的最長不重復子串注意:這并不是全局最長的結果,全局最長用另一個變量保存 遞推公式:dp[i] = dp[i-1] + 1 s[i] 之前沒有出現過= d s[i] 出現過,d == 兩次出現之間的距離,且 d <= dp[i-1]= dp[i-1] + 1 s[i] 出現過,d == 兩次出現之間的距離,但 d > dp[i-1]

    Code - DP

    int longestSubstringWithoutDuplication(const string& s) {if (s.length() < 1) return 0;int n = s.length();int maxLen = 0;vector<int> dp(n, 1); // 長度至少為 1vector<int> book(26, -1); // 模擬字典// dp[0] = 1;book[s[0] - 'a'] = 0;for (int i=1; i < n; i++) {int pre = book[s[i] - 'a'];if (pre < 0 || i - pre > dp[i-1]) {dp[i] = dp[i-1] + 1;maxLen = max(dp[i], maxLen);}else {maxLen = max(dp[i-1], maxLen);dp[i] = i - pre;}book[s[i] - 'a'] = i;}return maxLen; }int main() {cout << longestSubstringWithoutDuplication("abcacfrar") << endl; // 4cout << longestSubstringWithoutDuplication("acfrarabc") << endl; // 4cout << longestSubstringWithoutDuplication("arabcacfr") << endl; // 4cout << longestSubstringWithoutDuplication("aaaa") << endl; // 1 cout << longestSubstringWithoutDuplication("abcdefg") << endl; // 7 cout << longestSubstringWithoutDuplication("") << endl; // 0cout << longestSubstringWithoutDuplication("aaabbbccc") << endl; // 2cout << longestSubstringWithoutDuplication("abcdcba") << endl; // 4cout << longestSubstringWithoutDuplication("abcdaef") << endl; // 6return 0; }

    Code - 優化

    int longestSubstringWithoutDuplication(const std::string& s) {if (s.length() < 1) return 0;int n = s.length();int curLen = 0;int maxLen = 0;vector<int> book(26, -1); // 模擬字典for (int i=0; i < n; i++) {int pre = book[s[i] - 'a'];if (pre < 0 || i - pre > curLen) {curLen++;maxLen = max(curLen, maxLen);}else {maxLen = max(curLen, maxLen);curLen = i - pre;}book[s[i] - 'a'] = i;}return maxLen; }int main() {cout << longestSubstringWithoutDuplication("abcacfrar") << endl; // 4cout << longestSubstringWithoutDuplication("acfrarabc") << endl; // 4cout << longestSubstringWithoutDuplication("arabcacfr") << endl; // 4cout << longestSubstringWithoutDuplication("aaaa") << endl; // 1 cout << longestSubstringWithoutDuplication("abcdefg") << endl; // 7 cout << longestSubstringWithoutDuplication("") << endl; // 0cout << longestSubstringWithoutDuplication("aaabbbccc") << endl; // 2cout << longestSubstringWithoutDuplication("abcdcba") << endl; // 4cout << longestSubstringWithoutDuplication("abcdaef") << endl; // 6return 0; }

    49. 丑數(動態規劃)

    丑數 - NowCoder

    題目描述

    把只包含質因子2、3和5的數稱作丑數(Ugly Number)。 例如6、8都是丑數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第一個丑數。求按從小到大的順序的第N個丑數。

    思路

    • 動態規劃

    Code

    class Solution { public:int GetUglyNumber_Solution(int n) {// if (n <=6 ) return n;vector<int> dp(n+1, 0); // dp[0] = 0;int i2=1, i3=1, i5=1;dp[1] = 1;for (int i=2; i<=n; i++) {int nxt2 = dp[i2] * 2;int nxt3 = dp[i3] * 3;int nxt5 = dp[i5] * 5;dp[i] = min({nxt2, nxt3, nxt5});// 注意以下不能使用 else 結構,因為可能存在 nxtM == nxtN 的情況if (dp[i] == nxt2) i2++;if (dp[i] == nxt3) i3++;if (dp[i] == nxt5) i5++;}return dp[n];} };

    50.1 第一個只出現一次的字符位置(Hash)

    第一個只出現一次的字符 - NowCoder

    題目描述

    在一個字符串 (1 <= 字符串長度 <= 10000,全部由字母組成) 中找到第一個只出現一次的字符,并返回它的位置。

    思路

    • Hash 表
    • 因為是字符,可以使用數組模擬哈希表

    Code - 數組

    class Solution { public:int FirstNotRepeatingChar(const string& s) {vector<int> m(256, 0);for (auto c : s)if (m[c] < 1)m[c] = 1;elsem[c] += 1;for (int i=0; i < s.length(); i++)if (m[s[i]] == 1)return i;return -1;} };

    Code - Hash(C++ map)

    class Solution {map<char, int> m; public:int FirstNotRepeatingChar(const string& s) {for (auto c : s)if (m.count(c) < 1)m[c] = 1;elsem[c] += 1;for (int i=0; i < s.length(); i++)if (m[s[i]] == 1)return i;return -1;} };

    Code - Hash(Python dict)

    class Solution:def FirstNotRepeatingChar(self, s):d = dict()for c in s:if c in d:d[c] += 1else:d[c] = 1for i in range(len(s)):if d[s[i]] == 1:return ireturn -1

    50.2 字符流中第一個只出現一次的字符(數據結構:隊列)

    字符流中第一個不重復的字符 - NowCoder

    題目描述

    請實現一個函數用來找出字符流中第一個只出現一次的字符。 例如,當從字符流中只讀出前兩個字符"go"時,第一個只出現一次的字符是"g"。 當從該字符流中讀出前六個字符“google"時,第一個只出現一次的字符是"l"。

    思路

    • 計數排序——使用一個數組數組保存出現元素的次數
    • 使用隊列保存出現的元素

    Code - 隊列

    class Solution {int book[256];queue<char> q;public:Solution() {fill(book, book + 256, 0); // 初始化,實際不需要這步,默認全部初始化為 0}void Insert(char ch) {book[ch] += 1;q.push(ch);while (!q.empty() && book[q.front()] > 1) {q.pop();}}char FirstAppearingOnce() {return q.empty() ? '#' : q.front();} };

    51. 數組中的逆序對

    數組中的逆序對 - NowCoder

    題目描述

    在數組中的兩個數字,如果前面一個數字大于后面的數字,則這兩個數字組成一個逆序對。 輸入一個數組,求出這個數組中的逆序對的總數P。并將P對1000000007取模的結果輸出。 即輸出P%1000000007

    總結

    以上是生活随笔為你收集整理的算法工程师笔试 -剑指offer-习题详细解答的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    成人无码影片精品久久久 | 超碰97人人做人人爱少妇 | 欧美日本精品一区二区三区 | 国产午夜手机精彩视频 | 亚洲欧洲中文日韩av乱码 | 最新国产麻豆aⅴ精品无码 | 国产亚洲欧美日韩亚洲中文色 | 成人欧美一区二区三区黑人免费 | 日本xxxx色视频在线观看免费 | 一区二区三区高清视频一 | 亚洲人成网站在线播放942 | 四虎影视成人永久免费观看视频 | 国内综合精品午夜久久资源 | 亚洲欧美精品aaaaaa片 | 中文字幕无码av激情不卡 | 国内精品久久毛片一区二区 | 老熟女重囗味hdxx69 | 无遮挡国产高潮视频免费观看 | 99久久久无码国产aaa精品 | 男人和女人高潮免费网站 | 亚洲精品午夜国产va久久成人 | 午夜丰满少妇性开放视频 | 午夜精品久久久内射近拍高清 | 99在线 | 亚洲 | 少妇无套内谢久久久久 | 学生妹亚洲一区二区 | 精品久久久久久人妻无码中文字幕 | 一区二区三区高清视频一 | 亚洲热妇无码av在线播放 | 成年美女黄网站色大免费视频 | yw尤物av无码国产在线观看 | 国产精品无码久久av | 国产97在线 | 亚洲 | 久久精品99久久香蕉国产色戒 | 国产精华av午夜在线观看 | 国产精品久久久久无码av色戒 | 久久精品女人的天堂av | 日本大香伊一区二区三区 | 中文字幕色婷婷在线视频 | 熟妇人妻无码xxx视频 | 精品成在人线av无码免费看 | 日本大乳高潮视频在线观看 | 精品无码av一区二区三区 | 久久婷婷五月综合色国产香蕉 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲一区二区三区含羞草 | 久久97精品久久久久久久不卡 | 又色又爽又黄的美女裸体网站 | 亚洲国产成人av在线观看 | 宝宝好涨水快流出来免费视频 | 亚欧洲精品在线视频免费观看 | 亚洲一区二区三区香蕉 | 国产小呦泬泬99精品 | 99久久人妻精品免费一区 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 巨爆乳无码视频在线观看 | 人人妻人人澡人人爽欧美精品 | 99久久亚洲精品无码毛片 | 国产精品99爱免费视频 | 亚洲人成无码网www | 少妇无码av无码专区在线观看 | 国产精品国产自线拍免费软件 | 无码av免费一区二区三区试看 | 亚洲热妇无码av在线播放 | 无遮无挡爽爽免费视频 | www国产精品内射老师 | 偷窥村妇洗澡毛毛多 | 免费无码肉片在线观看 | 免费看男女做好爽好硬视频 | 四虎国产精品免费久久 | 婷婷五月综合激情中文字幕 | 少妇性荡欲午夜性开放视频剧场 | 97精品人妻一区二区三区香蕉 | 国产精品高潮呻吟av久久4虎 | 亚洲精品一区二区三区婷婷月 | 97无码免费人妻超级碰碰夜夜 | 兔费看少妇性l交大片免费 | 亚洲精品国产精品乱码视色 | 亚洲の无码国产の无码步美 | 在线 国产 欧美 亚洲 天堂 | 黑人巨大精品欧美黑寡妇 | 爽爽影院免费观看 | 亚洲国产精品成人久久蜜臀 | 国产亚洲tv在线观看 | a在线观看免费网站大全 | 中文字幕人成乱码熟女app | 99er热精品视频 | 亚洲乱码中文字幕在线 | 无码av免费一区二区三区试看 | 国产欧美熟妇另类久久久 | 国产美女极度色诱视频www | 熟妇人妻激情偷爽文 | 九一九色国产 | 97资源共享在线视频 | 亚洲精品欧美二区三区中文字幕 | 人妻少妇精品无码专区二区 | 亚洲乱码日产精品bd | 欧美日韩综合一区二区三区 | 无码中文字幕色专区 | 无码人妻出轨黑人中文字幕 | 国产特级毛片aaaaaaa高清 | 久久无码中文字幕免费影院蜜桃 | 日日鲁鲁鲁夜夜爽爽狠狠 | 成人片黄网站色大片免费观看 | 精品久久久久久人妻无码中文字幕 | 久久精品国产99精品亚洲 | www国产亚洲精品久久久日本 | 亚洲欧美日韩成人高清在线一区 | 2020久久超碰国产精品最新 | 性做久久久久久久久 | 国产精品毛多多水多 | 久久久久免费看成人影片 | 少妇人妻偷人精品无码视频 | 特黄特色大片免费播放器图片 | 国产偷自视频区视频 | 人人澡人摸人人添 | 青春草在线视频免费观看 | 秋霞成人午夜鲁丝一区二区三区 | 久久午夜无码鲁丝片 | 黑人玩弄人妻中文在线 | 在线天堂新版最新版在线8 | 久久精品国产日本波多野结衣 | 中文字幕 人妻熟女 | 国内揄拍国内精品少妇国语 | 成人无码精品1区2区3区免费看 | 亚洲综合精品香蕉久久网 | 久久久精品欧美一区二区免费 | 3d动漫精品啪啪一区二区中 | 宝宝好涨水快流出来免费视频 | 两性色午夜视频免费播放 | 久久午夜无码鲁丝片秋霞 | 99re在线播放 | 男女作爱免费网站 | 亚洲乱码日产精品bd | 大肉大捧一进一出视频出来呀 | 国内丰满熟女出轨videos | 成人欧美一区二区三区黑人免费 | 一本久道久久综合婷婷五月 | 极品尤物被啪到呻吟喷水 | 亚洲一区二区三区国产精华液 | 亚洲一区二区三区无码久久 | 色妞www精品免费视频 | 国产三级久久久精品麻豆三级 | 天天综合网天天综合色 | 日本丰满护士爆乳xxxx | 欧美日韩在线亚洲综合国产人 | 国产成人人人97超碰超爽8 | 久久午夜无码鲁丝片 | 成人无码视频免费播放 | 中文字幕人妻丝袜二区 | 4hu四虎永久在线观看 | 精品水蜜桃久久久久久久 | 99久久精品无码一区二区毛片 | 四虎国产精品免费久久 | 亚洲精品国产精品乱码视色 | 高潮毛片无遮挡高清免费视频 | 88国产精品欧美一区二区三区 | 久久99精品国产麻豆蜜芽 | 亚洲综合精品香蕉久久网 | 人人妻在人人 | 婷婷五月综合激情中文字幕 | 亚洲无人区一区二区三区 | 人妻与老人中文字幕 | 精品熟女少妇av免费观看 | 国产精品人人爽人人做我的可爱 | 亚洲国产精品久久人人爱 | 久久久久久久人妻无码中文字幕爆 | 一本色道久久综合狠狠躁 | 人人妻人人澡人人爽人人精品 | 巨爆乳无码视频在线观看 | 日韩在线不卡免费视频一区 | 内射爽无广熟女亚洲 | 日韩欧美群交p片內射中文 | 又大又紧又粉嫩18p少妇 | 色综合久久88色综合天天 | 国产偷国产偷精品高清尤物 | 免费乱码人妻系列无码专区 | 无码帝国www无码专区色综合 | 精品国偷自产在线 | 两性色午夜免费视频 | 国产美女精品一区二区三区 | 学生妹亚洲一区二区 | 国产成人无码a区在线观看视频app | 精品亚洲韩国一区二区三区 | 久久精品一区二区三区四区 | 国产午夜福利亚洲第一 | 在线播放无码字幕亚洲 | 精品国产精品久久一区免费式 | 色偷偷人人澡人人爽人人模 | 伊人久久大香线蕉av一区二区 | 欧美精品无码一区二区三区 | 午夜福利一区二区三区在线观看 | 国产亚洲欧美日韩亚洲中文色 | 少妇厨房愉情理9仑片视频 | 男女下面进入的视频免费午夜 | 亚洲色www成人永久网址 | 久久精品无码一区二区三区 | 国产亚洲美女精品久久久2020 | 99久久婷婷国产综合精品青草免费 | 无码帝国www无码专区色综合 | 国产精品第一国产精品 | 免费播放一区二区三区 | 欧美肥老太牲交大战 | 精品久久久久久人妻无码中文字幕 | 日日鲁鲁鲁夜夜爽爽狠狠 | 一区二区三区高清视频一 | 天堂亚洲2017在线观看 | 亚洲小说春色综合另类 | 欧美 亚洲 国产 另类 | 国产97人人超碰caoprom | 亚洲啪av永久无码精品放毛片 | 国产9 9在线 | 中文 | 国产av一区二区三区最新精品 | 国产香蕉97碰碰久久人人 | 欧美熟妇另类久久久久久不卡 | 高清国产亚洲精品自在久久 | 国产午夜无码视频在线观看 | 午夜性刺激在线视频免费 | 97久久精品无码一区二区 | 噜噜噜亚洲色成人网站 | 狠狠噜狠狠狠狠丁香五月 | 国产美女极度色诱视频www | √天堂中文官网8在线 | 国产真实乱对白精彩久久 | 少妇无码一区二区二三区 | 亚洲无人区午夜福利码高清完整版 | 亚洲午夜福利在线观看 | 老熟妇仑乱视频一区二区 | 无码国模国产在线观看 | 人人澡人人妻人人爽人人蜜桃 | 一本无码人妻在中文字幕免费 | 中文无码成人免费视频在线观看 | 久久精品国产亚洲精品 | 国产精品.xx视频.xxtv | 夜精品a片一区二区三区无码白浆 | 永久免费观看国产裸体美女 | 国产精品久久久一区二区三区 | 精品国产成人一区二区三区 | 国产精品资源一区二区 | 特大黑人娇小亚洲女 | 国产免费久久精品国产传媒 | 欧美性猛交内射兽交老熟妇 | 奇米影视888欧美在线观看 | 亚洲区欧美区综合区自拍区 | 熟妇女人妻丰满少妇中文字幕 | 中文字幕乱妇无码av在线 | 亚洲色偷偷男人的天堂 | 男人和女人高潮免费网站 | 国产欧美亚洲精品a | 4hu四虎永久在线观看 | 99久久精品日本一区二区免费 | 免费无码午夜福利片69 | 亚洲一区二区三区 | 18无码粉嫩小泬无套在线观看 | 台湾无码一区二区 | 扒开双腿疯狂进出爽爽爽视频 | 国产9 9在线 | 中文 | 成人综合网亚洲伊人 | 人妻人人添人妻人人爱 | 内射欧美老妇wbb | 全球成人中文在线 | 日本高清一区免费中文视频 | 十八禁视频网站在线观看 | 日产精品99久久久久久 | 午夜男女很黄的视频 | 中文字幕 人妻熟女 | 国内精品人妻无码久久久影院 | 亚洲国产精品毛片av不卡在线 | 亚洲爆乳大丰满无码专区 | 国产精品18久久久久久麻辣 | 亚洲 a v无 码免 费 成 人 a v | 国产精品对白交换视频 | 久久人人爽人人爽人人片av高清 | 三上悠亚人妻中文字幕在线 | 国产莉萝无码av在线播放 | 国产特级毛片aaaaaa高潮流水 | 在线 国产 欧美 亚洲 天堂 | 色综合久久网 | 国产 浪潮av性色四虎 | 精品国产福利一区二区 | 精品国产青草久久久久福利 | 老司机亚洲精品影院无码 | 大肉大捧一进一出好爽视频 | 曰本女人与公拘交酡免费视频 | 亚洲欧美日韩综合久久久 | 成人无码视频免费播放 | 四虎永久在线精品免费网址 | 久久久婷婷五月亚洲97号色 | 国产又爽又猛又粗的视频a片 | 国产亚洲精品久久久久久大师 | 欧洲熟妇精品视频 | 久久久久成人片免费观看蜜芽 | 久久精品国产精品国产精品污 | 亚洲爆乳精品无码一区二区三区 | 欧洲美熟女乱又伦 | 欧美性黑人极品hd | 精品无码av一区二区三区 | 亚洲の无码国产の无码步美 | 亚洲の无码国产の无码步美 | 亚洲gv猛男gv无码男同 | 丰满人妻翻云覆雨呻吟视频 | 亚洲国产精品成人久久蜜臀 | 18禁黄网站男男禁片免费观看 | 成人亚洲精品久久久久 | 亚洲国产一区二区三区在线观看 | 日本一卡二卡不卡视频查询 | 国产片av国语在线观看 | 久久综合给合久久狠狠狠97色 | 久久这里只有精品视频9 | 在线观看免费人成视频 | 国产亚洲精品久久久久久久久动漫 | 强奷人妻日本中文字幕 | 好屌草这里只有精品 | 亚洲の无码国产の无码影院 | 亚洲精品中文字幕 | 亚洲精品一区二区三区在线 | 少妇激情av一区二区 | 亚洲一区二区三区含羞草 | 粗大的内捧猛烈进出视频 | 精品国产精品久久一区免费式 | 性生交片免费无码看人 | 熟妇女人妻丰满少妇中文字幕 | 亚洲成a人一区二区三区 | 色一情一乱一伦一视频免费看 | 丰满人妻被黑人猛烈进入 | 无遮挡国产高潮视频免费观看 | 精品国偷自产在线视频 | 国产精品久久久久7777 | 无码任你躁久久久久久久 | 亚洲日韩av片在线观看 | 天堂久久天堂av色综合 | 国产成人无码av片在线观看不卡 | 国产舌乚八伦偷品w中 | 熟女体下毛毛黑森林 | 亚洲国产欧美日韩精品一区二区三区 | 97久久超碰中文字幕 | 久久人人爽人人爽人人片av高清 | 久久久国产精品无码免费专区 | 色一情一乱一伦一区二区三欧美 | 国产高潮视频在线观看 | 露脸叫床粗话东北少妇 | 特大黑人娇小亚洲女 | 成人精品视频一区二区三区尤物 | 久久久国产精品无码免费专区 | 东京热无码av男人的天堂 | 熟女少妇人妻中文字幕 | 国产精品亚洲专区无码不卡 | 亚洲区欧美区综合区自拍区 | 丰满少妇人妻久久久久久 | 国内揄拍国内精品少妇国语 | 欧美日本精品一区二区三区 | 欧美日韩一区二区综合 | 丰满妇女强制高潮18xxxx | 波多野结衣一区二区三区av免费 | 亚洲国产精品无码久久久久高潮 | 亚洲爆乳精品无码一区二区三区 | 一本久久a久久精品亚洲 | 麻豆国产97在线 | 欧洲 | 中文字幕人成乱码熟女app | 国产无遮挡又黄又爽又色 | 日本高清一区免费中文视频 | av人摸人人人澡人人超碰下载 | 鲁鲁鲁爽爽爽在线视频观看 | 自拍偷自拍亚洲精品被多人伦好爽 | 欧美日韩一区二区三区自拍 | 国产极品视觉盛宴 | 精品久久久中文字幕人妻 | 精品久久久久久亚洲精品 | 欧美阿v高清资源不卡在线播放 | 激情人妻另类人妻伦 | 丁香啪啪综合成人亚洲 | 国精产品一品二品国精品69xx | 欧美日韩久久久精品a片 | 久久久久国色av免费观看性色 | 狠狠色噜噜狠狠狠7777奇米 | 国产成人无码av在线影院 | 精品夜夜澡人妻无码av蜜桃 | 中文字幕无码免费久久9一区9 | 人妻插b视频一区二区三区 | 国产肉丝袜在线观看 | 色综合久久88色综合天天 | 国产成人久久精品流白浆 | 午夜精品久久久久久久久 | 欧美亚洲国产一区二区三区 | 精品一区二区三区无码免费视频 | 少妇高潮一区二区三区99 | 婷婷五月综合激情中文字幕 | 无码国产激情在线观看 | 中文字幕+乱码+中文字幕一区 | 丰满妇女强制高潮18xxxx | 久久综合狠狠综合久久综合88 | 免费无码一区二区三区蜜桃大 | 小鲜肉自慰网站xnxx | 麻豆蜜桃av蜜臀av色欲av | 久久亚洲中文字幕无码 | 18禁黄网站男男禁片免费观看 | 强开小婷嫩苞又嫩又紧视频 | 丰满少妇人妻久久久久久 | 鲁鲁鲁爽爽爽在线视频观看 | 亚洲国产精品久久人人爱 | 黑人粗大猛烈进出高潮视频 | 精品国产精品久久一区免费式 | 人妻体内射精一区二区三四 | 欧美人与牲动交xxxx | 丰满少妇女裸体bbw | 无码国模国产在线观看 | 天天做天天爱天天爽综合网 | 黄网在线观看免费网站 | 欧美xxxx黑人又粗又长 | 欧美日韩综合一区二区三区 | 精品久久久无码中文字幕 | 免费无码午夜福利片69 | 大乳丰满人妻中文字幕日本 | 亚洲精品久久久久中文第一幕 | 亚洲精品国产品国语在线观看 | 欧美激情综合亚洲一二区 | 九九久久精品国产免费看小说 | 久久99精品国产.久久久久 | 久久久久亚洲精品中文字幕 | 精品久久久无码中文字幕 | 日本va欧美va欧美va精品 | 俺去俺来也在线www色官网 | 老熟女乱子伦 | 国内精品人妻无码久久久影院 | 国产精品香蕉在线观看 | 色偷偷人人澡人人爽人人模 | 精品厕所偷拍各类美女tp嘘嘘 | 久久国产自偷自偷免费一区调 | 亚洲精品一区二区三区大桥未久 | 精品国产精品久久一区免费式 | 四虎永久在线精品免费网址 | www国产亚洲精品久久网站 | 亚洲成av人片在线观看无码不卡 | 亚洲一区二区三区四区 | 国产成人精品一区二区在线小狼 | 国内精品久久毛片一区二区 | 亚洲成av人影院在线观看 | 欧美性生交活xxxxxdddd | 日产国产精品亚洲系列 | 99久久精品国产一区二区蜜芽 | 国内老熟妇对白xxxxhd | 成人精品一区二区三区中文字幕 | 18无码粉嫩小泬无套在线观看 | 国产精品久久久久9999小说 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲国产av美女网站 | 欧美午夜特黄aaaaaa片 | 国产免费久久精品国产传媒 | 欧美zoozzooz性欧美 | 欧洲极品少妇 | 东京热一精品无码av | 大胆欧美熟妇xx | 老司机亚洲精品影院 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 精品欧洲av无码一区二区三区 | 97人妻精品一区二区三区 | 老司机亚洲精品影院无码 | 色综合久久久无码中文字幕 | 色窝窝无码一区二区三区色欲 | 免费播放一区二区三区 | 人人妻人人澡人人爽欧美一区九九 | 色婷婷欧美在线播放内射 | 国产香蕉尹人综合在线观看 | 一本一道久久综合久久 | 欧美人妻一区二区三区 | 欧美性生交xxxxx久久久 | 少妇人妻大乳在线视频 | 狠狠噜狠狠狠狠丁香五月 | 捆绑白丝粉色jk震动捧喷白浆 | 色诱久久久久综合网ywww | 欧美日韩在线亚洲综合国产人 | 2019午夜福利不卡片在线 | 无码人妻久久一区二区三区不卡 | 亚洲综合无码久久精品综合 | 日日干夜夜干 | 日本一区二区三区免费播放 | 亚洲精品成人av在线 | 俺去俺来也www色官网 | 亚洲精品无码国产 | 免费观看激色视频网站 | 一区二区三区乱码在线 | 欧洲 | 国产激情综合五月久久 | 中国女人内谢69xxxxxa片 | 成人免费视频一区二区 | 午夜精品久久久久久久久 | 色婷婷综合激情综在线播放 | 波多野结衣一区二区三区av免费 | 国产成人综合色在线观看网站 | 2020久久香蕉国产线看观看 | 精品日本一区二区三区在线观看 | 欧美性黑人极品hd | 人妻互换免费中文字幕 | 久久国产精品萌白酱免费 | 免费无码一区二区三区蜜桃大 | 国产内射老熟女aaaa | 国产精品资源一区二区 | 国产精品久久久一区二区三区 | 欧美性生交活xxxxxdddd | 少妇太爽了在线观看 | 亚洲精品美女久久久久久久 | 久久午夜无码鲁丝片午夜精品 | 精品日本一区二区三区在线观看 | 国产人妻人伦精品1国产丝袜 | 人人妻人人澡人人爽人人精品浪潮 | 精品国产乱码久久久久乱码 | 在线观看国产午夜福利片 | 强开小婷嫩苞又嫩又紧视频 | 在线观看国产午夜福利片 | 毛片内射-百度 | 国产精品沙发午睡系列 | 久久人人爽人人爽人人片av高清 | 少妇无码一区二区二三区 | 久久久久成人片免费观看蜜芽 | 福利一区二区三区视频在线观看 | a在线观看免费网站大全 | 丝袜美腿亚洲一区二区 | 玩弄中年熟妇正在播放 | 97色伦图片97综合影院 | 午夜免费福利小电影 | 国产综合在线观看 | 欧美成人午夜精品久久久 | 妺妺窝人体色www婷婷 | 欧洲熟妇色 欧美 | 老子影院午夜精品无码 | www国产亚洲精品久久久日本 | 亚洲人亚洲人成电影网站色 | 久久精品女人天堂av免费观看 | 丰满少妇人妻久久久久久 | 中文字幕无线码免费人妻 | 亚洲一区av无码专区在线观看 | 精品成在人线av无码免费看 | 久久97精品久久久久久久不卡 | 亚洲一区二区三区 | 久久国产精品精品国产色婷婷 | 999久久久国产精品消防器材 | 亚洲一区二区三区国产精华液 | 国产乱人伦偷精品视频 | 亚洲 a v无 码免 费 成 人 a v | 国产精品久久久久久亚洲影视内衣 | 丝袜 中出 制服 人妻 美腿 | 国产精品爱久久久久久久 | 丰满人妻翻云覆雨呻吟视频 | 久久精品女人天堂av免费观看 | 精品国产福利一区二区 | 亚洲精品中文字幕乱码 | 亚洲人亚洲人成电影网站色 | 久久精品女人的天堂av | 亚洲第一无码av无码专区 | 中文字幕无码视频专区 | 成人性做爰aaa片免费看不忠 | 亚洲成av人片天堂网无码】 | 亚洲欧美日韩国产精品一区二区 | 亚洲日韩中文字幕在线播放 | 300部国产真实乱 | 国产片av国语在线观看 | 中文字幕无码免费久久9一区9 | 国产极品美女高潮无套在线观看 | 亚洲一区二区三区 | 红桃av一区二区三区在线无码av | 亚洲欧美精品aaaaaa片 | 东京热男人av天堂 | а√天堂www在线天堂小说 | 人妻少妇精品无码专区动漫 | 福利一区二区三区视频在线观看 | 精品无人区无码乱码毛片国产 | 国产av无码专区亚洲a∨毛片 | 又大又硬又黄的免费视频 | 久久 国产 尿 小便 嘘嘘 | 国产成人一区二区三区别 | 久久99精品国产.久久久久 | 激情五月综合色婷婷一区二区 | 又黄又爽又色的视频 | 日本www一道久久久免费榴莲 | 一二三四社区在线中文视频 | 激情综合激情五月俺也去 | 最近的中文字幕在线看视频 | 色窝窝无码一区二区三区色欲 | 无码国模国产在线观看 | 色婷婷av一区二区三区之红樱桃 | 精品少妇爆乳无码av无码专区 | 亚洲一区二区三区含羞草 | 精品少妇爆乳无码av无码专区 | 十八禁真人啪啪免费网站 | 国产福利视频一区二区 | 国产人妻大战黑人第1集 | 精品国产一区二区三区四区 | 在线亚洲高清揄拍自拍一品区 | 国产97在线 | 亚洲 | 捆绑白丝粉色jk震动捧喷白浆 | 美女毛片一区二区三区四区 | 丰满少妇熟乱xxxxx视频 | 熟女少妇人妻中文字幕 | 国产精品久久久一区二区三区 | 久久精品女人天堂av免费观看 | 51国偷自产一区二区三区 | 无码播放一区二区三区 | 精品一区二区三区波多野结衣 | 麻豆果冻传媒2021精品传媒一区下载 | 久久综合激激的五月天 | 亚洲国产成人a精品不卡在线 | 性色欲网站人妻丰满中文久久不卡 | 国产乡下妇女做爰 | 国产乱人无码伦av在线a | 图片小说视频一区二区 | 中文字幕乱码亚洲无线三区 | 青草青草久热国产精品 | 成年女人永久免费看片 | 亚洲国精产品一二二线 | 亚洲中文字幕在线无码一区二区 | 欧美色就是色 | 乱中年女人伦av三区 | 日本饥渴人妻欲求不满 | 国产一区二区三区影院 | 成人无码影片精品久久久 | 又黄又爽又色的视频 | 熟女体下毛毛黑森林 | 成人精品视频一区二区三区尤物 | 欧美乱妇无乱码大黄a片 | 亚洲欧洲无卡二区视頻 | 一本色道久久综合狠狠躁 | 亚洲一区二区三区在线观看网站 | 亚洲乱码中文字幕在线 | 色一情一乱一伦一区二区三欧美 | 无码国产色欲xxxxx视频 | 国产两女互慰高潮视频在线观看 | 好屌草这里只有精品 | 欧美性色19p | 国产精品高潮呻吟av久久4虎 | 中文字幕无线码免费人妻 | 宝宝好涨水快流出来免费视频 | 强奷人妻日本中文字幕 | 永久免费观看国产裸体美女 | 中文字幕亚洲情99在线 | 国产女主播喷水视频在线观看 | 在线a亚洲视频播放在线观看 | 亚洲精品国产精品乱码不卡 | 国产一区二区三区四区五区加勒比 | 激情亚洲一区国产精品 | 中文字幕无线码免费人妻 | 伊人久久大香线焦av综合影院 | 日本护士xxxxhd少妇 | 国产人妖乱国产精品人妖 | 国产精品无码久久av | 狠狠亚洲超碰狼人久久 | 国产成人无码一二三区视频 | 国产人妻大战黑人第1集 | 国产成人无码av片在线观看不卡 | 大乳丰满人妻中文字幕日本 | 午夜精品久久久久久久 | 精品国偷自产在线 | 亚洲乱码国产乱码精品精 | 99re在线播放 | 国产精品对白交换视频 | 日韩精品一区二区av在线 | 免费观看又污又黄的网站 | 国产精品高潮呻吟av久久 | 亚洲日韩乱码中文无码蜜桃臀网站 | 无码一区二区三区在线 | 久久人人爽人人爽人人片ⅴ | 麻豆精品国产精华精华液好用吗 | 老熟妇乱子伦牲交视频 | 无码吃奶揉捏奶头高潮视频 | 日本一区二区三区免费播放 | 性色av无码免费一区二区三区 | 亚洲精品久久久久久一区二区 | 亚洲色偷偷男人的天堂 | 国产精品怡红院永久免费 | 国产女主播喷水视频在线观看 | 亚洲熟妇自偷自拍另类 | 国产无套粉嫩白浆在线 | 国产激情一区二区三区 | 俺去俺来也www色官网 | 欧洲美熟女乱又伦 | 人人妻人人澡人人爽人人精品浪潮 | 欧洲精品码一区二区三区免费看 | 国产精品无码一区二区桃花视频 | 久久久久久久久蜜桃 | 日韩少妇白浆无码系列 | 午夜丰满少妇性开放视频 | 欧美国产亚洲日韩在线二区 | 国产绳艺sm调教室论坛 | 亚拍精品一区二区三区探花 | 高清国产亚洲精品自在久久 | 日本一卡2卡3卡四卡精品网站 | 久久久久亚洲精品中文字幕 | 又大又紧又粉嫩18p少妇 | 人人超人人超碰超国产 | 国产精品久久国产三级国 | 日韩成人一区二区三区在线观看 | 天天拍夜夜添久久精品大 | 久久99精品久久久久久动态图 | 欧美人与善在线com | 爆乳一区二区三区无码 | 国产精品久久久午夜夜伦鲁鲁 | 久久亚洲中文字幕精品一区 | 粉嫩少妇内射浓精videos | 亚洲日韩精品欧美一区二区 | 国产成人午夜福利在线播放 | 日韩av激情在线观看 | 97精品国产97久久久久久免费 | 97久久国产亚洲精品超碰热 | 久久99精品久久久久久动态图 | 波多野结衣av一区二区全免费观看 | 成人免费无码大片a毛片 | 全黄性性激高免费视频 | 亚洲一区二区三区四区 | 国产亚洲精品久久久久久久 | 东北女人啪啪对白 | 人妻无码αv中文字幕久久琪琪布 | 精品久久久久久人妻无码中文字幕 | 樱花草在线播放免费中文 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲精品一区三区三区在线观看 | 青青青爽视频在线观看 | 成人无码影片精品久久久 | 成人综合网亚洲伊人 | 人妻有码中文字幕在线 | 亚洲精品一区二区三区在线 | 麻豆人妻少妇精品无码专区 | 久久精品成人欧美大片 | 亚洲综合伊人久久大杳蕉 | 成年女人永久免费看片 | 亚洲精品国产第一综合99久久 | 九九久久精品国产免费看小说 | 欧美精品国产综合久久 | 老熟女乱子伦 | 97精品人妻一区二区三区香蕉 | 亚洲 日韩 欧美 成人 在线观看 | 九九综合va免费看 | 婷婷五月综合缴情在线视频 | 熟妇人妻激情偷爽文 | 西西人体www44rt大胆高清 | 日韩精品a片一区二区三区妖精 | 67194成是人免费无码 | 亚洲一区二区三区四区 | 性欧美videos高清精品 | 97夜夜澡人人爽人人喊中国片 | 国产农村妇女高潮大叫 | 日韩无套无码精品 | 伊在人天堂亚洲香蕉精品区 | 国产精品无码永久免费888 | 人人妻人人澡人人爽欧美精品 | 高清无码午夜福利视频 | 欧洲精品码一区二区三区免费看 | 国产黄在线观看免费观看不卡 | a国产一区二区免费入口 | 成人精品视频一区二区三区尤物 | 无人区乱码一区二区三区 | 日本精品人妻无码77777 天堂一区人妻无码 | www国产精品内射老师 | 国产亚洲精品精品国产亚洲综合 | 好屌草这里只有精品 | 久久久久99精品国产片 | 高潮毛片无遮挡高清免费视频 | 国内丰满熟女出轨videos | 国产99久久精品一区二区 | 99久久精品日本一区二区免费 | 成人欧美一区二区三区 | 又大又硬又爽免费视频 | 少妇性荡欲午夜性开放视频剧场 | 亚洲人成影院在线观看 | 永久免费精品精品永久-夜色 | 国产特级毛片aaaaaa高潮流水 | 天天摸天天碰天天添 | 99久久精品国产一区二区蜜芽 | 久久精品国产99精品亚洲 | 日本一区二区三区免费高清 | 亚洲日韩一区二区三区 | 在线成人www免费观看视频 | 中文字幕精品av一区二区五区 | 国产麻豆精品一区二区三区v视界 | 天下第一社区视频www日本 | 亚洲区小说区激情区图片区 | 最近的中文字幕在线看视频 | 狂野欧美激情性xxxx | 狠狠躁日日躁夜夜躁2020 | 乱人伦人妻中文字幕无码 | 精品久久久久久亚洲精品 | 成熟女人特级毛片www免费 | 国产精品无码一区二区三区不卡 | 久久综合色之久久综合 | 在线视频网站www色 | 国产成人综合在线女婷五月99播放 | 国产高潮视频在线观看 | 国产精品久久精品三级 | 精品少妇爆乳无码av无码专区 | 狠狠色色综合网站 | 欧美日韩综合一区二区三区 | 欧美熟妇另类久久久久久不卡 | 久久久久成人片免费观看蜜芽 | 青草青草久热国产精品 | 婷婷六月久久综合丁香 | 亚洲成a人片在线观看无码 | 女人和拘做爰正片视频 | 福利一区二区三区视频在线观看 | 亚洲成熟女人毛毛耸耸多 | 国产精品理论片在线观看 | 成人无码精品一区二区三区 | 日韩 欧美 动漫 国产 制服 | 欧美第一黄网免费网站 | 乌克兰少妇性做爰 | 欧美老妇交乱视频在线观看 | 久久久久成人精品免费播放动漫 | 熟妇女人妻丰满少妇中文字幕 | 中文字幕+乱码+中文字幕一区 | 免费观看的无遮挡av | 亚洲码国产精品高潮在线 | 亚洲综合无码一区二区三区 | 美女毛片一区二区三区四区 | 欧美人妻一区二区三区 | 国产精品久久久久久亚洲影视内衣 | 丰腴饱满的极品熟妇 | 免费观看激色视频网站 | 日本一本二本三区免费 | 久久久久国色av免费观看性色 | 日本高清一区免费中文视频 | 国产偷国产偷精品高清尤物 | 亚洲成色在线综合网站 | 偷窥村妇洗澡毛毛多 | 99久久精品无码一区二区毛片 | 欧美阿v高清资源不卡在线播放 | 国产亚洲日韩欧美另类第八页 | 色综合视频一区二区三区 | 午夜福利一区二区三区在线观看 | 4hu四虎永久在线观看 | 狠狠综合久久久久综合网 | 成人aaa片一区国产精品 | 亚洲自偷自拍另类第1页 | 精品国产精品久久一区免费式 | 日本乱偷人妻中文字幕 | √8天堂资源地址中文在线 | 天天综合网天天综合色 | 熟女体下毛毛黑森林 | 永久免费观看国产裸体美女 | 漂亮人妻洗澡被公强 日日躁 | 国内丰满熟女出轨videos | 超碰97人人做人人爱少妇 | 久久精品人妻少妇一区二区三区 | 欧美性猛交xxxx富婆 | 国产成人人人97超碰超爽8 | 国产精品.xx视频.xxtv | 久久人妻内射无码一区三区 | 国产成人综合在线女婷五月99播放 | 色综合久久88色综合天天 | 少妇人妻大乳在线视频 | 99久久精品日本一区二区免费 | 欧美日韩精品 | 国产成人精品视频ⅴa片软件竹菊 | 又大又黄又粗又爽的免费视频 | 亚洲国产av美女网站 | 日本一区二区三区免费播放 | 红桃av一区二区三区在线无码av | 色婷婷av一区二区三区之红樱桃 | 久9re热视频这里只有精品 | 精品乱子伦一区二区三区 | 伊人久久大香线蕉午夜 | 无码人中文字幕 | 蜜桃无码一区二区三区 | 午夜不卡av免费 一本久久a久久精品vr综合 | 欧美兽交xxxx×视频 | 在线精品国产一区二区三区 | 日韩av激情在线观看 | 任你躁国产自任一区二区三区 | 女人高潮内射99精品 | 中文字幕+乱码+中文字幕一区 | 日产精品高潮呻吟av久久 | 国产一区二区三区四区五区加勒比 | 国产精品亚洲а∨无码播放麻豆 | 黑人粗大猛烈进出高潮视频 | 国产精品毛片一区二区 | av无码不卡在线观看免费 | 亚洲色欲久久久综合网东京热 | 又大又黄又粗又爽的免费视频 | 日韩精品a片一区二区三区妖精 | 国产激情艳情在线看视频 | 国精产品一品二品国精品69xx | 无码任你躁久久久久久久 | 夜精品a片一区二区三区无码白浆 | 少妇高潮喷潮久久久影院 | 亚洲色欲久久久综合网东京热 | 久久熟妇人妻午夜寂寞影院 | 88国产精品欧美一区二区三区 | 国产成人无码av在线影院 | 国产av一区二区精品久久凹凸 | 亚洲国产成人av在线观看 | 亚洲区欧美区综合区自拍区 | 久久久国产精品无码免费专区 | 四虎4hu永久免费 | 日韩精品乱码av一区二区 | 夜夜高潮次次欢爽av女 | 日韩 欧美 动漫 国产 制服 | 老司机亚洲精品影院无码 | 偷窥日本少妇撒尿chinese | 久久天天躁狠狠躁夜夜免费观看 | 亚洲毛片av日韩av无码 | 久久久久99精品国产片 | 亚洲日韩中文字幕在线播放 | 久久久久免费看成人影片 | 国产绳艺sm调教室论坛 | 在线观看国产午夜福利片 | 国产成人人人97超碰超爽8 | 中文字幕乱码中文乱码51精品 | a在线亚洲男人的天堂 | 欧洲熟妇色 欧美 | 好爽又高潮了毛片免费下载 | 伊人久久婷婷五月综合97色 | 欧美人与禽zoz0性伦交 | 日产精品高潮呻吟av久久 | 国产极品美女高潮无套在线观看 | 搡女人真爽免费视频大全 | 久久综合色之久久综合 | www一区二区www免费 | 国产 精品 自在自线 | 成人一区二区免费视频 | 国产成人一区二区三区别 | 国产两女互慰高潮视频在线观看 | 免费国产成人高清在线观看网站 | 亚洲天堂2017无码中文 | 成熟妇人a片免费看网站 | 丝袜人妻一区二区三区 | 久久精品一区二区三区四区 | 国内老熟妇对白xxxxhd | av人摸人人人澡人人超碰下载 | 久久五月精品中文字幕 | 亚洲中文字幕无码中字 | 青青久在线视频免费观看 | 人妻少妇精品无码专区二区 | 97久久超碰中文字幕 | 久久精品女人天堂av免费观看 | 亚洲精品一区二区三区在线观看 | 国产精品沙发午睡系列 | 国内精品一区二区三区不卡 | 久久久精品欧美一区二区免费 | 欧美自拍另类欧美综合图片区 | 99麻豆久久久国产精品免费 | 在线观看免费人成视频 | 免费观看又污又黄的网站 | 丝袜 中出 制服 人妻 美腿 | 麻花豆传媒剧国产免费mv在线 | 亚洲综合无码久久精品综合 | 成人无码影片精品久久久 | 中文字幕人成乱码熟女app | 日韩精品成人一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 一本大道伊人av久久综合 | 亚洲一区二区三区香蕉 | 色婷婷欧美在线播放内射 | 色综合视频一区二区三区 | 亚洲色欲色欲欲www在线 | 久久久久亚洲精品男人的天堂 | 久久精品一区二区三区四区 | 日本一区二区三区免费播放 | 久久精品中文字幕大胸 | 亚洲中文字幕无码中文字在线 | 国产精品亚洲а∨无码播放麻豆 | 300部国产真实乱 | 丁香啪啪综合成人亚洲 | 国产国语老龄妇女a片 | 蜜臀av无码人妻精品 | 少妇厨房愉情理9仑片视频 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产成人无码av一区二区 | 久久伊人色av天堂九九小黄鸭 | 欧美日本精品一区二区三区 | 日本丰满护士爆乳xxxx | 夜夜躁日日躁狠狠久久av | 久久国产劲爆∧v内射 | 久久99国产综合精品 | 男女猛烈xx00免费视频试看 | 少妇激情av一区二区 | 在线精品亚洲一区二区 | 亚洲精品午夜国产va久久成人 | 国产xxx69麻豆国语对白 | 亚洲精品午夜国产va久久成人 | 久久久无码中文字幕久... | 亚洲色www成人永久网址 | 午夜精品久久久内射近拍高清 | 精品国产一区av天美传媒 | 婷婷丁香六月激情综合啪 | 国内综合精品午夜久久资源 | 国精产品一区二区三区 | 永久黄网站色视频免费直播 | 色婷婷香蕉在线一区二区 | 国内老熟妇对白xxxxhd | 牲欲强的熟妇农村老妇女视频 | 国产成人人人97超碰超爽8 | 久久久久久久久888 | 国产一区二区不卡老阿姨 | 人人妻人人藻人人爽欧美一区 | 国精产品一品二品国精品69xx | 精品国偷自产在线 | 国产午夜福利亚洲第一 | 狠狠色噜噜狠狠狠7777奇米 | 毛片内射-百度 | 精品一区二区三区无码免费视频 | 男人的天堂av网站 | 奇米影视888欧美在线观看 | 亚洲中文字幕av在天堂 | 青青青爽视频在线观看 | 国产亚洲精品久久久久久 | 亚洲大尺度无码无码专区 | 久久亚洲国产成人精品性色 | 国产网红无码精品视频 | 国产精品.xx视频.xxtv | 国产精品亚洲а∨无码播放麻豆 | 少妇厨房愉情理9仑片视频 | 中文字幕日韩精品一区二区三区 | 精品久久久久香蕉网 | 永久免费观看美女裸体的网站 | 熟女俱乐部五十路六十路av | 日韩欧美成人免费观看 | 色婷婷久久一区二区三区麻豆 | 婷婷五月综合缴情在线视频 | 午夜性刺激在线视频免费 | 午夜成人1000部免费视频 | 久久99国产综合精品 | 国产一区二区三区影院 | 久久精品成人欧美大片 | 亚洲无人区午夜福利码高清完整版 | 免费国产成人高清在线观看网站 | 无码纯肉视频在线观看 | 无码人妻精品一区二区三区下载 | 97无码免费人妻超级碰碰夜夜 | 老熟妇仑乱视频一区二区 | 国产精品美女久久久网av | 高潮毛片无遮挡高清免费 | 亚洲色偷偷偷综合网 | 亚洲精品中文字幕久久久久 | 少妇高潮喷潮久久久影院 | 国产亚洲精品久久久久久久久动漫 | 东京热无码av男人的天堂 | 久久久成人毛片无码 | 熟妇人妻无乱码中文字幕 | 亚洲成a人片在线观看无码3d | 亚洲精品国产a久久久久久 | 国产人妻精品午夜福利免费 | 午夜成人1000部免费视频 | 天天av天天av天天透 | 性开放的女人aaa片 | 久久久久免费看成人影片 | 久久久久久国产精品无码下载 | 久久久精品456亚洲影院 | 国产真实乱对白精彩久久 | 免费人成网站视频在线观看 | ass日本丰满熟妇pics | 亚洲精品午夜无码电影网 | 亚洲国产精品毛片av不卡在线 | 麻豆成人精品国产免费 | 亚洲成av人片天堂网无码】 | 久激情内射婷内射蜜桃人妖 | 乱码午夜-极国产极内射 | 麻豆人妻少妇精品无码专区 | 国产精品爱久久久久久久 | 男女作爱免费网站 | 欧美精品无码一区二区三区 | 精品久久久久久亚洲精品 | 国产亚洲美女精品久久久2020 | 丰满少妇熟乱xxxxx视频 | 亚洲色大成网站www | 蜜桃臀无码内射一区二区三区 | 久久99精品国产麻豆蜜芽 | 人人妻人人藻人人爽欧美一区 | 精品国产av色一区二区深夜久久 | 国产婷婷色一区二区三区在线 | 免费男性肉肉影院 | 日本护士毛茸茸高潮 | 国产女主播喷水视频在线观看 | 亚洲乱码国产乱码精品精 | 国产精品理论片在线观看 | 黑人粗大猛烈进出高潮视频 | 超碰97人人射妻 | 亚洲男人av天堂午夜在 | 亚洲熟熟妇xxxx | 偷窥日本少妇撒尿chinese | 精品日本一区二区三区在线观看 | 日本在线高清不卡免费播放 | 丰满少妇高潮惨叫视频 | 国产精品无码一区二区三区不卡 | 亚洲熟妇色xxxxx亚洲 | 九月婷婷人人澡人人添人人爽 | 曰本女人与公拘交酡免费视频 | 国产特级毛片aaaaaaa高清 | 女人和拘做爰正片视频 | 午夜免费福利小电影 | 无码帝国www无码专区色综合 | 野狼第一精品社区 | 欧美真人作爱免费视频 | 美女张开腿让人桶 | 97资源共享在线视频 | 成人精品视频一区二区三区尤物 | 亚洲色欲久久久综合网东京热 | 日日摸天天摸爽爽狠狠97 | 麻豆果冻传媒2021精品传媒一区下载 | 小鲜肉自慰网站xnxx | 国产97人人超碰caoprom | 天堂一区人妻无码 | 色老头在线一区二区三区 | 婷婷五月综合缴情在线视频 | 亚洲精品一区二区三区在线 | 国产又粗又硬又大爽黄老大爷视 | 欧美 日韩 亚洲 在线 | 国产人妻久久精品二区三区老狼 | 无码国产乱人伦偷精品视频 | 岛国片人妻三上悠亚 | 久久亚洲中文字幕精品一区 | 成人免费视频视频在线观看 免费 | 婷婷五月综合激情中文字幕 | 亚洲综合无码久久精品综合 | 日日噜噜噜噜夜夜爽亚洲精品 | 精品国产一区二区三区四区 | 久久久精品国产sm最大网站 | 久久精品女人天堂av免费观看 | 亚洲中文字幕无码中文字在线 | 色老头在线一区二区三区 | 亚洲午夜福利在线观看 | 无码毛片视频一区二区本码 | 鲁一鲁av2019在线 | 亚洲s色大片在线观看 | 性欧美大战久久久久久久 | 性欧美熟妇videofreesex | 人妻无码久久精品人妻 | 国产成人综合美国十次 | 中文字幕无码av波多野吉衣 | 国产69精品久久久久app下载 | 高潮毛片无遮挡高清免费视频 | 丰满护士巨好爽好大乳 | 国产精品久久福利网站 | 欧美成人午夜精品久久久 | 国产亚洲美女精品久久久2020 | 国产口爆吞精在线视频 | 扒开双腿吃奶呻吟做受视频 | 少妇激情av一区二区 | 草草网站影院白丝内射 | 国产午夜精品一区二区三区嫩草 | 131美女爱做视频 | 久久国内精品自在自线 | 131美女爱做视频 | а√资源新版在线天堂 | 日日鲁鲁鲁夜夜爽爽狠狠 | 青青久在线视频免费观看 | 久久国产精品偷任你爽任你 | 日产精品高潮呻吟av久久 | 极品尤物被啪到呻吟喷水 | 欧美xxxxx精品 | 国产成人无码av片在线观看不卡 | 亚洲日韩一区二区三区 | 国精产品一品二品国精品69xx | 色婷婷香蕉在线一区二区 | 午夜男女很黄的视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 扒开双腿疯狂进出爽爽爽视频 | 色婷婷欧美在线播放内射 | 日韩人妻无码一区二区三区久久99 | 动漫av一区二区在线观看 | 亚洲人交乣女bbw | 欧美日韩综合一区二区三区 | 乱码午夜-极国产极内射 | 午夜免费福利小电影 | 三级4级全黄60分钟 | 永久免费观看国产裸体美女 | 搡女人真爽免费视频大全 | 无套内谢老熟女 | 日本精品高清一区二区 | 无码吃奶揉捏奶头高潮视频 | 亚洲成色在线综合网站 | 日韩精品a片一区二区三区妖精 | 日产精品99久久久久久 | 天堂一区人妻无码 | 国产精品久久国产三级国 | 欧美freesex黑人又粗又大 | 国产亚洲精品精品国产亚洲综合 | 人人超人人超碰超国产 | 又粗又大又硬又长又爽 | 人人妻人人澡人人爽欧美一区 | 精品亚洲韩国一区二区三区 | 亚洲一区二区三区国产精华液 | 国产精品第一区揄拍无码 | 天天拍夜夜添久久精品 | 精品无码成人片一区二区98 | 亚洲а∨天堂久久精品2021 | 97人妻精品一区二区三区 | 丰满人妻翻云覆雨呻吟视频 | 四虎国产精品一区二区 | 亚洲a无码综合a国产av中文 | 又大又紧又粉嫩18p少妇 | 18无码粉嫩小泬无套在线观看 | 色一情一乱一伦一区二区三欧美 | 午夜福利试看120秒体验区 | 在线播放免费人成毛片乱码 | 久久久久久九九精品久 | 日本www一道久久久免费榴莲 | 在线成人www免费观看视频 | 一二三四在线观看免费视频 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 熟女俱乐部五十路六十路av | 亚洲第一网站男人都懂 | 377p欧洲日本亚洲大胆 | 国産精品久久久久久久 | 丝袜 中出 制服 人妻 美腿 | 高中生自慰www网站 | 无码人妻少妇伦在线电影 | 日韩av激情在线观看 | 国产熟女一区二区三区四区五区 | 亚洲国产午夜精品理论片 | 丁香啪啪综合成人亚洲 | 亚洲一区二区三区国产精华液 | 欧美freesex黑人又粗又大 | 精品国产av色一区二区深夜久久 | 欧洲欧美人成视频在线 | 亚洲小说图区综合在线 | 亚洲日韩一区二区三区 | 大乳丰满人妻中文字幕日本 | 一个人看的视频www在线 | 兔费看少妇性l交大片免费 | 国产偷国产偷精品高清尤物 | 香港三级日本三级妇三级 | 国产手机在线αⅴ片无码观看 | 88国产精品欧美一区二区三区 | 午夜精品久久久久久久久 | 美女张开腿让人桶 | 无码任你躁久久久久久久 | 青青久在线视频免费观看 | 亚洲熟妇色xxxxx欧美老妇 | 免费无码一区二区三区蜜桃大 | 久久久久免费精品国产 | 亚洲国产精品无码久久久久高潮 | 日韩人妻无码中文字幕视频 | 精品乱码久久久久久久 | 午夜精品久久久久久久久 | 亚洲区小说区激情区图片区 | 亚洲自偷自偷在线制服 | 亚洲国产精品无码久久久久高潮 | 免费看男女做好爽好硬视频 | 午夜熟女插插xx免费视频 | 我要看www免费看插插视频 | 久久婷婷五月综合色国产香蕉 | 亚洲成a人片在线观看日本 | 澳门永久av免费网站 | 国产精品人妻一区二区三区四 | 高潮毛片无遮挡高清免费 | 成人女人看片免费视频放人 | 99久久久无码国产精品免费 | 精品无码成人片一区二区98 | 成在人线av无码免观看麻豆 | 精品无码国产一区二区三区av | 丝袜 中出 制服 人妻 美腿 | 国产国产精品人在线视 | 国产偷自视频区视频 | 漂亮人妻洗澡被公强 日日躁 | 国产成人综合美国十次 | 国产激情无码一区二区 | 亚洲国产欧美日韩精品一区二区三区 | 国模大胆一区二区三区 | 狠狠综合久久久久综合网 | 欧美阿v高清资源不卡在线播放 | 奇米影视7777久久精品人人爽 | 国产精品美女久久久 | 亚洲人成人无码网www国产 | 欧美精品无码一区二区三区 | 久久久亚洲欧洲日产国码αv | 特级做a爰片毛片免费69 | 色五月丁香五月综合五月 | 正在播放老肥熟妇露脸 | 国产精品美女久久久网av | 欧美xxxx黑人又粗又长 | 日日夜夜撸啊撸 | 丝袜 中出 制服 人妻 美腿 | 久久99精品国产麻豆蜜芽 | 荫蒂被男人添的好舒服爽免费视频 | 天天燥日日燥 | 在线观看欧美一区二区三区 | 综合网日日天干夜夜久久 | 曰韩无码二三区中文字幕 | 精品人妻人人做人人爽 | 久久99精品国产麻豆蜜芽 | 亚洲综合伊人久久大杳蕉 | 亚洲中文字幕久久无码 | 国产亚洲欧美在线专区 | 久久精品无码一区二区三区 | 波多野结衣 黑人 | 曰本女人与公拘交酡免费视频 | 特大黑人娇小亚洲女 | 日韩av无码一区二区三区不卡 | 日日摸天天摸爽爽狠狠97 | 一本久久a久久精品亚洲 | 久久久中文字幕日本无吗 | 兔费看少妇性l交大片免费 | 久在线观看福利视频 | 亚洲理论电影在线观看 | 成人欧美一区二区三区黑人 | 老司机亚洲精品影院无码 | 粉嫩少妇内射浓精videos | 亚洲成色www久久网站 | 久激情内射婷内射蜜桃人妖 | 久久成人a毛片免费观看网站 | 76少妇精品导航 | 无码av岛国片在线播放 | 亚洲中文字幕久久无码 | 欧美 日韩 人妻 高清 中文 | 老头边吃奶边弄进去呻吟 | 玩弄中年熟妇正在播放 | 精品亚洲成av人在线观看 | 久久久精品成人免费观看 | 国精产品一品二品国精品69xx | 久久精品女人天堂av免费观看 | 中文字幕无码av激情不卡 | 日韩无套无码精品 | 精品国产一区二区三区av 性色 | 精品国产一区二区三区四区在线看 | 国内精品九九久久久精品 | 激情内射日本一区二区三区 | 中文字幕乱码人妻无码久久 | 欧美 丝袜 自拍 制服 另类 | 国产午夜亚洲精品不卡下载 | 色情久久久av熟女人妻网站 | 色一情一乱一伦 | 国产亚洲精品久久久久久久久动漫 | av人摸人人人澡人人超碰下载 | 日本精品久久久久中文字幕 | 特黄特色大片免费播放器图片 | 人妻少妇被猛烈进入中文字幕 | 欧美精品在线观看 | 成人试看120秒体验区 | 日韩人妻无码一区二区三区久久99 | 日韩精品久久久肉伦网站 | 亚洲欧美精品伊人久久 | 无码av岛国片在线播放 | 好屌草这里只有精品 | 国产无av码在线观看 | ass日本丰满熟妇pics | 自拍偷自拍亚洲精品10p | 少妇一晚三次一区二区三区 | 国产欧美亚洲精品a | 精品国产福利一区二区 | 国内揄拍国内精品人妻 | 色爱情人网站 | 97精品国产97久久久久久免费 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 狠狠躁日日躁夜夜躁2020 | 亚洲 另类 在线 欧美 制服 | 国产办公室秘书无码精品99 | 午夜无码区在线观看 | 欧美激情综合亚洲一二区 | 亚洲精品一区三区三区在线观看 | 国产高清av在线播放 | 亚洲精品久久久久久久久久久 | 久久精品无码一区二区三区 | 丝袜足控一区二区三区 | 成人精品视频一区二区 | 99国产欧美久久久精品 | 99久久99久久免费精品蜜桃 | 天堂久久天堂av色综合 | 一本久久伊人热热精品中文字幕 | 国产精品久久久久久无码 | 欧美成人家庭影院 | 青草青草久热国产精品 | 国产一区二区三区日韩精品 | 国产性生交xxxxx无码 | 天天爽夜夜爽夜夜爽 | 中文字幕av日韩精品一区二区 | 亚洲一区av无码专区在线观看 | 日产精品高潮呻吟av久久 | 蜜臀aⅴ国产精品久久久国产老师 | 一二三四社区在线中文视频 | 大色综合色综合网站 | 亚洲午夜福利在线观看 | 亚洲娇小与黑人巨大交 | 免费男性肉肉影院 | 扒开双腿吃奶呻吟做受视频 | 亚洲国产午夜精品理论片 | 好爽又高潮了毛片免费下载 | 乱码午夜-极国产极内射 | 国产亚洲精品久久久久久国模美 | 亚洲精品综合一区二区三区在线 | 美女毛片一区二区三区四区 | 高清无码午夜福利视频 | 亚洲精品久久久久avwww潮水 | 国产无av码在线观看 | 中文无码精品a∨在线观看不卡 | 国产偷国产偷精品高清尤物 | 性做久久久久久久免费看 | 99久久久国产精品无码免费 | 午夜精品久久久内射近拍高清 | 亚洲精品久久久久久一区二区 | 亚洲男人av香蕉爽爽爽爽 | √天堂资源地址中文在线 | 欧洲极品少妇 | 波多野结衣一区二区三区av免费 | 曰韩无码二三区中文字幕 | 午夜无码区在线观看 | 国产 浪潮av性色四虎 | 成熟妇人a片免费看网站 | 久久综合九色综合欧美狠狠 | 中文字幕 亚洲精品 第1页 | 国产内射老熟女aaaa | 中文无码精品a∨在线观看不卡 | 久在线观看福利视频 | 又粗又大又硬毛片免费看 | 国产亚洲欧美日韩亚洲中文色 | 18黄暴禁片在线观看 | 亚洲精品一区二区三区大桥未久 | 日日躁夜夜躁狠狠躁 | 麻豆果冻传媒2021精品传媒一区下载 | 欧美日韩色另类综合 | 国产一区二区三区影院 | 欧美怡红院免费全部视频 | 99久久久无码国产aaa精品 | 国产精品-区区久久久狼 | 永久免费观看美女裸体的网站 | 国产成人精品必看 | 国产香蕉尹人视频在线 | 亚洲成av人影院在线观看 | 久久无码中文字幕免费影院蜜桃 | 国产两女互慰高潮视频在线观看 | 国产人妻人伦精品 | 国产av久久久久精东av | 四虎4hu永久免费 | 久久人人97超碰a片精品 | 男人和女人高潮免费网站 | 精品偷自拍另类在线观看 | 欧美成人免费全部网站 | 国产亚洲精品久久久久久大师 | 亚洲人成网站免费播放 | 欧洲精品码一区二区三区免费看 | www成人国产高清内射 | 人妻插b视频一区二区三区 | 国产成人人人97超碰超爽8 | 国内老熟妇对白xxxxhd | 国产sm调教视频在线观看 | 最新版天堂资源中文官网 | 精品国产精品久久一区免费式 | 国产亚洲精品久久久久久久 | 精品亚洲韩国一区二区三区 | 高潮喷水的毛片 | 女人高潮内射99精品 | 亚洲小说春色综合另类 | 婷婷综合久久中文字幕蜜桃三电影 | 狠狠噜狠狠狠狠丁香五月 | 亚洲国产欧美在线成人 | 又大又硬又爽免费视频 | 久久综合久久自在自线精品自 | 久久国语露脸国产精品电影 | 欧美人与禽猛交狂配 | 欧美猛少妇色xxxxx | 精品人人妻人人澡人人爽人人 | 内射欧美老妇wbb | 国产精品自产拍在线观看 | 国产va免费精品观看 | 在线 国产 欧美 亚洲 天堂 | 疯狂三人交性欧美 | 亚洲欧美日韩成人高清在线一区 | 久久久久免费精品国产 | 最新版天堂资源中文官网 | а√资源新版在线天堂 | av人摸人人人澡人人超碰下载 | 夜夜影院未满十八勿进 | 日韩视频 中文字幕 视频一区 | 国产99久久精品一区二区 | aⅴ在线视频男人的天堂 | 377p欧洲日本亚洲大胆 | 伊在人天堂亚洲香蕉精品区 | 鲁一鲁av2019在线 | 双乳奶水饱满少妇呻吟 | 国产熟妇另类久久久久 | 在线 国产 欧美 亚洲 天堂 | 国产真实夫妇视频 | 最新国产乱人伦偷精品免费网站 | 乌克兰少妇xxxx做受 | 国产在线无码精品电影网 | 久久人妻内射无码一区三区 | 少妇厨房愉情理9仑片视频 | 夜夜高潮次次欢爽av女 | 国产福利视频一区二区 | 国产成人精品久久亚洲高清不卡 | 97精品国产97久久久久久免费 | 国产精品无码一区二区桃花视频 | 国产熟妇高潮叫床视频播放 | 欧美性猛交xxxx富婆 | 国产亚洲精品久久久久久久久动漫 | 无码av中文字幕免费放 | 一本色道久久综合狠狠躁 | 欧洲极品少妇 | 99riav国产精品视频 | 国产黄在线观看免费观看不卡 | 精品无人国产偷自产在线 | 又大又黄又粗又爽的免费视频 | 国产真实夫妇视频 | 欧美35页视频在线观看 | 狠狠色噜噜狠狠狠7777奇米 | 国产精品99爱免费视频 | 男女猛烈xx00免费视频试看 | 亚洲精品一区二区三区四区五区 | 亚洲乱码国产乱码精品精 | av在线亚洲欧洲日产一区二区 | 人人妻人人澡人人爽欧美一区 | 亚洲国产精品美女久久久久 | 精品国产一区二区三区av 性色 | 51国偷自产一区二区三区 | 中文字幕 亚洲精品 第1页 | 国产亚洲欧美日韩亚洲中文色 | 55夜色66夜色国产精品视频 | 天天燥日日燥 | 18精品久久久无码午夜福利 | 国产在线一区二区三区四区五区 | 99精品无人区乱码1区2区3区 | 久久久成人毛片无码 | 蜜臀av无码人妻精品 | 97资源共享在线视频 | 免费无码av一区二区 | 麻豆国产人妻欲求不满谁演的 | 内射爽无广熟女亚洲 | 国产精品福利视频导航 | 国产免费久久久久久无码 | 人妻无码久久精品人妻 | 天天爽夜夜爽夜夜爽 | 无码人妻出轨黑人中文字幕 | 人人澡人人妻人人爽人人蜜桃 | 亚洲乱码日产精品bd | 国产香蕉尹人视频在线 | 少妇人妻大乳在线视频 | 国产精品99久久精品爆乳 | 老熟妇仑乱视频一区二区 | 中国女人内谢69xxxx | 日韩少妇白浆无码系列 | 成人片黄网站色大片免费观看 | 精品国产aⅴ无码一区二区 | 亚洲a无码综合a国产av中文 | 国内精品人妻无码久久久影院 | www国产亚洲精品久久网站 | 日本精品高清一区二区 | 日日噜噜噜噜夜夜爽亚洲精品 | 性欧美熟妇videofreesex | 好屌草这里只有精品 | 亚洲国产欧美日韩精品一区二区三区 | 久久亚洲中文字幕无码 | 黑人巨大精品欧美黑寡妇 | 亚洲色欲色欲天天天www | 丰满人妻精品国产99aⅴ | 日本va欧美va欧美va精品 | 97资源共享在线视频 | 久久久精品人妻久久影视 | 成人影院yy111111在线观看 | 无码纯肉视频在线观看 | 午夜精品久久久内射近拍高清 | 中文字幕无码av波多野吉衣 | 国产av无码专区亚洲awww | 麻豆av传媒蜜桃天美传媒 | 欧美 亚洲 国产 另类 | 亚洲中文字幕无码一久久区 | 亚洲 激情 小说 另类 欧美 | 午夜丰满少妇性开放视频 | 人人妻人人澡人人爽人人精品浪潮 | 色诱久久久久综合网ywww | 色综合久久久无码中文字幕 | 中文字幕久久久久人妻 | 真人与拘做受免费视频 | 日韩 欧美 动漫 国产 制服 | 无码人妻av免费一区二区三区 | 欧美日韩久久久精品a片 | 人妻熟女一区 | 无码人妻出轨黑人中文字幕 | 国产又粗又硬又大爽黄老大爷视 | 在线成人www免费观看视频 | 久久久久久a亚洲欧洲av冫 | 亚洲成a人片在线观看无码3d | 国产成人精品久久亚洲高清不卡 | 波多野结衣乳巨码无在线观看 | 成人精品视频一区二区三区尤物 | 欧洲精品码一区二区三区免费看 | av香港经典三级级 在线 | 欧美日本精品一区二区三区 | 国产9 9在线 | 中文 | 我要看www免费看插插视频 | 亚洲国产精品久久久天堂 | 国产乡下妇女做爰 | 男女猛烈xx00免费视频试看 | 亚洲小说图区综合在线 | 天堂а√在线中文在线 | 日韩欧美中文字幕公布 | 男女猛烈xx00免费视频试看 | 99视频精品全部免费免费观看 | 水蜜桃亚洲一二三四在线 | 黑人大群体交免费视频 | 国产精品高潮呻吟av久久4虎 | 亚洲中文字幕va福利 | 乱码av麻豆丝袜熟女系列 | 成人片黄网站色大片免费观看 | 2019午夜福利不卡片在线 | 国产午夜亚洲精品不卡下载 | 久久久久久久人妻无码中文字幕爆 | 亚洲经典千人经典日产 | 乱码av麻豆丝袜熟女系列 | 色爱情人网站 | 国产精品高潮呻吟av久久 | 欧美野外疯狂做受xxxx高潮 | 国产午夜精品一区二区三区嫩草 | 香港三级日本三级妇三级 | 偷窥村妇洗澡毛毛多 | 麻豆av传媒蜜桃天美传媒 | 免费网站看v片在线18禁无码 | 久青草影院在线观看国产 | 亚洲国产精品无码久久久久高潮 | 亚洲人交乣女bbw | 亚洲大尺度无码无码专区 | 性生交片免费无码看人 | 成人亚洲精品久久久久 | 中文久久乱码一区二区 | 秋霞成人午夜鲁丝一区二区三区 | 久久久久av无码免费网 | 日本在线高清不卡免费播放 | 少女韩国电视剧在线观看完整 | 日本xxxx色视频在线观看免费 | 熟妇人妻激情偷爽文 | 国产av无码专区亚洲a∨毛片 | 亚洲精品久久久久中文第一幕 | 无码人妻精品一区二区三区下载 | 日本大香伊一区二区三区 | 亚洲欧洲无卡二区视頻 | 久久久久av无码免费网 | 疯狂三人交性欧美 | 丁香啪啪综合成人亚洲 | 俺去俺来也www色官网 | 久久精品丝袜高跟鞋 | 性开放的女人aaa片 | 精品日本一区二区三区在线观看 | 日韩av无码一区二区三区 | 漂亮人妻洗澡被公强 日日躁 | 久久五月精品中文字幕 | 狠狠色欧美亚洲狠狠色www | 男女作爱免费网站 | 亚洲欧洲日本综合aⅴ在线 | 久久伊人色av天堂九九小黄鸭 | 在线播放免费人成毛片乱码 | 国产综合在线观看 | 国产精品无码一区二区桃花视频 | 亚洲伊人久久精品影院 | 一区二区传媒有限公司 | 国产无遮挡吃胸膜奶免费看 | 国产人妖乱国产精品人妖 | 国产熟妇另类久久久久 | 啦啦啦www在线观看免费视频 | 国产亚洲精品久久久久久久久动漫 | 国产精品美女久久久久av爽李琼 | www一区二区www免费 | 国产高清av在线播放 | 国产真实乱对白精彩久久 | 丰满人妻一区二区三区免费视频 | 国产免费久久精品国产传媒 | 国产舌乚八伦偷品w中 | 国产福利视频一区二区 | 亚洲成a人片在线观看无码 | 成人无码视频在线观看网站 | 又大又黄又粗又爽的免费视频 | 成人片黄网站色大片免费观看 | 一个人免费观看的www视频 | 小sao货水好多真紧h无码视频 | 国产极品美女高潮无套在线观看 | 久久五月精品中文字幕 | 无码午夜成人1000部免费视频 | 水蜜桃色314在线观看 | 欧美 亚洲 国产 另类 | 国产精品亚洲一区二区三区喷水 | 久久精品人人做人人综合试看 | 精品无人区无码乱码毛片国产 | 2020最新国产自产精品 | 麻豆成人精品国产免费 | 国产欧美亚洲精品a | 99国产欧美久久久精品 | 国产亚洲精品久久久久久大师 | 18禁黄网站男男禁片免费观看 | 国产成人无码区免费内射一片色欲 | 午夜免费福利小电影 | 欧美亚洲国产一区二区三区 | 在线а√天堂中文官网 | 最近中文2019字幕第二页 | 欧美zoozzooz性欧美 |