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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python(c++)刷题+剑指offer

發布時間:2024/7/23 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python(c++)刷题+剑指offer 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

03. 數組中重復的數字

思路:hash

class Solution:def findRepeatNumber(self, nums: List[int]) -> int:dict_ = dict()for i in range(len(nums)):if nums[i] in dict_:return nums[i]else:dict_[nums[i]] = i class Solution { public:int findRepeatNumber(vector<int>& nums) {unordered_map<int, int> dict_;for(int i = 0; i < nums.size(); i++){dict_[nums[i]]++;if(dict_[nums[i]]>1){return nums[i];}}return 0;} };

04. 二維數組中的查找

class Solution:def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:h = len(matrix)if h == 0:return Falsew = len(matrix[0])i, j = h-1, 0while i >= 0 and j <= w-1:if matrix[i][j] > target:i -= 1elif matrix[i][j] < target:j += 1else:return Truereturn False

c++實現:

class Solution { public:bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {if(matrix.size() == 0 || matrix[0].size() == 0){return false;}int h = matrix.size();int w = matrix[0].size();int i = h-1, j = 0;while(i >= 0 && j <= w-1){if(matrix[i][j] > target){i--;}else if(matrix[i][j] < target){j++;}else{return true;}}return false;} };

05. 替換空格

class Solution:def replaceSpace(self, s: str) -> str:return s.replace(' ', '%20')

c++實現:

class Solution { public:string replaceSpace(string s) {string res = "";for(int i = 0; i < s.size(); i++){if(s[i]==' '){res += "%20";}else{res += s[i];}}return res;} };

優化:直接原地修改思路:雙指針法,resize出新的字符長度,當i,j相等時說明找到的都是非空格的此時跳出循環.

class Solution { public:string replaceSpace(string s) {int blank = 0;int s_ori_length = s.size();for(int i = 0; i<s.size(); i++){if(s[i] == ' '){blank++;}}s.resize(s.size() + blank * 2);int s_new_length = s.size();//相等就跳出for(int i = s_new_length - 1, j = s_ori_length - 1; j < i; i--, j-- ){if(s[j] != ' '){s[i] = s[j];}else{s[i - 2] = '%';s[i - 1] = '2';s[i] = '0'; i -= 2;}}return s;} };

06. 從尾到頭打印鏈表

方法1:利用棧

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def reversePrint(self, head: ListNode) -> List[int]:# if head:# return self.reversePrint(head.next)+[head.val]# else:# return []res = []while head:res.append(head.val)head = head.nextreturn res[::-1]

方法2:遞歸回溯

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:void help(ListNode* node, vector<int>& res){if(node == NULL){return ;}help(node->next, res);res.push_back(node->val);}vector<int> reversePrint(ListNode* head) {vector<int> res;help(head, res);return res;} };

07. 重建二叉樹

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:if len(preorder) == 0 or len(inorder) == 0:return Nonenode = TreeNode(preorder[0])middle_index = inorder.index(preorder[0])node.left = self.buildTree(preorder[1:middle_index+1], inorder[:middle_index])node.right = self.buildTree(preorder[middle_index+1:], inorder[middle_index+1:])return node

c++實現:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {if(preorder.empty() || inorder.empty()){return NULL;}int node_value = preorder[0];int middle_index = 0;for(int i = 0; i < inorder.size(); i++){if(inorder[i] == node_value){middle_index = i;break;}} TreeNode* node = new TreeNode(node_value);vector<int> leftInorder(inorder.begin(), inorder.begin() + middle_index);vector<int> rightInorder(inorder.begin() + middle_index + 1, inorder.end());vector<int> leftPreorder(preorder.begin() + 1, preorder.begin() + middle_index + 1);vector<int> rightPreorder(preorder.begin() + middle_index + 1, preorder.end());node->left = buildTree(leftPreorder, leftInorder); node->right = buildTree(rightPreorder, rightInorder); return node;} };

09. 用兩個棧實現隊列

python代碼:

class CQueue:def __init__(self):self.stack_A = []self.stack_B = []def appendTail(self, value: int) -> None:self.stack_A.append(value)def deleteHead(self) -> int:if len(self.stack_A) == 0 and len(self.stack_B) == 0:return -1if len(self.stack_B) == 0:while(len(self.stack_A)): temp = self.stack_A.pop() self.stack_B.append(temp)value = self.stack_B.pop()return value# Your CQueue object will be instantiated and called as such: # obj = CQueue() # obj.appendTail(value) # param_2 = obj.deleteHead()

c++實現:

class CQueue { public:stack<int> stack_A;stack<int> stack_B;CQueue() {}void appendTail(int value) {stack_A.push(value);}int deleteHead() {if(stack_A.empty() && stack_B.empty()){return -1;}if(stack_B.empty()){while(!stack_A.empty()){stack_B.push(stack_A.top());stack_A.pop();}}int value = stack_B.top();stack_B.pop();return value;} };/*** Your CQueue object will be instantiated and called as such:* CQueue* obj = new CQueue();* obj->appendTail(value);* int param_2 = obj->deleteHead();*/

10- II. 青蛙跳臺階問題

python實現:?

class Solution:def numWays(self, n: int) -> int:if n <= 1:return 1 a, b = 1, 1for i in range(2, n + 1):temp = aa = bb = (temp + b) % 1000000007return b

c++實現:?

class Solution { public:int numWays(int n) {if(n <= 1){return 1;}int a = 1, b = 1;for (int i = 2; i < n+1; i++){int temp = a;a = b;b = (temp + b) % 1000000007;}return b;} };

11. 旋轉數組的最小數字

python代碼:

class Solution:def minArray(self, numbers):# return min(numbers)left, right = 0, len(numbers) - 1while left < right:middle = left + (right - left) // 2if numbers[middle] < numbers[right]:#說明middle是最小值右側元素right = middleelif numbers[middle] > numbers[right]:#說明middle是最小值左側元素left = middle + 1else:right -= 1 #相當就沒法判斷 采取保守right-1即可print('==left:', left)print('===numbers[left]', numbers[left])return numbers[left] # numbers = [1, 2, 3, 4, 5] # numbers = [3, 4, 5, 1, 2] # numbers = [2, 2, 2, 0, 1] # numbers = [2, 2, 2, 0, 1] # numbers = [1, 3, 5] numbers = [1, 3, 3] # numbers = [3, 2, 1, 4, 5] sol = Solution() sol.minArray(numbers)

c++代碼:

class Solution { public:int minArray(vector<int>& numbers) {int left = 0;int right = numbers.size() - 1;while(left < right){int middle = left + (right - left) / 2;if(numbers[middle] < numbers[right]){right = middle;}else if(numbers[middle] > numbers[right]){left = middle + 1;}else{right--;}}return numbers[left];} };

12. 矩陣中的路徑

思路:與島嶼,水塘類似,只不過添加一個回溯的過程,直接修改board即可,回溯出來還原即可

class Solution:def help(self, i, j, h, w, index):if i<0 or j<0 or i>=h or j>=w or self.word[index] != self.board[i][j]:return Falseif index == len(self.word) - 1:return Trueself.board[i][j] = ''#說明board和word找到相同的 因為不能重復 修改一下boradfor direction in self.directions:new_i, new_j = direction[0] + i, direction[1] + jif self.help(new_i, new_j, h, w, index + 1):return Trueself.board[i][j] = self.word[index]#回溯出去需要還原return Falsedef exist(self, board: List[List[str]], word: str) -> bool:self.board = boardself.word = wordself.directions = [(-1, 0), (0, -1), (1, 0), (0, 1)]h = len(board)w = len(board[0])for i in range(h):for j in range(w):if self.help(i, j, h, w, 0):return Truereturn False

c++實現:

class Solution { public:int dx[4] = {-1, 0, 1, 0};int dy[4] = {0, -1, 0, 1}; public:bool help(int i, int j, int h, int w, vector<vector<char>>& board, string word, int index){if(i < 0 || i >= h || j < 0 || j >= w || board[i][j] != word[index]){return false;}if (index == word.size() - 1){return true;}board[i][j] = '#';for(int k = 0; k < 4; k++){int new_i = dx[k] + i;int new_j = dy[k] + j;if(help(new_i, new_j, h, w, board, word, index + 1)){return true;}}board[i][j] = word[index];return false;}bool exist(vector<vector<char>>& board, string word) {int h = board.size();int w = board[0].size();for(int i = 0; i<h; i++){for (int j = 0; j < w; j++){if (help(i, j, h, w, board, word, 0)){return true;}}}return false;} };

13. 機器人的運動范圍

思路1:bfs 只需要判斷右邊和下邊,因為上邊和左邊已經遍歷過了

class Solution:def digitSum(self, num):count = 0while num:count += num % 10num //= 10return countdef movingCount(self, m: int, n: int, k: int) -> int:#BFSqueue = [(0, 0)]res = set()while len(queue):x, y = queue.pop()#滿足搜索條件if (x,y) not in res and 0<=x<m and 0<=y<n and (self.digitSum(x) + self.digitSum(y)) <= k:res.add((x,y))for (x_, y_) in ((x+1, y), (x, y+1)):queue.append((x_, y_))return len(res)

思路2:遞推

view[i][j] = view[i-1][j] or view[j][j-1]

class Solution:def digitSum(self, num):count = 0while num:count += num % 10num //=10return countdef movingCount(self, m: int, n: int, k: int) -> int:#遞推view = set([(0, 0)])for i in range(m):for j in range(n):if ((i - 1, j) in view or (i, j - 1) in view) and (self.digitSum(i) + self.digitSum(j)) <= k:view.add((i, j))return len(view)

對于c++不存在列表in的關系,需要換種寫法?

class Solution { public:int digitSum(int num){int count = 0;while(num){count += num % 10;num /= 10;}return count;}int movingCount(int m, int n, int k) {vector<vector<int>> view(m, vector<int>(n, 0));view[0][0] = 1;int res = 0;for (int i = 0; i < m; i++){for(int j = 0; j < n; j++){if ((digitSum(i)+digitSum(j))>k){continue;}if(i-1 >= 0){view[i][j] |= view[i-1][j];} if(j-1 >= 0){view[i][j] |= view[i][j-1];}res += view[i][j];}}return res;} };

14- I. 剪繩子

思路:

python:

class Solution:def cuttingRope(self, n: int) -> int:if(n == 2):return 1if(n == 3):return 2res = 1while(n > 4):res *= 3n -= 3res *= nreturn res

c++:

class Solution { public:int cuttingRope(int n) {if(n == 2){return 1;}if(n == 3){return 2;}int res = 1;while(n > 4){res *= 3;n -= 3;}res *= n;return res;} };

14- II. 剪繩子 II

思路:

盡可能將繩子以長度?33?等分為多段時,乘積最大,原因為https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/solution/mian-shi-ti-14-ii-jian-sheng-zi-iitan-xin-er-fen-f/

class Solution:def cuttingRope(self, n: int) -> int:if n == 2:return 1if n == 3:return 2res = 1;while n > 4:res *= 3res %= 1000000007n -= 3res *= nres %= 1000000007return res

c++代碼:

class Solution { public:int cuttingRope(int n) {if(n == 2){return 1;}if(n == 3){return 2;}long res = 1;while(n > 4){res *= 3;res %= 1000000007 ;n -= 3;}res *= n;res %= 1000000007 ;return res;} };

15. 二進制中1的個數

思路:一種是通過右移,一種是通過n&n-1不斷減少1

python:

class Solution:def hammingWeight(self, n: int) -> int:res = 0while n:if n & 1:res += 1n >>= 1return res

c++實現:通過右移

class Solution { public:int hammingWeight(uint32_t n) {int res = 0;while(n){if(n & 1){res++;}n >>= 1;}return res;} };

c++實現: 通過n&=n-1

class Solution { public:int hammingWeight(uint32_t n) {int res = 0;while(n){res++;n &= n - 1;}return res;} };

16. 數值的整數次方

思路:遞歸,注意分正負和奇數偶數即可

class Solution:def help(self, x, n):if x == 0:return 0if n == 0:return 1if n == 1:return xtemp = self.help(x, n//2)if n % 2 == 1:return temp * temp * xelse:return temp * tempdef myPow(self, x: float, n: int) -> float:if n > 0:return self.help(x, n)else:return 1 / self.help(x, -n)

c++實現:?

class Solution { public:double help(double x, long n){if(x == 0 || x == 1){return x;}if(n == 0){return 1;}if(n == 1){return x;}double temp = help(x, n/2);if(n % 2 == 1){return temp * temp * x;}else{return temp * temp;}}double myPow(double x, long n) {if(n > 0){return help(x, n);}else{return 1./help(x, -n);}} };

17. 打印從1到最大的n位數

思路:如果沒有考慮大數的話直接for循環就行

class Solution:def printNumbers(self, n: int) -> List[int]:self.res = []for m in range(1, 10**n):self.res.append(m)return self.res

考慮大數的做法,遞歸回溯,用字符串相加的方式就避免了數字超過范圍

class Solution:def backtrace(self, count, track, length):if count == length:#終止條件 位數為lengthself.res.append(int(''.join(track)))returnfor i in range(10):store = track.copy()track.append(str(i))self.backtrace(count + 1, track, length)track = storedef printNumbers(self, n: int) -> List[int]:self.res = []for m in range(1, n + 1):for start_num in range(1, 10):track = [str(start_num)]self.backtrace(1, track, m)return self.res

c++實現:

class Solution { public:vector<int> res;void backtrace(int count, vector<char> track, int length){if(count == length){//長度相同 出去string temp_str = "";for (int i = 0; i < track.size(); i++){temp_str += track[i];}int int_str = atoi(temp_str.c_str());res.push_back(int_str);return ;}for(int i=0; i<10; i++){vector<char> store(track);track.push_back(i + '0');backtrace(count + 1, track, length);track = store;}}vector<int> printNumbers(int n) { for(int m = 1; m < n+1; m++){for (int start_num = 1; start_num<10; start_num++){vector<char> track(1, start_num + '0');backtrace(1, track, m);}}return res;} };

18. 刪除鏈表的節點

思路:雙指針

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution:def deleteNode(self, head: ListNode, val: int) -> ListNode:if head is None:return headnew_head = ListNode(0)new_head.next = headpre = new_headcur = headwhile cur.val != val:pre = curcur = cur.nextpre.next = cur.nextreturn new_head.next

c++實現:

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

c++遞歸:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode* deleteNode(ListNode* head, int val) {if(head == NULL){return NULL;}if(head->val == val){return head->next;}head->next = deleteNode(head->next, val);return head;} };

19. 正則表達式匹配

思路:

class Solution:def matches(self, i, j, s, p):if i == 0:return Falseif p[j - 1] == '.':return Truereturn s[i - 1] == p[j - 1]def isMatch(self, s: str, p: str) -> bool:m, n = len(s), len(p)dp = [[False] * (n + 1) for _ in range(m + 1)]dp[0][0] = Truefor i in range(m + 1):for j in range(1, n + 1):if p[j - 1] == '*':dp[i][j] |= dp[i][j - 2]if self.matches(i, j - 1, s, p):dp[i][j] |= dp[i - 1][j]else:if self.matches(i, j, s, p):dp[i][j] |= dp[i - 1][j - 1]return dp[-1][-1]

c++:

class Solution { public:bool help(int i, int j, string s, string p){if(i == 0){return false;}if(p[j-1] == '.'){return true;}return s[i-1] == p[j-1];}bool isMatch(string s, string p) {int m = s.size();int n = p.size();vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));dp[0][0] = 1;for(int i = 0; i < m + 1; i++){for (int j = 1; j < n + 1; j++){if(p[j-1] == '*'){dp[i][j] |= dp[i][j-2];if(help(i, j-1, s, p)){dp[i][j] |= dp[i-1][j];}}else{if (help(i, j, s, p)){dp[i][j] |= dp[i-1][j-1];}}}}return dp[m][n];} };

20. 表示數值的字符串

python:

class Solution:def isNumber(self, s: str) -> bool:try:float(s)except Exception as e:print('==error:',e)return Falsereturn True

c++實現:

class Solution { public:bool isNumber(string s) {if(s.empty()) return false;while(s.length() > 0 && s[0] == ' ') s.erase(0, 1);while(s.length() > 0 && s[s.length() - 1] == ' ') s.erase(s.length() - 1, 1);if(s.length() == 0) return false;bool isDot = false, isE = false, isNumber = false;for(int i=0; i<s.length(); ++i){if(s[i] >= '0' && s[i] <= '9') isNumber = true;else if(s[i] == 'e' || s[i] == 'E'){if(isE || !isNumber || i == s.length() - 1) return false;s[i] = 'e'; // 將'E'變成'e'isE = true;}else if(s[i] == '+' || s[i] == '-'){if((i > 0 && s[i - 1] != 'e') || (i == s.length() - 1)) return false;}else if(s[i] == '.'){if(isDot || isE || (i == s.length() - 1 && !isNumber)) return false;isDot = true;}else return false;}return true;} };

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

思路:雙指針 奇數放左邊  偶數放右邊

class Solution:def exchange(self, nums: List[int]) -> List[int]:left = 0right = len(nums) - 1while left<right:if nums[left]%2:#奇數左指針就一直右移left += 1continueif nums[right]%2 == 0:#偶數右指針就一直左移right -= 1continuenums[left], nums[right] = nums[right],nums[left]return nums

c++實現:

class Solution { public:void swap(int &a, int &b){int temp = a;a = b;b = temp;}vector<int> exchange(vector<int>& nums) {int left = 0, right = nums.size() - 1;while(left < right){if(nums[left] % 2){left++;continue;}if(nums[right] % 2 == 0){right--;continue;}swap(nums[left], nums[right]); }return nums;} };

22. 鏈表中倒數第k個節點

思路:雙指針

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:node_A = headnode_B = headwhile k:node_A = node_A.nextk -= 1while node_A:node_A = node_A.nextnode_B = node_B.nextreturn node_B

c++實現:?

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode* getKthFromEnd(ListNode* head, int k) {ListNode* node_A = head;ListNode* node_B = head;while(k>0){node_A = node_A->next;k--;}while(node_A != NULL){node_A = node_A->next;node_B = node_B->next;}return node_B;} };

24. 反轉鏈表

python代碼:

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def reverseList(self, head: ListNode) -> ListNode:pre = Nonecur = headwhile cur:temp = cur.nextcur.next = prepre = curcur = tempreturn pre

c++實現:

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

25. 合并兩個排序的鏈表

python:

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:fake_head_node = ListNode(0)cur = fake_head_nodewhile l1 and l2:if l1.val<l2.val:cur.next = l1l1 = l1.nextelse:cur.next = l2l2 = l2.next cur = cur.nextif l1:cur.next = l1else:cur.next = l2return fake_head_node.next

c++:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode* new_head = new ListNode(0);ListNode* node = new_head;while(l1!=NULL && l2 !=NULL){if(l1->val<l2->val){node->next = l1;l1 = l1->next;}else{node->next = l2;l2 = l2->next; }node = node->next;}if (l1!=NULL){node->next = l1;}if(l2!=NULL){node->next = l2;}return new_head->next;} };

26. 樹的子結構

思路:

B為空?說明B已經遍歷完成

A為空或者A,?B兩個節點的值不相等則返回false

對A和B節點進行遞歸調用??對A的左右子節點分別進行遞歸調用??可能A的子結構等于B的在深處

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def help(self, A, B):if B is None:#B為空 說明B已經遍歷完成return Trueif (A is None) or (A.val != B.val):#A為空或者A, B兩個節點的值不相等則返回falsereturn Falsereturn self.help(A.left, B.left) and self.help(A.right, B.right)def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:if A is None or B is None:return False#對A和B節點進行遞歸調用 對A的左右子節點分別進行遞歸調用 可能A的子結構在深處return self.help(A, B) or self.isSubStructure(A.left, B) or self.isSubStructure(A.right, B)

c++實現:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:bool help(TreeNode* A, TreeNode* B){if(B == NULL){return true;}if((A == NULL) || (A->val != B->val)){return false;}return help(A->left, B->left) && help(A->right, B->right);}bool isSubStructure(TreeNode* A, TreeNode* B) {if(A == NULL || B == NULL){return false;}return help(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B);} };

27. 二叉樹的鏡像

思路;其實就是翻轉二叉樹,分別對左右子樹進行交換,遞歸即可,出口是節點為none

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def mirrorTree(self, root: TreeNode) -> TreeNode: if root is None:return Noneleft = self.mirrorTree(root.left)right = self.mirrorTree(root.right)root.right = leftroot.left = rightreturn root

c++實現:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:TreeNode* mirrorTree(TreeNode* root) {if(root == NULL){return root;}TreeNode* left = mirrorTree(root->left);TreeNode* right = mirrorTree(root->right);root->left = right;root->right = left;return root;} };

28. 對稱的二叉樹

思路:遞歸判斷左右子樹是否相等,找準遞歸出口就行

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def help(self, node1, node2):if node1 == None and node2 == None:return Trueif node1 == None or node2 == None:return Falseif node1.val != node2.val:return Falsereturn self.help(node1.left, node2.right) and self.help(node1.right, node2.left)def isSymmetric(self, root: TreeNode) -> bool:return self.help(root, root)

c++實現:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:bool help(TreeNode* node1, TreeNode* node2){if(node1 == NULL && node2 == NULL){return true;}if(node1 == NULL || node2 == NULL){return false;}if(node1->val != node2->val){return false;}return help(node1->left, node2->right) && help(node1->right, node2->left);}bool isSymmetric(TreeNode* root) {return help(root, root);} };

29. 順時針打印矩陣

思路:從外層到內層循環,終止條件就是左上角索引和右上角索引重合時

class Solution:def spiralOrder(self, matrix: List[List[int]]) -> List[int]:h = len(matrix)if h == 0:return []w = len(matrix[0])left = 0right = w - 1top = 0bottom = h - 1res = []while left<=right and top<=bottom:for i in range(left, right + 1):res.append(matrix[top][i])for i in range(top + 1, bottom + 1):res.append(matrix[i][right])if left < right and top < bottom:for i in range(right-1, left-1, -1):res.append(matrix[bottom][i])for i in range(bottom-1, top, -1):res.append(matrix[i][left])left+=1right-=1top+=1bottom-=1# print('==res:',res)return res

c++實現:

class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> res;int h = matrix.size();if(h<1){return res;}int w = matrix[0].size();int left = 0, top = 0, right = w - 1, bottom = h - 1;while (left <= right && top <= bottom){for (int i = left; i < right+1; i++){res.push_back(matrix[top][i]);}for (int i = top + 1; i < bottom + 1; i++){res.push_back(matrix[i][right]);}if(left<right && top<bottom){for (int i = right - 1; i > left-1; i--){res.push_back(matrix[bottom][i]);}for (int i = bottom - 1; i > top; i--){res.push_back(matrix[i][left]);}}left++;right--;top++;bottom--;// cout<<"res:"<<res<<endl;}return res;} };

30. 包含min函數的棧

python:

class MinStack:def __init__(self):"""initialize your data structure here."""self.stack = []def push(self, x: int) -> None:self.stack.append(x)def pop(self) -> None:self.stack.pop()def top(self) -> int:return self.stack[-1]def min(self) -> int:return min(self.stack)# Your MinStack object will be instantiated and called as such: # obj = MinStack() # obj.push(x) # obj.pop() # param_3 = obj.top() # param_4 = obj.min()

c++:

class MinStack { public:stack<int> stack_A;stack<int> min_stack;/** initialize your data structure here. */MinStack() {}void push(int x) {stack_A.push(x);if(min_stack.empty() || min_stack.top()>=x){min_stack.push(x);}}void pop() {if(stack_A.top() == min_stack.top()){min_stack.pop();}stack_A.pop();}int top() {return stack_A.top();}int min() {return min_stack.top();} };/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(x);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->min();*/

31. 棧的壓入、彈出序列

思路:用棧 遇到相等的 就一直出棧

class Solution:def validateStackSequences(self, pushed: List[int], popped: List[int]) -> bool:stack = []index = 0for i in range(len(pushed)):stack.append(pushed[i])while stack and stack[-1]==popped[index]:stack.pop()index += 1return not stack

c++實現:

class Solution { public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {stack<int> stack_A;int index = 0;for(int i=0; i<pushed.size(); i++){stack_A.push(pushed[i]);while(!stack_A.empty() && stack_A.top() == popped[index]){index++;stack_A.pop();}}return stack_A.empty();} };

32 - I. 從上到下打印二叉樹

思路:bfs

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def levelOrder(self, root: TreeNode) -> List[int]:res = []if root is None:return resqueue = [root]while queue:for i in range(len(queue)):node = queue.pop(0)res.append(node.val)if node.left:queue.append(node.left)if node.right:queue.append(node.right)return res

c++實現:?

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<int> levelOrder(TreeNode* root) {vector<int> res;if(root == NULL){return res;}queue<TreeNode*> queue_A;queue_A.push(root);while(!queue_A.empty()){int count = queue_A.size();for(int i=0; i<count; i++){TreeNode* node = queue_A.front();res.push_back(node->val);queue_A.pop();if(node->left){queue_A.push(node->left);}if(node->right){queue_A.push(node->right);}}}return res;} };

32 - II. 從上到下打印二叉樹 II

思路:bfs 迭代

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def levelOrder(self, root: TreeNode) -> List[List[int]]:res = []if not root:return resquene= [root]while quene: temp = []for i in range(len(quene)):node = quene.pop(0)temp.append(node.val) if node.left:quene.append(node.left)if node.right: quene.append(node.right)res.append(temp) return res

c++實現:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;if(root == NULL){return res;}queue<TreeNode* > queue_A;queue_A.push(root);while(!queue_A.empty()){vector <int> temp;int count = queue_A.size(); for(int i=0; i<count; i++){TreeNode* node = queue_A.front();temp.push_back(node->val);queue_A.pop();if(node->left){queue_A.push(node->left);}if(node->right){queue_A.push(node->right);}}res.push_back(temp);}return res;} };

32 - III. 從上到下打印二叉樹 III

思路:利用隊列 bfs 層次遍歷

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def levelOrder(self, root: TreeNode) -> List[List[int]]:res = []if root is None:return resquene = [root]while quene:temp = []for i in range(len(quene)):node = quene.pop(0)temp.append(node.val)if node.left:quene.append(node.left)if node.right:quene.append(node.right)if len(res)%2==0:res.append(temp)else:res.append(temp[::-1])return res

c++實現:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;if(root == NULL){return res;}queue<TreeNode*> queue_A;queue_A.push(root);while(!queue_A.empty()){vector<int> temp;int count = queue_A.size();for(int i=0; i<count; i++){TreeNode* node = queue_A.front();temp.push_back(node->val);queue_A.pop();if(node->left){queue_A.push(node->left);}if(node->right){queue_A.push(node->right);}}if(res.size() % 2 == 0){res.push_back(temp);}else{reverse(temp.begin(), temp.end());res.push_back(temp);}}return res;} };

33. 二叉搜索樹的后序遍歷序列

思路:遞歸根據 后序遍歷 左右根和二叉搜索樹特點

class Solution:def help(self, left, right, postorder):if left>=right:return Truem = leftwhile postorder[m]<postorder[right]:m += 1 #找到根節點p = mwhile postorder[p]>postorder[right]:p += 1 #找到大于根節點的值的索引return p == right and self.help(left, m - 1, postorder) and self.help(m, right-1, postorder)def verifyPostorder(self, postorder: List[int]) -> bool:return self.help(0, len(postorder) - 1, postorder)

c++實現:

class Solution { public:bool help(int left, int right, vector<int>& postorder){if(left>=right){return true;}int m = left;while(postorder[m]<postorder[right]){m++;}int p = m;while(postorder[p]>postorder[right]){p++;}return (p == right) && help(left, m-1, postorder) && help(m, right-1, postorder);}bool verifyPostorder(vector<int>& postorder) {return help(0, postorder.size() - 1, postorder);} };

35. 復雜鏈表的復制

思路:其實就是深拷貝 ,這里采用dfs。

從頭結點 head 開始拷貝;
由于一個結點可能被多個指針指到,因此如果該結點已被拷貝,則不需要重復拷貝;
如果還沒拷貝該結點,則創建一個新的結點進行拷貝,并將拷貝過的結點保存在哈希表中;
使用遞歸拷貝所有的 next 結點,再遞歸拷貝所有的 random 結點。

python:

""" # Definition for a Node. class Node:def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):self.val = int(x)self.next = nextself.random = random """ #其實就是考驗深拷貝 class Solution:def help(self, node, view):#dfsif node is None:return nodeif node in view:#已經出現過return view[node]new_node = Node(node.val, None, None)view[node] = new_nodenew_node.next = self.help(node.next, view)new_node.random = self.help(node.random, view)return new_nodedef copyRandomList(self, head: 'Node') -> 'Node':view = {}return self.help(head, view)

c++:

/* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val = _val;next = NULL;random = NULL;} }; */ class Solution { public:map<Node*, Node*> view;Node* help(Node* node){if(node == nullptr){return nullptr;}if(view.count(node)){//已經出現過了的節點 返回就行return view[node];}Node* new_node = new Node(node->val);view[node] = new_node;//記錄已經創建的節點new_node->next = help(node->next); new_node->random = help(node->random); return new_node;}Node* copyRandomList(Node* head) {return help(head);} };

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

思路:中序遍歷 設定一個前驅節點pre用來形成雙向鏈接

""" # Definition for a Node. class Node:def __init__(self, val, left=None, right=None):self.val = valself.left = leftself.right = right """ class Solution:def help(self, node):#中序遍歷if node is not None:self.help(node.left)#遞歸左子樹if self.pre is not None:self.pre.right, node.left = node, self.pre #pre和node節點形成雙向節點形式else:self.head = node #第一次出現 記錄head節點self.pre = node #保存pre節點 并一直不停更新self.help(node.right)#遞歸右子樹def treeToDoublyList(self, root: 'Node') -> 'Node':if root is None:return self.pre = Noneself.head = Noneself.help(root)self.head.left, self.pre.right = self.pre, self.headreturn self.head

c++實現:

/* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node() {}Node(int _val) {val = _val;left = NULL;right = NULL;}Node(int _val, Node* _left, Node* _right) {val = _val;left = _left;right = _right;} }; */ class Solution { public:Node* pre;Node* head;void help(Node* node) {if(node==NULL){return;}help(node->left);if(pre != NULL) {pre->right = node;node->left = pre;}else{head = node;}pre = node;help(node->right);}Node* treeToDoublyList(Node* root) {if(root == NULL){return NULL;}help(root);head->left = pre;pre->right = head;return head;} };

38. 字符串的排列

思路:回溯? 注意有重復字符串 要剪枝? 這里用 view記錄 出現過的

python

class Solution:def backtrace(self, s, view, track):if len(track) == len(s):self.res.append(track)returnfor i in range(len(s)):if view[i]:continueif i>0 and s[i]==s[i-1] and view[i-1]==0:continueview[i] = 1store = tracktrack += s[i]self.backtrace(s, view, track)track = storeview[i] = 0def permutation(self, s: str) -> List[str]:self.res = []s = sorted(s)self.backtrace(s, [0]*len(s), '')return self.res

c++實現:

class Solution { public:vector<string> res;void backtrace(string s, vector<int> view, string track){if(s.size() == track.size()){res.push_back(track);return;}for(int i=0; i<s.size(); i++){if(view[i]){continue;}if(i>0 && s[i] == s[i-1] && view[i-1] == 0){continue;}view[i] = 1;string store = track;track += s[i];backtrace(s, view, track);track = store;view[i] = 0;}return;}vector<string> permutation(string s) {vector<int> view(s.size(), 0);sort(s.begin(), s.end());backtrace(s, view, "");return res;} };

39. 數組中出現次數超過一半的數字

python代碼:

class Solution:def majorityElement(self, nums: List[int]) -> int:return sorted(nums)[len(nums)//2]

c++代碼:

class Solution { public:int majorityElement(vector<int>& nums) {int length = nums.size();sort(nums.begin(), nums.end());return nums[length/2];} };

投票法(最優解):

class Solution:def majorityElement(self, nums: List[int]) -> int:votes = 0for num in nums:if votes == 0:x = numif num == x:votes += 1else:votes -= 1# print('==x:', x)# print('==votes:', votes)return x

40. 最小的k個數

python:

class Solution:def quicksort(self, arr):if len(arr) <= 1:return arrprivit = arr[len(arr)//2]middle = [x for x in arr if x == privit]left = [x for x in arr if x < privit]right = [x for x in arr if x > privit]return self.quicksort(left) + middle + self.quicksort(right)def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:return self.quicksort(arr)[:k]

c++實現快排:

class Solution { public:vector<int> quickSort(vector<int>& arr){if(arr.size() <= 1){return arr;}int length = arr.size();int privit = arr[length/2];vector<int> left;vector<int> right;vector<int> middle;for(int i=0; i<length; i++){if(privit == arr[i]){middle.push_back(arr[i]);}else if(privit > arr[i]){left.push_back(arr[i]);}else{right.push_back(arr[i]);}}vector<int> left_sort = quickSort(left);vector<int> middle_sort = middle;vector<int> right_sort = quickSort(right);left_sort.insert(left_sort.end(), middle_sort.begin(), middle_sort.end());left_sort.insert(left_sort.end(), right_sort.begin(), right_sort.end());return left_sort;}vector<int> getLeastNumbers(vector<int>& arr, int k) {vector<int> sort_arr = quickSort(arr);vector<int> res;for(int i=0; i<k; i++){res.push_back(sort_arr[i]);}return res;} };

c++調用現成的排序:

class Solution { public:vector<int> getLeastNumbers(vector<int>& arr, int k) {sort(arr.begin(), arr.end());vector<int> res;for(int i=0; i<k; i++){res.push_back(arr[i]);}return res;} };

42. 連續子數組的最大和

思路:動態規劃

class Solution:def maxSubArray(self, nums: List[int]) -> int:dp = [0]*len(nums)dp[0] = nums[0]for i in range(1, len(nums)):dp[i] = max(nums[i], dp[i-1]+nums[i])# print(dp)return max(dp)

思路:修改數組:

class Solution:def maxSubArray(self, nums: List[int]) -> int:if len(nums)==0:return []res = nums[0]for i in range(1,len(nums)):nums[i] = max(nums[i], nums[i] + nums[i-1])res = max(nums[i], res)return res

思路:修改數組2?

class Solution:def maxSubArray(self, nums: List[int]) -> int:for i in range(1,len(nums)):nums[i]+=max(nums[i-1],0)return max(nums)

思路:借助一個變量

o(1),0(n)

class Solution:def maxSubArray(self, nums: List[int]) -> int:if len(nums)==0:return []value = nums[0]res = nums[0]for i in range(1,len(nums)):value = max(nums[i], value + nums[i])res = max(value, res)return res

c++實現

class Solution { public:int maxSubArray(vector<int>& nums) {int length = nums.size();vector<int> dp(length, 0);dp[0] = nums[0];for (int i=1; i<length; i++){dp[i] = max(nums[i], nums[i] + dp[i-1]);}int maxValue = *max_element(dp.begin(), dp.end());return maxValue;} };

44. 數字序列中某一位的數字

思路:

python代碼:

class Solution:def findNthDigit(self, n: int) -> int:base = 9digit_nums = 1while n - base * digit_nums > 0:n -= base * digit_numsbase *= 10digit_nums += 1# print('==n:', n)# 計算target的值idx = n % digit_nums # 注意由于上面的計算,n現在表示digits位數的第n個數字# print('==idx:', idx)if idx == 0:idx = digit_numsnumber = 1for i in range(1, digit_nums):number *= 10# print('==digit_nums:', digit_nums)if idx == digit_nums:number += n // digit_nums - 1else:number += n // digit_nums# print('==number:', number)return int(str(number)[idx-1])

c++代碼:

class Solution { public:int findNthDigit(int n) {long base = 9;int digit_nums = 1;while(n - base * digit_nums > 0){n -= base*digit_nums;base *=10;digit_nums++;}int index = n % digit_nums;if(index == 0){index = digit_nums;}long number = 1;for(int i=1;i<digit_nums;i++){number *= 10;}if(index == digit_nums){number += n/digit_nums -1;}else{number += n/digit_nums;}return int(to_string(number)[index - 1])-'0';} };

45. 把數組排成最小的數

思路:其實就是排序 這里采用快排? 將合并后偏小的字母移動到左邊? 等于的移動到中間 大于的移動到右邊

class Solution:def minNumber(self, nums: List[int]) -> str:def fast_sort(arr):if len(arr) <= 1:return arrprivot = arr[len(arr)//2]left = [x for x in arr if x + privot < privot + x]middle = [x for x in arr if x == privot or x + privot == privot + x]right = [x for x in arr if x + privot > privot + x]# print('===left===:', left)# print('===right===:', right)# print('====middle:', middle)return fast_sort(left) + middle + fast_sort(right)strs = [str(num) for num in nums]# fast_sort(0, len(strs) - 1)new_strs = fast_sort(strs)# print('==new_strs:', new_strs)return ''.join(new_strs)

c++實現:

class Solution { public:vector<string> quickSort(vector<string> strs) {if(strs.size() <= 1){return strs;}vector<string> left;vector<string> middle;vector<string> right;string privit = strs[int(strs.size()/2)];for(int i=0; i<strs.size(); i++){if (strs[i] + privit < privit + strs[i]){left.push_back(strs[i]);} }for(int i=0; i<strs.size(); i++){if ((strs[i] == privit) || (strs[i] + privit == privit + strs[i])){middle.push_back(strs[i]);} }for(int i = 0; i<strs.size(); i++){if (strs[i] + privit > privit + strs[i]){right.push_back(strs[i]);} }vector<string> left_sort = quickSort(left);vector<string> middle_sort = middle;vector<string> right_sort = quickSort(right);left_sort.insert(left_sort.end(), middle_sort.begin(), middle_sort.end());left_sort.insert(left_sort.end(), right_sort.begin(), right_sort.end());return left_sort;}string minNumber(vector<int>& nums) {vector<string> strs;for(int i=0; i<nums.size(); i++){strs.push_back(to_string(nums[i]));}vector<string> new_strs= quickSort(strs);string res;for(int i=0;i<new_strs.size();i++){res += new_strs[i];}return res;} };

46. 把數字翻譯成字符串

思路:動態規劃,dp[i] = dp[i-1]+dp[i-2] 滿足1~25之間

class Solution:def translateNum(self, num):if 0<=num<=9:return 1nums = [i for i in str(num)]print(nums)n = len(nums)dp = [0]*ndp[0] = 1if nums[0] == '1' or (nums[0] == '2' and nums[1] <= '5'):dp[1] = 2else:dp[1] = 1for i in range(2, n):if nums[i-1] == '1' or (nums[i-1] == '2' and nums[i] <= '5'):dp[i] = dp[i-1]+dp[i-2]else:dp[i] = dp[i-1]print(dp)return dp[-1] num = 12258 sol = Solution() sol.translateNum(num)

壓縮一下空間,復雜度變為o(n)?

class Solution:def translateNum(self, num):if 0<=num<=9:return 1nums = [i for i in str(num)]print(nums)n = len(nums)dp_zero = 1if nums[0]=='1' or (nums[0]=='2' and nums[1] <= '5'):dp_one = 2else:dp_one = 1for i in range(2, n):temp = dp_zerodp_zero = dp_oneif nums[i-1] == '1' or (nums[i-1] == '2' and nums[i] <= '5'):dp_one = temp+dp_zeroprint(dp_one)return dp_one num = 12258 sol = Solution() sol.translateNum(num)

c++實現:

class Solution { public:int translateNum(int num) {if(0<=num && num<=9){return 1;}string num_string = to_string(num); int length = num_string.size();vector<int> dp(length, 0);dp[0] = 1;if(num_string[0] == '1' || (num_string[0] == '2' && num_string[1] <= '5')){dp[1] = 2;}else{dp[1] = 1;}for (int i=2; i<length; i++){if(num_string[i-1] == '1' || (num_string[i-1] == '2' && num_string[i] <= '5')){dp[i] = dp[i-1] + dp[i-2];// cout<<"==hahahahahaha=="<<endl;}else{dp[i] = dp[i-1];}}return dp[length-1];} };

47. 禮物的最大價值

思路:動態規劃:

python代碼:

class Solution:def maxValue(self, grid: List[List[int]]) -> int:h = len(grid)w = len(grid[0])dp = [[0 for _ in range(w)] for _ in range(h)]# print(np.array(dp))dp[0][0] = grid[0][0]for i in range(1, h):dp[i][0] = dp[i-1][0]+grid[i][0]# print(np.array(dp))for i in range(1, w):dp[0][i] = dp[0][i-1]+grid[0][i]# print(np.array(dp))for i in range(1,h):for j in range(1,w):dp[i][j] = max(dp[i-1][j],dp[i][j-1])+grid[i][j]# print(np.array(dp))return dp[-1][-1]

c++實現:

class Solution { public:int maxValue(vector<vector<int>>& grid) {int h = grid.size();int w = grid[0].size();vector<vector<int>> dp(h, vector<int>(w));dp[0][0] = grid[0][0];for (int i=1;i<h;i++){dp[i][0]=dp[i-1][0]+grid[i][0];}for (int i=1;i<w;i++){dp[0][i]=dp[0][i-1]+grid[0][i];}for(int i=1;i<h;i++){for(int j=1;j<w;j++){dp[i][j]= max(dp[i-1][j],dp[i][j-1])+grid[i][j];} }return dp[h-1][w-1];} };

48. 最長不含重復字符的子字符串

思路:滑動窗口

python代碼:

class Solution:def lengthOfLongestSubstring(self, s: str) -> int:left,right =0,0dict_ = {}res = 0while right<len(s):dict_[s[right]] = dict_.get(s[right], 0) + 1while dict_[s[right]]>1:dict_[s[left]]-=1left+=1res = max(res, right - left + 1)right+=1# print(res)return res

c++實現:

class Solution { public:int lengthOfLongestSubstring(string s) {int left=0;int right = 0;int res=0;map<int,int>dict_;while(right<s.size()){dict_[s[right]]++;while(dict_[s[right]]>1){dict_[s[left]]--; left++;}res = max(res, right-left+1);right+=1;}return res;} };

49-1:丑數

思路:判斷是否能整除2,3,5依次整除下去,將不能整除和1進行判斷就知道是否是丑數了

class Solution:def isUgly(self, n: int) -> bool:if n <= 0: return Falsewhile((n % 2) == 0):n /= 2while((n % 3) == 0):n /= 3while((n % 5) == 0):n /= 5return n == 1

c++循環實現:

class Solution { public:bool isUgly(int n) {if(n <= 0){return false;}while((n % 2) == 0){n /= 2;}while((n % 3) == 0){n /= 3;}while((n % 5) == 0){n /= 5;}return n == 1;} };

c++遞歸實現:

//遞歸寫法 class Solution { public:bool isUgly(int n) {if(n <= 0){return false;}while((n % 2) == 0){return isUgly(n / 2);}while((n % 3) == 0){return isUgly(n / 3);}while((n % 5) == 0){return isUgly(n / 5);}return n == 1;} };

49-2.丑數

思路:題目要求的這個數字一定是由單個或者多個2,3,5的乘積,如果從小到大去枚舉在判斷是否由2,3,5乘積組成,工作量會很大,所以考慮用2,3,5從下往上遞推,需要開辟空間為n的數組,采用動態規劃,2,3,5分別有三個索引,如果滿足要求的數字等于2,3,5的倍數乘積,那么就直接將索引加1.

python代碼:

class Solution:def nthUglyNumber(self, n):dp, index_two, index_three, index_five = [1] * n, 0, 0, 0for i in range(1, n):two = dp[index_two] * 2three = dp[index_three] * 3five = dp[index_five] * 5dp[i] = min(two, three, five)if two==dp[i]:index_two+=1if three==dp[i]:index_three+=1if five==dp[i]:index_five+=1print('==dp:', dp)return dp[-1]n = 11 sol = Solution() sol.nthUglyNumber(n)

c++代碼:

class Solution { public:int nthUglyNumber(int n) {vector<int> dp(n,1);int index_two=0;int index_three=0;int index_five=0;for (int i=1;i<n;i++){int two = dp[index_two]*2;int three = dp[index_three]*3;int five = dp[index_five]*5;dp[i] = min(min(two, three), five);if (dp[i]==two){index_two++;}if (dp[i]==three){index_three++;}if (dp[i]==five){index_five++;}}return dp[n-1];} };

50.第一個只出現一次的字符

思路:

最直接的想法是hash,但是hash具有無序性,就改為字符數組計數

python代碼:

class Solution:def firstUniqChar(self, s: str) -> str:letter_list = [0]*26for i in s:letter_list[ord(i) - ord('a')]+=1# print(letter_list)for i in s:if letter_list[ord(i)-ord('a')]==1:return ireturn " "

c++代碼:

class Solution { public:char firstUniqChar(string s) {vector<int> letter_list(26, 0);for(int i=0;i<s.size();i++){letter_list[s[i]-'a']++;}vector<int>::iterator iter= letter_list.begin();for(int i=0;i<s.size();i++){if (iter[s[i]-'a']==1){return s[i];}} return ' ';} };

51.數組中的逆序對

思路1:兩層for循環 超時

思路2:歸并排序 在合并的時候順便統計逆序對

class Solution:def mergeSort(self, nums, start, end):if start >= end:returnmid = start + (end - start) // 2self.mergeSort(nums, start, mid)self.mergeSort(nums, mid + 1, end)self.merge(nums, start, mid, end)def merge(self, nums, start, mid, end):i, j, temp = start, mid + 1, []while i <= mid and j <= end:if nums[i] <= nums[j]:temp.append(nums[i])i += 1else:print('==i:', i)print('=== start:', start)print('=== mid:', mid)print('=== end:', end)self.cnt += mid - i + 1temp.append(nums[j])j += 1while i <= mid:temp.append(nums[i])i += 1while j <= end:temp.append(nums[j])j += 1for i in range(len(temp)):nums[start + i] = temp[i]print('==nums:', nums)def reversePairs(self, nums):self.cnt = 0self.mergeSort(nums, 0, len(nums) - 1)print('==after nums:', nums)return self.cntnums = [7,5,6,4] sol = Solution() sol.reversePairs(nums) print(sol.cnt)

52.兩個鏈表的第一個公共節點

思路:雙指針 兩個指針輪流走一遍各自的路程,這樣相遇就是公共節點,對于沒有公共節點的情況,所以需要判斷自身節點不是none,而不是.next是none,在去交換指針,否則會陷入無窮循環,而此時輸出就是none。

python

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:first_head = headAsecond_head = headBwhile first_head !=second_head:if first_head is not None:first_head = first_head.next else:first_head = headBif second_head is not None:second_head = second_head.nextelse:second_head = headA# print(first_head)return first_head

c++

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode *first_node;first_node = headA;ListNode *second_node;second_node= headB;while(first_node != second_node){if(first_node !=NULL){first_node = first_node->next;}else{first_node = headB;}if(second_node !=NULL){second_node = second_node->next;}else{second_node = headA;}}return first_node;} };

53-1. 在排序數組中查找數字 I

思路1:hash

class Solution:def search(self, nums, target):dict_={}for i in range(len(nums)):dict_[nums[i]] = dict_.get(nums[i],0)+1print(dict_)return dict_[target] if target in dict_ else 0nums = [5,7,7,8,8,10] target = 8 sol = Solution() sol.search(nums, target)

思路2:python 雙指針

class Solution:def search(self, nums, target):left = 0right = len(nums)-1while left<right:middle = left+(right-left)//2if nums[middle] >=target:right=middleelse:left=middle+1res=0for i in range(left,len(nums)):if nums[i]==target:res+=1return resnums = [5,7,7,8,8,10] target = 8 sol = Solution() sol.search(nums, target)

思路2:C++?雙指針

#include <map> #include <vector> #include <iostream> #include <string> #include <algorithm> using namespace std;class Solution { public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size()-1;int res=0;while (left<right){int middle = left+(right-left)/2;if (nums[middle]>=target){ right=middle;}else{left=middle+1;}}while (left<nums.size()&&nums[left]==target){ left++;res++;}return res;return 0;} };int main() {Solution *p = new Solution();vector<int> nums;nums = {5,7,7,8,8,10};int target = 8;int res = p->search(nums, target);cout<<"==res:"<<res<<endl;delete p;p=NULL;return 0; }

53-2.0~n-1中缺失的數字

思路:雙指針,判斷中值是否等于索引,等于的話說明缺失值在middle右邊,left就變為middle+1,否則在middle左邊,right變為middle-1,最后left的值就是缺失值.?

python代碼

class Solution:def missingNumber(self, nums: List[int]) -> int:left = 0right = len(nums)-1while left<=right:middle =left+(right-left)//2if nums[middle]==middle:#中值等于索引 則說明缺失值在middle右邊left = middle+1else:#中值不等于索引 則說明缺失值在middle左邊right = middle-1return left

c++代碼:

#include <vector> #include <iostream> #include <string> #include <algorithm> using namespace std;class Solution { public:int missingNumber(vector<int>& nums) {int left = 0;int right = nums.size()-1;while (left<=right){int middle = left+(right-left)/2;if (nums[middle]==middle){left = middle+1;}else{right = middle-1;}}return left;} }; int main() {Solution *p = new Solution();vector<int> nums;nums = {0,1,2,3,4,5,6,7,9};int res = p->missingNumber(nums);cout<<"==res:"<<res<<endl;delete p;p=NULL;return 0; }

54.二叉搜索樹的第k大節點

?思路:利用二叉搜索樹特點,左子樹值<根節點值<右子樹值,故采用中序遍歷

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def kthLargest(self, root: TreeNode, k: int) -> int:res = []def helper(node):if node is not None:helper(node.left)res.append(node.val)helper(node.right)helper(root)print('res:', res)return res[::-1][k-1]

c++代碼:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<int> res;void help(TreeNode* node){if (node !=NULL){help(node->left);res.push_back(node->val);help(node->right);}}int kthLargest(TreeNode* root, int k) {help(root);return res[res.size()-k];} };

?55-1.二叉樹的深度

遞歸:python代碼

# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution(object):def maxDepth(self, root):""":type root: TreeNode:rtype: int"""if not root:return 0return max(self.maxDepth(root.left),self.maxDepth(root.right))+1

c++代碼:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:int maxDepth(TreeNode* root) {if(root==NULL){return 0;}return max(maxDepth(root->left),maxDepth(root->right))+1;} };

?55-2.平衡二叉樹

思路:前序遍歷 求當前節點root的深度差,再去遍歷求左右子節點的深度差

python代碼

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def help(self,node):#計算深度if node is None:return 0return max(self.help(node.left),self.help(node.right))+1def isBalanced(self, root: TreeNode) -> bool:if root is None:return Truereturn abs(self.help(root.left) - self.help(root.right))<=1 and \self.isBalanced(root.left) and self.isBalanced(root.right)

c++代碼:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:int help(TreeNode* node) {if(node == NULL){return 0;}return max(help(node->left),help(node->right))+1;}bool isBalanced(TreeNode* root) {if(root == NULL){return true;} return abs(help(root->left)-help(root->right))<=1 && isBalanced(root->left)&& isBalanced(root->right);} };

56-1.數組中數字出現的次數

思路:hash

python代碼:

class Solution:def singleNumbers(self, nums):dict_ = {}for i in range(len(nums)):dict_[nums[i]] = dict_.get(nums[i],0)+1print(dict_)res = []for key,value in dict_.items():if value==1:res.append(key)print(res)return resnums = [4,1,4,6] sol = Solution() sol.singleNumbers(nums)

c++代碼:

#include <map> #include <vector> #include <iostream>using namespace std;class Solution { public:vector<int> singleNumbers(vector<int>& nums) {map<int,int>dict_;for (int k=0;k<nums.size();k++){dict_[nums[k]]++;}vector<int> res;map<int,int>::iterator iter=dict_.begin();for (;iter!=dict_.end();iter++){if(iter->second==1){res.push_back(iter->first);}}return res;} };int main() {vector<int> nums;nums = {4,1,4,6};Solution *sol = new Solution();// vector<int> res;auto res = sol->singleNumbers(nums);for (int k=0;k<res.size();k++){cout<<"res[k]"<<res[k]<<endl;}delete sol;sol = NULL;return 0; }

?56-2.數組中數字出現的次數 II

思路:hash

python代碼:

class Solution:def singleNumber(self, nums: List[int]) -> int:dict_={}for num in nums:dict_[num]=dict_.get(num,0)+1# print(dict_)for key,value in dict_.items():if value==1:return key

c++代碼:

#include <iostream> #include <vector> #include <list> #include <map>using namespace std;class Solution { public:int singleNumber(vector<int>& nums) {// cout<<"hhah"<<endl;map<int,int> dict_;for (int k=0;k<nums.size();k++){dict_[nums[k]]++;}map <int,int>::iterator itor = dict_.begin();for(;itor!=dict_.end();itor++){// cout<<itor->first<<" "<<itor->second<<endl;if(itor->second==1){return itor->first;}}return -1;} };int main() { vector<int> nums;// int nums[] = {3,4,3,3};nums.push_back(3);nums.push_back(4);nums.push_back(3);nums.push_back(3);Solution sol;int res = sol.singleNumber(nums);cout<<res<<endl;return 0; }

57-1.和為s的兩個數字

思路1:兩層for循環 O(n2)

class Solution:def twoSum(self, nums, target):res = []for i in range(len(nums)):for j in range(i+1, len(nums)):if nums[i]+nums[j]==target:res.extend([i, j])breakprint('==res:', res)return res nums = [2, 7, 6, 15] target = 9 sol = Solution() sol.twoSum(nums, target)

思路2:hash python代碼

class Solution:def twoSum(self, nums, target):res_dict = {}for i in range(len(nums)):value = target - nums[i]if value in res_dict:return [res_dict[value], i]res_dict[nums[i]] = iprint('==res_dict:', res_dict)return [-1, -1]nums = [2, 7, 6, 15] target = 9 sol = Solution() res = sol.twoSum(nums, target) print('res:', res)

思路2:c++代碼:

#include <string> #include <iostream> #include <vector> #include <list> #include <map> #include <typeinfo>using namespace std;class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {map<int, int> dict_;for(int k=0;k<nums.size();k++){dict_[nums[k]] = k;}map <int,int>::iterator iter = dict_.begin();for (;iter!=dict_.end();iter++){if(dict_[target - iter->first]){// cout<<iter->second<<dict_[target - iter->first]<<endl;return {iter->first,target - iter->first};}}return {-1,-1};} };int main() { vector<int> nums;nums = {2,7,11,15};int target = 9;// nums = [2,7,11,15]Solution sol;vector<int> res;res = sol.twoSum(nums,target);for(int k=0;k<res.size();k++){cout<<"==res[k]:"<<res[k]<<endl;} return 0; }

57-2.和為s的連續正數序列

思路:雙指針,和偏大,左指針右移,和偏小,右指針右移,剛好的話就記錄相應的值,左指針在右移停止循環即可。

python代碼:

class Solution:def findContinuousSequence(self, target):list_ = [i for i in range(1, target)]print('==list_:', list_)left,right = 0, 0Sum = 0res = []while right<len(list_):if Sum<target:Sum+=list_[right]right+=1elif Sum == target:res.append(list_[left:right])left += 1Sum -= list_[left-1]else:Sum-=list_[left]left+=1print('==res:', res)return restarget = 9 sol = Solution() sol.findContinuousSequence(target)

c++代碼:

#include <map> #include <vector> #include <iostream> #include <queue> #include <algorithm> using namespace std;class Solution { public:vector<vector<int>> findContinuousSequence(int target) {vector<int> nums;for (int i=1;i<target;i++){nums.push_back(i);}int left=0;int right=0;int temp=0;vector<vector<int>> res;while (right<nums.size()){if(temp<target){ temp+=nums[right];right++; }else if(temp>target){temp-=nums[left];left++;}else{ vector<int> res_temp;for (int i=left;i<right;i++){res_temp.push_back(nums[i]);} res.push_back(res_temp);temp-=nums[left];left++;}}return res;} };int main() { Solution *p = new Solution();int target = 9;vector<vector<int>> res;res = p->findContinuousSequence(target);cout<<res.size()<<endl;for(int k=0;k<res.size();k++){ for (int j=0;j<res[k].size();j++){cout<<"res "<<k<<j<<" "<<res[k][j]<<endl;}}delete p;p = NULL;return 0; }

58-1.翻轉單詞順序

python代碼:

class Solution:def reverseWords(self, s: str) -> str:s = s.strip()# print(s)s = s.split()# print(s)return ' '.join(s[::-1])

c++代碼:

#include <map> #include <vector> #include <iostream> #include <queue> #include <string> #include <algorithm> using namespace std;class Solution { public:string reverseWords(string s) {string res="";int length = s.size();// cout<<"==length:"<<length<<endl;int right = length-1;while (right>=0){if (s[right]==' ')//去除開頭空格{right--;continue;}while (right>=0 && s[right]!= ' ')//減少至空格處{right--;}int index = right;right++;//加回去到非空格處if (res.empty()){while (s[right]!= ' ' && right<length){ res+=s[right];//第一個串 就開始添加right++;}}else{res+=" ";while (s[right]!= ' ' && right<length){ res+=s[right];//第二個串以后 就先添加空格 在繼續添加right++;}}cout<<"res:"<<res<<endl;right = index; }return res;} };int main() { Solution *p = new Solution();// string s = "the sky is blue";string s = " hello world! ";string res;res = p->reverseWords(s);cout<<"res:"<<res<<endl;delete p;p = NULL;return 0; }

?58-2.左旋轉字符串

python代碼:

class Solution:def reverseLeftWords(self, s: str, n: int) -> str:return s[n:]+s[:n]

c++代碼:

class Solution { public:string reverseLeftWords(string s, int n) {string res;for(int i=n;i<s.size();i++){res+=s[i];}for(int i=0;i<n;i++){res+=s[i];}return res;} };

59-1.滑動窗口最大值

思路1.超時O(n*k)

class Solution:def maxSlidingWindow(self, nums, k):#時間復雜度O(Nk)超時了res = []for i in range(len(nums)-k+1):res.append(max(nums[i:i+k]))return res

思路1:c++可以:

class Solution { public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> res;if (nums.size()==0){return res;}for (int i=0;i<nums.size()-k+1;i++){ int temp = INT_MIN;for (int j=i;j<i+k;j++){temp = max(temp, nums[j]);}res.push_back(temp);}return res;} };

思路2:

動態規劃:時間復雜度O(N)
1.將數組分成k+1個,剩下的一個可能不足;?
2.left數組存儲每個拆分的從左到右的值,對于left來說每個塊最右邊元素最大;
3.right數組存儲每個拆分的從右到左的值,對于right來說每個塊最左邊元素最大;
4.最后在利用left和right求最大值,max(left[i],right(j)) i每個塊最右邊元素索引,j每個塊最左邊元素索引

class Solution:def maxSlidingWindow(self, nums, k):n = len(nums)if n * k == 0:return []if k == 1:return numsleft = [0] * nleft[0] = nums[0]right = [0] * nright[n - 1] = nums[n - 1]for i in range(1, n):#從左往右if i%k==0:#分塊的第一個元素left[i] = nums[i]else:left[i] = max(left[i-1],nums[i])# 從右往左j = n-i-1# 分塊的最右邊元素if (j+1) % k == 0:right[j] = nums[j]else:right[j] = max(right[j + 1], nums[j])print('===left:', left)print('===right:', right)#最后在利用left和right求最大值output = []for i in range(n - k + 1):output.append(max(left[i + k - 1], right[i]))return outputnums = [1,3,-1,-3,5,3,6,7] k = 3 sol = Solution() res = sol.maxSlidingWindow(nums, k) print('res:', res)

思路3:雙端隊列:用一個隊列一直存儲更新最大值

# 雙端隊列:用一個隊列一直存儲更新最大值 class Solution:def maxSlidingWindow(self, nums, k):length = len(nums)if length == 0:return []res = []quene = []for j in range(length):i = j-k+1if i > 0 and quene[0] == nums[i-1]:#當要左移掉的元素等于quene頭部元素,那么quene就移除頭部元素quene.pop(0)while quene and quene[-1] < nums[j]:#保持quene里面都是單調遞減的,且頭部元素最大quene.pop()quene.append(nums[j])print('==quene:', quene)if i >= 0:res.append(quene[0])return resnums = [1, 3, -1, -3, 5, 3, 6, 7] k = 3 sol = Solution() res = sol.maxSlidingWindow(nums, k) print(res)

思路3:c++代碼

class Solution { public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> res;vector<int> quene;for (int j=0;j<nums.size();j++){ int i = j-k+1;if(i>0 && nums[i-1]==quene.front())//頂部元素正好等于了要左移元素 那么將隊列頂部元素移動開{quene.erase(quene.begin());}while (!quene.empty() && quene.back()<nums[j])//保持單調遞減{quene.erase(quene.end()-1);} quene.push_back(nums[j]);// cout<<"quene.front():"<<quene.front()<<endl;// cout<<"quene.back():"<<quene.back()<<endl;if(i>=0){res.push_back(quene.front());}}return res;} };

59-2.隊列的最大值

思路1: 其中去Max操作是o(n)

class MaxQueue:def __init__(self):self.quene = []def max_value(self):if len(self.quene):return max(self.quene)else:return -1def push_back(self, value):self.quene.append(value)def pop_front(self):if len(self.quene):return self.quene.pop(0)else:return -1# Your MaxQueue object will be instantiated and called as such: obj = MaxQueue() param_1 = obj.max_value() value = 10 obj.push_back(value) param_3 = obj.pop_front() print(param_3)

思路2:采用雙端隊列,優化取max操作

class MaxQueue:def __init__(self):self.queue = []self.deque = []def max_value(self):return self.deque[0] if self.deque else -1def push_back(self, value):self.queue.append(value)while self.deque and self.deque[-1] < value:self.deque.pop()self.deque.append(value)def pop_front(self):if len(self.queue) == 0:return -1val = self.queue.pop(0)if val == self.deque[0]:self.deque.pop(0)return valobj = MaxQueue() param_1 = obj.max_value()for value in [10, 5, 8]:obj.push_back(value)print('==obj.queue:', obj.queue) print('==obj.deque:', obj.deque) param_3 = obj.pop_front() print('==param_3:', param_3) print('==obj.queue:', obj.queue) print('==obj.deque:', obj.deque)

60.n個骰子的點數

思路:一個骰子的概率 first_prob = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6]

兩個骰子的概率 temp_prob = [5*2+1]

temp_prob[i+x] = first_prob[i]*second_prob[x]

第n個骰子的概率 temp_prob = [5*n+1]*0

#一個骰子的概率 first_prob = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6] #兩個骰子的概率 temp_prob = [5*2+1] # temp_prob[i+x] = first_prob[i]*second_prob[x]#第n個骰子的概率 temp_prob = [5*n+1]*0 class Solution:def dicesProbability(self, n):first_prob, second_prob = [1/6]*6, [1/6]*6for index in range(2, n+1):temp_prob = [0]*(5*index+1)for i in range(len(first_prob)): #第一個骰子的概率for j in range(len(second_prob)): #第二個骰子的概率temp_prob[i+j] += first_prob[i]*second_prob[j]print('==temp_prob:', temp_prob)#第一個骰子的概率換成前幾次計算的概率也就是n-1first_prob = temp_probprint('==first_prob:', first_prob)return first_prob n = 2 sol = Solution() sol.dicesProbability(n)

c++代碼:

class Solution { public:vector<double> dicesProbability(int n) {vector<double> probs;vector<double> first_prob;for (int i=0;i<6;i++){probs.push_back(1./6);first_prob.push_back(1./6);}for (int i=2;i<n+1;i++){ vector<double> temp_prob;for (int temp_i=0;temp_i<5*i+1;temp_i++){temp_prob.push_back(0);}for (int j=0;j<probs.size();j++){for (int k=0;k<first_prob.size();k++){temp_prob[j+k]+=probs[j]*first_prob[k];} }probs = temp_prob;}return probs;} };

61.撲克牌中的順子

思路:1.除去0發現重復的就返回false
2. 如果沒有重復,則再判斷除去的0的最大最小值差值與5的關系

python代碼:

#思路:1.除去0發現重復的就返回false #2. 如果沒有重復,則再判斷除去的0的最大最小值差值與5的關系class Solution:def isStraight(self, nums):nums = sorted(nums)index = 0for i in range(len(nums)-1):if nums[i]==0:index+=1elif nums[i] == nums[i+1]:#先去重return Falseif nums[-1]-nums[index]>4:return Falsereturn True# nums = [0,0,1,2,5] nums = [0,6,1,2,5] sol = Solution() res = sol.isStraight(nums) print(res)

c++代碼:

class Solution { public:bool isStraight(vector<int>& nums) {int index = 0;sort(nums.begin(),nums.end());for(int i=0;i<nums.size();i++){if (nums[i]==0){index+=1;}else if(i>0 && nums[i]==nums[i-1]){return false;}}if(nums.back() - nums[index]>4){ return false;}return true;} };

62.圓圈中最后剩下的數字

思路:一直迭代

python代碼:

#思路:一直迭代 class Solution:def lastRemaining(self, n, m):index = 0num_list = [i for i in range(n)]while len(num_list) > 1:print('==num_list:', num_list)index = (index + m-1) % len(num_list)print('==index:', index)num_list.pop(index)return num_list[0]n = 4 m = 3 sol = Solution() sol.lastRemaining(n, m)

c++代碼:

上述代碼改寫成c++會超時,故換一種思路,從兩個人一直往上遞推到n個人

class Solution { public:int lastRemaining(int n, int m) {int pos=0;for (int i=2;i<=n;i++){pos = (pos+m)%i;}return pos;} };

63.股票的最大利潤

思路:一次遍歷更新最小價格和利潤即可 python代碼

class Solution:def maxProfit(self, prices: List[int]) -> int:if len(prices)==0:return 0min_price = prices[0]max_profit = 0for i in range(1,len(prices)):max_profit = max(max_profit, prices[i] - min_price)min_price = min(min_price, prices[i])# print(max_profit)return max_profit

dp:

class Solution:def maxProfit(self, prices: List[int]) -> int:if len(prices)==0:return 0dp =[0]*len(prices)min_price = prices[0]for i in range(1,len(prices)):dp[i] = max(dp[i-1],prices[i]-min_price)min_price = min(min_price,prices[i])# print(dp)return dp[-1]

c++代碼:

class Solution { public:int maxProfit(vector<int>& prices) {if(prices.size()==0){return 0;}int min_price = prices[0];int profit = 0;for(int i=1;i<prices.size();i++){profit = max(profit, prices[i]-min_price);min_price = min(min_price, prices[i]);}return profit;} };

64.求1+2+…+n

python:

class Solution:def sumNums(self, n: int) -> int:return n if n==0 else n+self.sumNums(n-1)

c++:

class Solution { public:int sumNums(int n) {if (n==1){return n;}return n+sumNums(n-1);} };

65.不用加減乘除做加法

思路:既然不能用四則運算,那么就用位運算替代

class Solution { public:int add(int a, int b) {if(a==0 || b==0){return a==0?b:a;}int sum_=0;int carry=0;while (b!=0){sum_ = a^b;carry = (unsigned int) (a&b)<<1;a = sum_;b = carry;}return a;} };

66.構建乘積數組

思路1:雙指針:

超時

# 雙層for循環 超時 o(n^2) class Solution:def constructArr(self, a):n = len(a)res = [0]*nindex = 0while index<n:temp = 1left = index-1right = index+1while left>=0:temp*=a[left]left-=1while right<n:temp *= a[right]right += 1res[index]= tempindex+=1print(res)return res

思路2:dp 用left記錄存儲i的左半部分乘積

? ? ? ? ? ? ?用right記錄存儲i的右半部分乘積

? ? ? ? ?再用left和right對應位置的數相乘就是結果

#B[i] = A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n] #dp left存儲i的左半部分乘積 #dp right存儲i的左半部分乘積 class Solution:def constructArr(self, a):n = len(a)left, right = [1] * n, [1] * nfor i in range(1, n):left[i] = left[i - 1] * a[i - 1]print(left)for i in range(n-2, -1, -1):right[i] = right[i+1]*a[i+1]print(right)res = [0]*len(a)for i in range(n):res[i] = left[i]*right[i]print(res)return res a = [1,2,3,4,5] sol = Solution() sol.constructArr(a)

思路3:優化上一個dp

#優化版 class Solution:def constructArr(self, a):n = len(a)left, right = [1] * n, [1] * nfor i in range(1, n):left[i] = left[i - 1] * a[i - 1]print(left)temp = 1for i in range(n-2, -1, -1):temp = temp*a[i+1]left[i] *= tempprint(left)return lefta = [1,2,3,4,5] sol = Solution() sol.constructArr(a)

c++:

class Solution { public:vector<int> constructArr(vector<int>& a) {int n = a.size();vector<int>res(n,1);for (int i=1;i<n;i++){res[i] = res[i-1]*a[i-1];}int temp=1;for (int i=n-2;i>-1;i--){temp *= a[i+1];res[i] *= temp;} return res;} };

67.把字符串轉換成整數

思路:

?1.去除首尾空格

2.判斷符號索引

3.從符號索引的下一位進行轉換 遇到字母就停止

#思路: # 1.去除首尾空格 # 2.判斷符號索引 # 3.從符號索引的下一位進行轉換 遇到字母就停止 class Solution:def strToInt(self, str):new_str = str.strip()if len(new_str)==0:return 0start = 0sign = 1if new_str[0]=='-':start=1sign = -1if new_str[0]=='+':start=1sign = 1res = 0for i in range(start,len(new_str)):if "0"<=new_str[i]<="9":res = 10*res + int(new_str[i])else:breakprint(res)res = sign*resif res >= 2 ** 31 - 1:return 2**31-1if res<=-2**31:return -2**31return resstr = " -42ddff" sol = Solution() sol.strToInt(str)

c++:

class Solution { public:int strToInt(string str) {int index =0;for (int i=0;i<str.size();i++){if (str[i]==' '){index++;}else{break;}}string new_str = "";new_str = str.substr(index);// cout<<new_str<<endl;int start=0;int sign=1;long res=0;if (new_str[0]=='-'){sign=-1;start=1;}if (new_str[0]=='+'){sign=1;start=1;}for(int i=start;i<new_str.size();i++){if('0'<=new_str[i] && new_str[i]<='9'){res=10*res+(new_str[i]-'0');if(sign==1 && res>INT_MAX){return INT_MAX;}if(sign==-1 && res-1>INT_MAX){return INT_MIN;}}else{break;}}res = sign*res;if (res>pow(2,31)-1){return pow(2,31)-1;}if (res<-pow(2,31)){return -pow(2,31);}return res;} };

?68-1.二叉搜索樹的最近公共祖先

思路:

1.從根節點開始遍歷樹
2.如果節點 p 和節點 q 都在右子樹上,那么以右孩子為根節點繼續 1 的操作
3.如果節點 p 和節點 q 都在左子樹上,那么以左孩子為根節點繼續 1 的操作
4.如果條件 2 和條件 3 都不成立,這就意味著我們已經找到p 和q 的公共祖先了

解法1:當成普通二叉樹

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':if root==p or root==q or root is None:return rootleft_node = self.lowestCommonAncestor(root.left,p,q)right_node = self.lowestCommonAncestor(root.right,p,q)if left_node is None:return right_nodeif right_node is None:return left_nodereturn root

解法2利用二叉搜索樹特點根節點值和左右子樹值大小的特點.遞歸法

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None #利用二叉搜索樹的特點 class Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':print('==root.val:', root.val)if root.val< min(p.val, q.val):#都大于根節點的值 將右孩子作為根節點return self.lowestCommonAncestor(root.right, p, q)elif root.val > max(p.val, q.val):#都小于根節點的值 將左孩子作為根節點return self.lowestCommonAncestor(root.left, p, q)else:#找到公共祖先return root

解法3.迭代法

#利用二叉搜索樹的特點 class Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':node = rootwhile node:if node.val < min(p.val,q.val):node = node.rightelif node.val > max(p.val,q.val):node = node.leftelse:return node

c++:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root->val<min(p->val,q->val)){return lowestCommonAncestor(root->right,p,q);}if(root->val>max(p->val,q->val)){return lowestCommonAncestor(root->left,p,q);}return root;} };

?68-2:二叉樹的最近公共祖先

python:遞歸

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':if root is None or root==p or root==q:#遞歸終止條件 節點為空 或者節點等于p,q其中之一return rootleft = self.lowestCommonAncestor(root.left, p, q)#遍歷左子樹right = self.lowestCommonAncestor(root.right, p, q)#遍歷右子樹if left is None:#左子樹為空 就去右子樹 return rightif right is None:#右子樹為空 就去左子樹 return leftreturn root#左右子樹都不為空 說明找到了節點 

c++:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root == NULL){return NULL;}if(root->val == p->val || root->val == q->val){return root;}TreeNode* left_node = lowestCommonAncestor(root->left,p,q);TreeNode* right_node = lowestCommonAncestor(root->right,p,q);if(left_node !=NULL && right_node!=NULL){return root;}if (left_node==NULL){return right_node;}return left_node;} };

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的python(c++)刷题+剑指offer的全部內容,希望文章能夠幫你解決所遇到的問題。

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

无码精品人妻一区二区三区av | 国产精华av午夜在线观看 | 狠狠综合久久久久综合网 | 成人片黄网站色大片免费观看 | 国产精品久免费的黄网站 | 国产成人一区二区三区在线观看 | 日韩在线不卡免费视频一区 | 牲交欧美兽交欧美 | 欧美xxxx黑人又粗又长 | 久久国产精品精品国产色婷婷 | 亚洲欧美精品aaaaaa片 | 国精产品一区二区三区 | 欧美午夜特黄aaaaaa片 | a在线观看免费网站大全 | 亚洲国产精品久久久久久 | 欧美老熟妇乱xxxxx | 麻豆果冻传媒2021精品传媒一区下载 | 麻豆果冻传媒2021精品传媒一区下载 | 成人亚洲精品久久久久 | 国产精品.xx视频.xxtv | 天堂亚洲免费视频 | 国产明星裸体无码xxxx视频 | 欧美老人巨大xxxx做受 | 亚洲成av人片在线观看无码不卡 | 日日摸日日碰夜夜爽av | www一区二区www免费 | 巨爆乳无码视频在线观看 | 999久久久国产精品消防器材 | 好爽又高潮了毛片免费下载 | 在线观看免费人成视频 | 熟妇人妻无码xxx视频 | 中文久久乱码一区二区 | 亚洲aⅴ无码成人网站国产app | 狠狠噜狠狠狠狠丁香五月 | 少女韩国电视剧在线观看完整 | 日韩av激情在线观看 | 在线а√天堂中文官网 | 国产精品嫩草久久久久 | 日韩视频 中文字幕 视频一区 | 亚洲成在人网站无码天堂 | 欧美亚洲日韩国产人成在线播放 | 人人澡人人妻人人爽人人蜜桃 | 精品久久久久久亚洲精品 | 色妞www精品免费视频 | 人人妻人人澡人人爽欧美一区九九 | 大屁股大乳丰满人妻 | 亚洲欧美日韩综合久久久 | 欧美亚洲日韩国产人成在线播放 | 国产97人人超碰caoprom | 日欧一片内射va在线影院 | 国内精品人妻无码久久久影院 | 久久久亚洲欧洲日产国码αv | 国产香蕉尹人综合在线观看 | a片在线免费观看 | 性色欲情网站iwww九文堂 | 亚洲精品欧美二区三区中文字幕 | 99er热精品视频 | 久久午夜无码鲁丝片午夜精品 | 久久久精品成人免费观看 | 国产热a欧美热a在线视频 | 色婷婷av一区二区三区之红樱桃 | 67194成是人免费无码 | 99麻豆久久久国产精品免费 | 国产亚洲人成a在线v网站 | 樱花草在线社区www | 亚洲成熟女人毛毛耸耸多 | 男人的天堂av网站 | 内射爽无广熟女亚洲 | 亚洲爆乳精品无码一区二区三区 | 国产xxx69麻豆国语对白 | 色五月五月丁香亚洲综合网 | 亚洲国产精品久久久久久 | 亚洲中文字幕无码中字 | aa片在线观看视频在线播放 | 在线看片无码永久免费视频 | 亚洲综合色区中文字幕 | 久久国语露脸国产精品电影 | 偷窥村妇洗澡毛毛多 | 亚洲区欧美区综合区自拍区 | ass日本丰满熟妇pics | 亚洲午夜福利在线观看 | 99久久人妻精品免费二区 | 久久久久免费精品国产 | 纯爱无遮挡h肉动漫在线播放 | 色一情一乱一伦 | 亚洲国产欧美日韩精品一区二区三区 | 日韩人妻系列无码专区 | 国产亚洲精品精品国产亚洲综合 | 欧美 日韩 人妻 高清 中文 | 午夜时刻免费入口 | 国产绳艺sm调教室论坛 | av香港经典三级级 在线 | 无遮无挡爽爽免费视频 | 女人色极品影院 | 一本大道久久东京热无码av | 婷婷丁香六月激情综合啪 | 久久综合给合久久狠狠狠97色 | 国产亚洲精品精品国产亚洲综合 | 亚洲の无码国产の无码步美 | 亚洲国产成人av在线观看 | 在线欧美精品一区二区三区 | 欧美日韩一区二区三区自拍 | 帮老师解开蕾丝奶罩吸乳网站 | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲成a人片在线观看无码3d | 麻豆国产丝袜白领秘书在线观看 | 中文字幕乱妇无码av在线 | 国产人成高清在线视频99最全资源 | 老熟女乱子伦 | 久久伊人色av天堂九九小黄鸭 | 精品人妻人人做人人爽 | 久久综合给合久久狠狠狠97色 | 亚洲国产日韩a在线播放 | 一本久久伊人热热精品中文字幕 | 欧美日韩综合一区二区三区 | 久久99久久99精品中文字幕 | 久久精品中文字幕大胸 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 老司机亚洲精品影院 | 亚洲色www成人永久网址 | 国产午夜视频在线观看 | 国产激情无码一区二区app | 野外少妇愉情中文字幕 | 蜜臀av无码人妻精品 | 亚洲第一无码av无码专区 | 综合激情五月综合激情五月激情1 | 色一情一乱一伦一视频免费看 | 宝宝好涨水快流出来免费视频 | 亚洲а∨天堂久久精品2021 | 国产人妻精品一区二区三区不卡 | 无码人妻久久一区二区三区不卡 | 色噜噜亚洲男人的天堂 | 国产精品第一区揄拍无码 | 美女黄网站人色视频免费国产 | 又大又硬又爽免费视频 | 国产午夜精品一区二区三区嫩草 | 精品亚洲韩国一区二区三区 | 日本精品少妇一区二区三区 | 日韩精品a片一区二区三区妖精 | 国产真实伦对白全集 | 免费国产成人高清在线观看网站 | 亚洲精品国产精品乱码视色 | 国产精品成人av在线观看 | 亚洲色偷偷男人的天堂 | 精品人妻中文字幕有码在线 | 麻豆果冻传媒2021精品传媒一区下载 | 中文字幕av无码一区二区三区电影 | 亚洲一区二区三区含羞草 | 国产精品多人p群无码 | 日日天干夜夜狠狠爱 | 无码免费一区二区三区 | 久久综合九色综合欧美狠狠 | 欧美第一黄网免费网站 | 人人爽人人澡人人高潮 | 久久久久亚洲精品男人的天堂 | v一区无码内射国产 | 欧美乱妇无乱码大黄a片 | 西西人体www44rt大胆高清 | 国产精品亚洲а∨无码播放麻豆 | 日日摸天天摸爽爽狠狠97 | 亚洲熟妇色xxxxx亚洲 | 国产美女精品一区二区三区 | 国产真人无遮挡作爱免费视频 | 国产激情无码一区二区app | 中文字幕av伊人av无码av | 99久久99久久免费精品蜜桃 | 亚洲s码欧洲m码国产av | 国产精品99爱免费视频 | 中文字幕 亚洲精品 第1页 | 一区二区三区乱码在线 | 欧洲 | 国产亚洲tv在线观看 | 成熟妇人a片免费看网站 | www成人国产高清内射 | 久久99精品国产麻豆 | 永久免费观看国产裸体美女 | 精品国产成人一区二区三区 | 欧美成人高清在线播放 | 99精品久久毛片a片 | 国产美女精品一区二区三区 | 三级4级全黄60分钟 | 无码人中文字幕 | 国产sm调教视频在线观看 | 少妇无码吹潮 | 国产女主播喷水视频在线观看 | 无套内谢老熟女 | 欧美性猛交内射兽交老熟妇 | 午夜福利电影 | 图片区 小说区 区 亚洲五月 | 国产麻豆精品精东影业av网站 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久午夜无码鲁丝片午夜精品 | 国产成人午夜福利在线播放 | 国产人妻久久精品二区三区老狼 | 久久久久久久久蜜桃 | 亚洲国产午夜精品理论片 | 日韩亚洲欧美中文高清在线 | 国产激情艳情在线看视频 | 狠狠色色综合网站 | 国产精品久久久 | 欧美 丝袜 自拍 制服 另类 | 国产后入清纯学生妹 | 欧美日韩一区二区免费视频 | 亚洲日韩一区二区 | 性欧美videos高清精品 | 色一情一乱一伦一区二区三欧美 | 天堂а√在线中文在线 | 丁香花在线影院观看在线播放 | 亚洲欧美综合区丁香五月小说 | 沈阳熟女露脸对白视频 | 久久久www成人免费毛片 | 又粗又大又硬又长又爽 | 国产97人人超碰caoprom | 特大黑人娇小亚洲女 | 丰满少妇人妻久久久久久 | 香蕉久久久久久av成人 | 99久久人妻精品免费二区 | 动漫av一区二区在线观看 | 精品国产国产综合精品 | 纯爱无遮挡h肉动漫在线播放 | 人妻少妇被猛烈进入中文字幕 | 国产人妻精品午夜福利免费 | 国内老熟妇对白xxxxhd | 日韩av激情在线观看 | 亚洲成a人片在线观看无码 | 无码人妻精品一区二区三区下载 | 色欲久久久天天天综合网精品 | 99re在线播放 | 亚洲精品国偷拍自产在线麻豆 | 好爽又高潮了毛片免费下载 | 亚洲一区二区三区播放 | 国产suv精品一区二区五 | 成人欧美一区二区三区黑人 | 香港三级日本三级妇三级 | 日日碰狠狠丁香久燥 | 国产又粗又硬又大爽黄老大爷视 | 亚洲乱码国产乱码精品精 | 波多野结衣av一区二区全免费观看 | 97无码免费人妻超级碰碰夜夜 | 人人妻人人澡人人爽精品欧美 | 在线播放无码字幕亚洲 | 久久国产36精品色熟妇 | 精品无人国产偷自产在线 | 老司机亚洲精品影院无码 | 午夜精品久久久内射近拍高清 | 精品一区二区三区无码免费视频 | 国产精品欧美成人 | 日本肉体xxxx裸交 | 亚洲色偷偷男人的天堂 | 国产肉丝袜在线观看 | 色欲人妻aaaaaaa无码 | 性欧美牲交在线视频 | 成 人影片 免费观看 | 俺去俺来也在线www色官网 | 国产人妖乱国产精品人妖 | 乱人伦人妻中文字幕无码 | 亚洲午夜久久久影院 | 亚洲经典千人经典日产 | 久久久久人妻一区精品色欧美 | 亚洲精品久久久久久一区二区 | 国产亚洲精品久久久久久久久动漫 | 无码毛片视频一区二区本码 | 欧美精品无码一区二区三区 | a在线亚洲男人的天堂 | 男人扒开女人内裤强吻桶进去 | 亚洲中文字幕无码中文字在线 | 久久久精品成人免费观看 | 久久人人爽人人爽人人片av高清 | av无码久久久久不卡免费网站 | 久久精品一区二区三区四区 | 国产九九九九九九九a片 | 亚洲综合无码久久精品综合 | 免费无码一区二区三区蜜桃大 | 国产午夜视频在线观看 | 成人三级无码视频在线观看 | 少妇性荡欲午夜性开放视频剧场 | 国产人妻久久精品二区三区老狼 | 最新国产乱人伦偷精品免费网站 | 伊人久久婷婷五月综合97色 | 久久精品99久久香蕉国产色戒 | 国产精品沙发午睡系列 | 欧美日韩一区二区综合 | 牛和人交xxxx欧美 | 精品人妻人人做人人爽 | 曰韩少妇内射免费播放 | 麻豆成人精品国产免费 | 亚洲中文无码av永久不收费 | 国产超碰人人爽人人做人人添 | 国产精品自产拍在线观看 | 特黄特色大片免费播放器图片 | 人人妻人人澡人人爽人人精品 | 永久免费精品精品永久-夜色 | 亚洲熟悉妇女xxx妇女av | 午夜精品一区二区三区在线观看 | 在线播放免费人成毛片乱码 | 亚洲综合无码一区二区三区 | av无码电影一区二区三区 | 性欧美videos高清精品 | 老子影院午夜伦不卡 | 在线精品国产一区二区三区 | 久久久久久av无码免费看大片 | 麻豆国产丝袜白领秘书在线观看 | 97精品国产97久久久久久免费 | 亚洲色www成人永久网址 | 人妻夜夜爽天天爽三区 | 国产舌乚八伦偷品w中 | 2020久久超碰国产精品最新 | 桃花色综合影院 | 亚洲国产精华液网站w | 99麻豆久久久国产精品免费 | 在线 国产 欧美 亚洲 天堂 | 精品国产一区二区三区av 性色 | 无码av岛国片在线播放 | 国产成人一区二区三区别 | 日韩人妻系列无码专区 | 粗大的内捧猛烈进出视频 | 少妇性l交大片 | 久久无码专区国产精品s | 男女超爽视频免费播放 | 国产精品亚洲专区无码不卡 | 国产精品无码一区二区桃花视频 | 亚洲人亚洲人成电影网站色 | 久久午夜夜伦鲁鲁片无码免费 | 乱码午夜-极国产极内射 | 国产无套粉嫩白浆在线 | √天堂资源地址中文在线 | 波多野结衣av在线观看 | 鲁一鲁av2019在线 | 国产成人亚洲综合无码 | 在线看片无码永久免费视频 | 国产精品久久久久无码av色戒 | 少妇高潮一区二区三区99 | 亚洲一区二区三区偷拍女厕 | 午夜成人1000部免费视频 | 亚洲一区二区观看播放 | 国产精品亚洲专区无码不卡 | 一本久道久久综合婷婷五月 | 国产超碰人人爽人人做人人添 | 日韩在线不卡免费视频一区 | 精品人妻中文字幕有码在线 | 最新国产乱人伦偷精品免费网站 | 中文字幕精品av一区二区五区 | 亚欧洲精品在线视频免费观看 | 狠狠躁日日躁夜夜躁2020 | 久久人人97超碰a片精品 | 熟妇人妻无码xxx视频 | 久久久中文字幕日本无吗 | 一本久久a久久精品亚洲 | 一本色道婷婷久久欧美 | 国产精品久久久久影院嫩草 | 亚洲中文字幕无码一久久区 | 欧美国产亚洲日韩在线二区 | 成人影院yy111111在线观看 | 国产午夜福利亚洲第一 | 亚洲国产精品一区二区第一页 | 狠狠cao日日穞夜夜穞av | 色窝窝无码一区二区三区色欲 | 青青青爽视频在线观看 | 日韩少妇白浆无码系列 | 久久人人爽人人人人片 | 国产精品无码一区二区三区不卡 | 国产香蕉尹人综合在线观看 | 亚洲国产成人av在线观看 | 爆乳一区二区三区无码 | 日韩成人一区二区三区在线观看 | 欧美日韩人成综合在线播放 | 男人的天堂2018无码 | 青草青草久热国产精品 | 特大黑人娇小亚洲女 | 亚洲精品中文字幕久久久久 | 日韩亚洲欧美中文高清在线 | 成人欧美一区二区三区黑人免费 | 人妻天天爽夜夜爽一区二区 | 日韩av无码一区二区三区不卡 | 影音先锋中文字幕无码 | 欧美性生交xxxxx久久久 | 亚洲人成人无码网www国产 | 成人亚洲精品久久久久软件 | 丝袜足控一区二区三区 | 亚洲一区av无码专区在线观看 | 国产欧美精品一区二区三区 | 小鲜肉自慰网站xnxx | 青草视频在线播放 | 色五月五月丁香亚洲综合网 | 国精产品一品二品国精品69xx | 亚洲男人av天堂午夜在 | 人妻少妇精品久久 | 少妇无码一区二区二三区 | 免费人成网站视频在线观看 | 中文字幕无码日韩专区 | 国产成人精品久久亚洲高清不卡 | 亚洲成a人一区二区三区 | 久久国内精品自在自线 | 四虎国产精品一区二区 | 欧美xxxxx精品 | 日产精品高潮呻吟av久久 | 国产精品久久久久久无码 | 日韩欧美中文字幕公布 | 亚洲成a人片在线观看无码3d | 色欲久久久天天天综合网精品 | 亚洲 另类 在线 欧美 制服 | 日日天日日夜日日摸 | 欧美放荡的少妇 | 国产亚洲美女精品久久久2020 | 欧美日本免费一区二区三区 | а天堂中文在线官网 | 国内少妇偷人精品视频 | 久久综合激激的五月天 | 特黄特色大片免费播放器图片 | 无码av最新清无码专区吞精 | 日韩精品无码免费一区二区三区 | 波多野结衣av在线观看 | 少妇人妻偷人精品无码视频 | 亚洲国产高清在线观看视频 | 日本熟妇乱子伦xxxx | 国产在线无码精品电影网 | 久久成人a毛片免费观看网站 | 特级做a爰片毛片免费69 | 国产乱人伦偷精品视频 | 亚洲精品鲁一鲁一区二区三区 | 全黄性性激高免费视频 | 国产片av国语在线观看 | 乱中年女人伦av三区 | 亚洲国产一区二区三区在线观看 | 东京热无码av男人的天堂 | 无遮挡国产高潮视频免费观看 | 亚洲综合在线一区二区三区 | 日韩精品a片一区二区三区妖精 | 成人一区二区免费视频 | 麻豆国产丝袜白领秘书在线观看 | 麻豆国产人妻欲求不满谁演的 | 荫蒂添的好舒服视频囗交 | 蜜桃无码一区二区三区 | 久久精品中文字幕一区 | 亚洲精品久久久久久一区二区 | 丝袜足控一区二区三区 | 伦伦影院午夜理论片 | 少妇人妻偷人精品无码视频 | 欧美xxxxx精品 | 婷婷综合久久中文字幕蜜桃三电影 | 中文无码精品a∨在线观看不卡 | 西西人体www44rt大胆高清 | 青青青手机频在线观看 | 久9re热视频这里只有精品 | 人妻夜夜爽天天爽三区 | 丝袜 中出 制服 人妻 美腿 | 亚洲狠狠婷婷综合久久 | 久久视频在线观看精品 | 亚洲精品国偷拍自产在线麻豆 | 一本色道久久综合亚洲精品不卡 | 无码毛片视频一区二区本码 | 99国产欧美久久久精品 | 亚洲精品中文字幕乱码 | 人人超人人超碰超国产 | 亚洲aⅴ无码成人网站国产app | 少妇久久久久久人妻无码 | 国产美女极度色诱视频www | 久久人妻内射无码一区三区 | 亚洲精品美女久久久久久久 | 国产精品18久久久久久麻辣 | 久久亚洲精品中文字幕无男同 | 精品无码成人片一区二区98 | 婷婷五月综合激情中文字幕 | 狠狠色色综合网站 | 亚洲精品久久久久久一区二区 | 性色av无码免费一区二区三区 | 丝袜 中出 制服 人妻 美腿 | 131美女爱做视频 | 激情亚洲一区国产精品 | www成人国产高清内射 | 一本无码人妻在中文字幕免费 | 3d动漫精品啪啪一区二区中 | 丰满人妻精品国产99aⅴ | 人人妻人人澡人人爽人人精品浪潮 | 久久精品国产99久久6动漫 | 精品国产乱码久久久久乱码 | 日本精品久久久久中文字幕 | 青青青手机频在线观看 | 亚洲成在人网站无码天堂 | av在线亚洲欧洲日产一区二区 | 无码人妻出轨黑人中文字幕 | 国产在线精品一区二区高清不卡 | 少妇邻居内射在线 | 无码国产乱人伦偷精品视频 | 麻豆md0077饥渴少妇 | 窝窝午夜理论片影院 | 国产一区二区不卡老阿姨 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 欧美性生交活xxxxxdddd | 小泽玛莉亚一区二区视频在线 | 18禁止看的免费污网站 | 亲嘴扒胸摸屁股激烈网站 | 国产成人亚洲综合无码 | 免费观看激色视频网站 | 一本久久a久久精品亚洲 | 中文字幕无码乱人伦 | 日本精品高清一区二区 | 人人妻人人澡人人爽欧美精品 | 亚洲码国产精品高潮在线 | 亚洲自偷自偷在线制服 | 国产精华av午夜在线观看 | 精品人妻中文字幕有码在线 | 欧美日本免费一区二区三区 | 3d动漫精品啪啪一区二区中 | 久久久久久久久888 | 国产成人精品优优av | 国产明星裸体无码xxxx视频 | 性欧美牲交xxxxx视频 | 国产精品久久久久无码av色戒 | 色爱情人网站 | 无码人妻丰满熟妇区五十路百度 | 亚洲 高清 成人 动漫 | 自拍偷自拍亚洲精品10p | 人人妻人人藻人人爽欧美一区 | 蜜臀aⅴ国产精品久久久国产老师 | 性做久久久久久久免费看 | 女人被爽到呻吟gif动态图视看 | 精品偷自拍另类在线观看 | 国产亚洲视频中文字幕97精品 | 成年美女黄网站色大免费视频 | 亚洲成av人片在线观看无码不卡 | 少妇性荡欲午夜性开放视频剧场 | 国产一区二区三区影院 | 亚洲无人区午夜福利码高清完整版 | 男人的天堂2018无码 | 在线观看免费人成视频 | 正在播放老肥熟妇露脸 | 国产黑色丝袜在线播放 | 欧美性生交活xxxxxdddd | 夜夜躁日日躁狠狠久久av | 国产精品a成v人在线播放 | 领导边摸边吃奶边做爽在线观看 | 澳门永久av免费网站 | 大色综合色综合网站 | 日本一区二区三区免费高清 | 欧美日韩人成综合在线播放 | 国产乱码精品一品二品 | 国产三级精品三级男人的天堂 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久 国产 尿 小便 嘘嘘 | 国产深夜福利视频在线 | 亚洲一区二区三区四区 | 国产欧美熟妇另类久久久 | 97久久超碰中文字幕 | 久久 国产 尿 小便 嘘嘘 | 国产成人精品视频ⅴa片软件竹菊 | 国产精品内射视频免费 | 无码帝国www无码专区色综合 | 婷婷丁香五月天综合东京热 | 影音先锋中文字幕无码 | 亚洲娇小与黑人巨大交 | 波多野结衣乳巨码无在线观看 | 天堂а√在线中文在线 | 激情亚洲一区国产精品 | 亚洲阿v天堂在线 | 久久国产精品萌白酱免费 | 久久亚洲日韩精品一区二区三区 | 亚洲人成网站色7799 | 国产农村妇女高潮大叫 | 麻豆精品国产精华精华液好用吗 | www国产亚洲精品久久久日本 | 婷婷丁香六月激情综合啪 | 久久午夜无码鲁丝片秋霞 | 精品无码一区二区三区的天堂 | 性生交大片免费看l | 久久午夜夜伦鲁鲁片无码免费 | 国产福利视频一区二区 | 熟女少妇人妻中文字幕 | 好爽又高潮了毛片免费下载 | 国产香蕉尹人视频在线 | 中文字幕av日韩精品一区二区 | 无码帝国www无码专区色综合 | 欧美国产日韩久久mv | 久久午夜无码鲁丝片午夜精品 | 东京一本一道一二三区 | 中文字幕日韩精品一区二区三区 | 正在播放东北夫妻内射 | 久久精品国产大片免费观看 | 天堂亚洲免费视频 | 亚洲国产欧美日韩精品一区二区三区 | 3d动漫精品啪啪一区二区中 | 午夜时刻免费入口 | 久9re热视频这里只有精品 | 亚洲色在线无码国产精品不卡 | 在教室伦流澡到高潮hnp视频 | 精品久久综合1区2区3区激情 | 国产成人一区二区三区在线观看 | 亚洲国产av精品一区二区蜜芽 | 精品久久8x国产免费观看 | 少妇激情av一区二区 | 日日天干夜夜狠狠爱 | 亚洲熟妇色xxxxx亚洲 | 综合人妻久久一区二区精品 | 国产成人精品必看 | 国产情侣作爱视频免费观看 | 亚洲乱码中文字幕在线 | 久久精品一区二区三区四区 | 午夜无码人妻av大片色欲 | 亚洲一区二区三区四区 | 粉嫩少妇内射浓精videos | 精品无码国产一区二区三区av | 亚洲色欲色欲天天天www | 欧美人与禽猛交狂配 | 亚洲 a v无 码免 费 成 人 a v | 亚洲熟女一区二区三区 | 国产猛烈高潮尖叫视频免费 | 性啪啪chinese东北女人 | 亲嘴扒胸摸屁股激烈网站 | 国内精品人妻无码久久久影院 | 日韩视频 中文字幕 视频一区 | 国语精品一区二区三区 | 久久人人爽人人爽人人片av高清 | 国产亚洲精品久久久闺蜜 | 国产亚洲精品久久久久久 | 久久99精品久久久久久 | 欧美日韩一区二区免费视频 | 日本大香伊一区二区三区 | 欧美亚洲国产一区二区三区 | 成人欧美一区二区三区黑人免费 | 又大又硬又爽免费视频 | 中文字幕无码乱人伦 | 国产香蕉97碰碰久久人人 | 国产免费久久久久久无码 | 97久久超碰中文字幕 | 天天av天天av天天透 | 亚洲精品久久久久中文第一幕 | 日韩精品无码一区二区中文字幕 | 亚洲午夜久久久影院 | 亚洲国产精品久久久久久 | 强辱丰满人妻hd中文字幕 | 成年美女黄网站色大免费全看 | 天天摸天天碰天天添 | 国产精品a成v人在线播放 | 国产精品对白交换视频 | 最新国产麻豆aⅴ精品无码 | 亚洲中文无码av永久不收费 | 亚洲精品午夜国产va久久成人 | 无码播放一区二区三区 | 动漫av网站免费观看 | 在线a亚洲视频播放在线观看 | 国产精品久久久久无码av色戒 | 全球成人中文在线 | 激情内射亚州一区二区三区爱妻 | 国产av一区二区精品久久凹凸 | 高清不卡一区二区三区 | 大乳丰满人妻中文字幕日本 | 久久综合给久久狠狠97色 | 成人片黄网站色大片免费观看 | 精品水蜜桃久久久久久久 | 免费网站看v片在线18禁无码 | 清纯唯美经典一区二区 | 国产激情无码一区二区app | 国内综合精品午夜久久资源 | 免费无码av一区二区 | 人人妻人人藻人人爽欧美一区 | 欧美亚洲日韩国产人成在线播放 | 中文字幕久久久久人妻 | 亚洲精品一区二区三区四区五区 | 久久99精品久久久久久动态图 | 无码av免费一区二区三区试看 | 国产精品福利视频导航 | 鲁鲁鲁爽爽爽在线视频观看 | 波多野结衣一区二区三区av免费 | 四虎国产精品免费久久 | 欧美人与禽zoz0性伦交 | 国内精品久久久久久中文字幕 | 欧美精品国产综合久久 | 亚洲综合色区中文字幕 | 亚洲人成网站在线播放942 | 亚洲 欧美 激情 小说 另类 | 97夜夜澡人人爽人人喊中国片 | 亚洲欧美精品aaaaaa片 | 人妻有码中文字幕在线 | 亚洲国产成人a精品不卡在线 | 婷婷五月综合缴情在线视频 | 老熟女乱子伦 | 亚洲乱亚洲乱妇50p | 亚洲中文字幕久久无码 | 激情人妻另类人妻伦 | 欧美zoozzooz性欧美 | 中文字幕乱码人妻二区三区 | 久久精品国产一区二区三区 | 美女黄网站人色视频免费国产 | 亚洲а∨天堂久久精品2021 | 国产成人综合色在线观看网站 | 荫蒂被男人添的好舒服爽免费视频 | 国产无套内射久久久国产 | 图片区 小说区 区 亚洲五月 | 免费观看的无遮挡av | 欧美老熟妇乱xxxxx | 性欧美牲交xxxxx视频 | 55夜色66夜色国产精品视频 | 中文字幕乱码人妻无码久久 | 欧美三级a做爰在线观看 | 18禁黄网站男男禁片免费观看 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 男女爱爱好爽视频免费看 | 亚洲精品一区二区三区大桥未久 | 久久国产精品萌白酱免费 | 国产麻豆精品精东影业av网站 | 美女黄网站人色视频免费国产 | 欧美自拍另类欧美综合图片区 | 色情久久久av熟女人妻网站 | 亚洲欧美国产精品久久 | 男女超爽视频免费播放 | 99久久久国产精品无码免费 | 四虎4hu永久免费 | 67194成是人免费无码 | 亚洲精品一区二区三区在线 | 亚洲欧美国产精品久久 | 99精品视频在线观看免费 | 午夜不卡av免费 一本久久a久久精品vr综合 | 国产成人综合在线女婷五月99播放 | 国产又粗又硬又大爽黄老大爷视 | 国产熟妇高潮叫床视频播放 | 中文字幕无码av波多野吉衣 | 亚洲の无码国产の无码步美 | 老子影院午夜伦不卡 | 扒开双腿疯狂进出爽爽爽视频 | 久久久久免费看成人影片 | 欧美日韩综合一区二区三区 | 国产情侣作爱视频免费观看 | 欧美老妇交乱视频在线观看 | 亚洲人成网站免费播放 | 黑人粗大猛烈进出高潮视频 | 亚洲色在线无码国产精品不卡 | 对白脏话肉麻粗话av | 国产成人一区二区三区别 | 成人影院yy111111在线观看 | 无遮挡国产高潮视频免费观看 | 午夜理论片yy44880影院 | 一本无码人妻在中文字幕免费 | 成人影院yy111111在线观看 | 在教室伦流澡到高潮hnp视频 | 激情国产av做激情国产爱 | 少妇无码一区二区二三区 | 国产激情艳情在线看视频 | 老头边吃奶边弄进去呻吟 | 国产成人无码a区在线观看视频app | 成人片黄网站色大片免费观看 | 国产人妻人伦精品 | 亚洲精品欧美二区三区中文字幕 | 无码国内精品人妻少妇 | 久久久精品国产sm最大网站 | 日韩人妻无码一区二区三区久久99 | 日本精品久久久久中文字幕 | 亚洲国产精品无码一区二区三区 | 国产精品内射视频免费 | 亚洲精品中文字幕 | 白嫩日本少妇做爰 | 国产人妻久久精品二区三区老狼 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲精品鲁一鲁一区二区三区 | 老子影院午夜伦不卡 | 亚洲精品午夜无码电影网 | 亚洲欧洲中文日韩av乱码 | 精品国产aⅴ无码一区二区 | 久久综合香蕉国产蜜臀av | 丝袜人妻一区二区三区 | 99精品国产综合久久久久五月天 | 国产精品久久国产三级国 | 免费国产成人高清在线观看网站 | 国产精品久久久久久亚洲影视内衣 | 国产香蕉尹人视频在线 | 亚洲国产欧美在线成人 | 久久精品中文字幕大胸 | 国语精品一区二区三区 | 国产两女互慰高潮视频在线观看 | 乌克兰少妇性做爰 | 国产xxx69麻豆国语对白 | 一本色道久久综合狠狠躁 | 久久久久av无码免费网 | 丰满岳乱妇在线观看中字无码 | 在线天堂新版最新版在线8 | 少妇人妻av毛片在线看 | 欧美肥老太牲交大战 | 国产精品欧美成人 | 中文无码成人免费视频在线观看 | 亚洲一区二区三区四区 | 久久综合激激的五月天 | 美女毛片一区二区三区四区 | 熟女少妇在线视频播放 | 色情久久久av熟女人妻网站 | 亚洲国产精品无码一区二区三区 | 日韩av激情在线观看 | 日本一区二区三区免费播放 | 国产激情一区二区三区 | 亚洲熟妇色xxxxx欧美老妇 | 国产精品久久久av久久久 | 人妻互换免费中文字幕 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲精品国偷拍自产在线观看蜜桃 | 美女黄网站人色视频免费国产 | 色婷婷久久一区二区三区麻豆 | 国产亚洲人成a在线v网站 | 无码国内精品人妻少妇 | 欧美国产日韩亚洲中文 | 亚洲精品欧美二区三区中文字幕 | 日韩欧美群交p片內射中文 | 国产在线无码精品电影网 | 亚洲热妇无码av在线播放 | 俄罗斯老熟妇色xxxx | 国产精品久久精品三级 | 亚洲国产精品久久人人爱 | 亚洲欧美日韩国产精品一区二区 | 一本大道伊人av久久综合 | 乱中年女人伦av三区 | 在教室伦流澡到高潮hnp视频 | 日日碰狠狠丁香久燥 | 99国产精品白浆在线观看免费 | 老司机亚洲精品影院 | 亚洲中文字幕无码一久久区 | 精品人妻av区 | 久久亚洲国产成人精品性色 | 精品久久综合1区2区3区激情 | 一本大道伊人av久久综合 | 国产免费久久精品国产传媒 | 激情爆乳一区二区三区 | 国产精品亚洲一区二区三区喷水 | 一区二区传媒有限公司 | 国产成人亚洲综合无码 | 欧美人妻一区二区三区 | 最近的中文字幕在线看视频 | 午夜不卡av免费 一本久久a久久精品vr综合 | v一区无码内射国产 | 欧美亚洲日韩国产人成在线播放 | 波多野结衣av一区二区全免费观看 | 东京无码熟妇人妻av在线网址 | 色综合久久88色综合天天 | 蜜桃视频插满18在线观看 | 亚洲精品中文字幕乱码 | 成人一在线视频日韩国产 | 天堂无码人妻精品一区二区三区 | 久久97精品久久久久久久不卡 | 老司机亚洲精品影院 | 日日干夜夜干 | 任你躁在线精品免费 | 亚洲中文字幕无码中文字在线 | 鲁一鲁av2019在线 | 久久精品国产一区二区三区 | 一本大道久久东京热无码av | 久久国产精品二国产精品 | 欧美亚洲日韩国产人成在线播放 | 国产精品久久久久久无码 | 国产精品对白交换视频 | 在线观看免费人成视频 | 好男人社区资源 | 无码人妻精品一区二区三区下载 | 国产激情精品一区二区三区 | 亚洲综合无码久久精品综合 | 久久综合狠狠综合久久综合88 | 在线视频网站www色 | 亚洲综合在线一区二区三区 | 亚洲日本va午夜在线电影 | 无码毛片视频一区二区本码 | 中文亚洲成a人片在线观看 | 亚洲国产欧美日韩精品一区二区三区 | 2020久久超碰国产精品最新 | 中文字幕日产无线码一区 | 国产精品福利视频导航 | 亚洲大尺度无码无码专区 | 中文字幕色婷婷在线视频 | 国产日产欧产精品精品app | 欧美黑人乱大交 | 亚洲最大成人网站 | 77777熟女视频在线观看 а天堂中文在线官网 | 亚洲日韩精品欧美一区二区 | 日韩精品一区二区av在线 | 特大黑人娇小亚洲女 | 欧美xxxxx精品 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 白嫩日本少妇做爰 | 日本va欧美va欧美va精品 | 亚洲 激情 小说 另类 欧美 | 丰满人妻精品国产99aⅴ | 中文毛片无遮挡高清免费 | 狠狠色色综合网站 | 国产香蕉97碰碰久久人人 | 人妻少妇被猛烈进入中文字幕 | 999久久久国产精品消防器材 | 亚洲国产一区二区三区在线观看 | 国产在线一区二区三区四区五区 | 性开放的女人aaa片 | 色一情一乱一伦 | 国产特级毛片aaaaaa高潮流水 | 天天躁夜夜躁狠狠是什么心态 | 欧美日韩色另类综合 | 一本久久a久久精品vr综合 | 国产无套粉嫩白浆在线 | av在线亚洲欧洲日产一区二区 | 国产凸凹视频一区二区 | 99riav国产精品视频 | 蜜桃无码一区二区三区 | 国产精品毛多多水多 | 国产精品鲁鲁鲁 | 免费人成网站视频在线观看 | 午夜福利一区二区三区在线观看 | 中文字幕日产无线码一区 | 无码人妻精品一区二区三区下载 | 国产乱人无码伦av在线a | 国产乱码精品一品二品 | 狠狠噜狠狠狠狠丁香五月 | 国产精品-区区久久久狼 | 全黄性性激高免费视频 | 性生交大片免费看l | 精品国产成人一区二区三区 | 日韩少妇内射免费播放 | 俺去俺来也在线www色官网 | 国产精品久久久av久久久 | 欧美高清在线精品一区 | 日产国产精品亚洲系列 | 好屌草这里只有精品 | 成人精品一区二区三区中文字幕 | 亚洲男女内射在线播放 | 国产高潮视频在线观看 | 亚洲啪av永久无码精品放毛片 | 亚洲国产精品一区二区第一页 | 一本无码人妻在中文字幕免费 | 免费中文字幕日韩欧美 | 在线成人www免费观看视频 | 国产在线精品一区二区三区直播 | 狂野欧美性猛交免费视频 | 亚洲人成网站色7799 | 国产真人无遮挡作爱免费视频 | 丰满人妻翻云覆雨呻吟视频 | 精品无码一区二区三区的天堂 | 无码精品人妻一区二区三区av | 欧美 日韩 人妻 高清 中文 | 美女黄网站人色视频免费国产 | 撕开奶罩揉吮奶头视频 | 国产在线精品一区二区三区直播 | 亚洲自偷自拍另类第1页 | 一二三四在线观看免费视频 | 久久久久se色偷偷亚洲精品av | 精品夜夜澡人妻无码av蜜桃 | 国产sm调教视频在线观看 | 天天摸天天透天天添 | 久久五月精品中文字幕 | 久久精品女人的天堂av | 亚洲人成网站色7799 | 国产精品久久久久久久影院 | 欧美日韩色另类综合 | 草草网站影院白丝内射 | 国产精品久久久久9999小说 | 曰韩无码二三区中文字幕 | 色诱久久久久综合网ywww | 双乳奶水饱满少妇呻吟 | 老熟女重囗味hdxx69 | 国产精品无码一区二区桃花视频 | 亚洲成a人片在线观看日本 | 国产成人无码午夜视频在线观看 | 国产超碰人人爽人人做人人添 | 亚洲日韩乱码中文无码蜜桃臀网站 | 日日麻批免费40分钟无码 | 亚洲日韩中文字幕在线播放 | 亚洲中文字幕乱码av波多ji | 精品无人区无码乱码毛片国产 | 无码精品人妻一区二区三区av | 国产猛烈高潮尖叫视频免费 | 国产av剧情md精品麻豆 | 国内精品一区二区三区不卡 | 亚洲成av人影院在线观看 | 欧美三级不卡在线观看 | 精品水蜜桃久久久久久久 | 四虎国产精品免费久久 | 精品 日韩 国产 欧美 视频 | 久久国语露脸国产精品电影 | 欧美大屁股xxxxhd黑色 | 少妇性俱乐部纵欲狂欢电影 | 鲁大师影院在线观看 | 亚洲va欧美va天堂v国产综合 | 丰满护士巨好爽好大乳 | 性色欲网站人妻丰满中文久久不卡 | 国产精品永久免费视频 | 大乳丰满人妻中文字幕日本 | 亚洲第一无码av无码专区 | 日韩精品无码免费一区二区三区 | 国产人妻大战黑人第1集 | 国产内射爽爽大片视频社区在线 | 风流少妇按摩来高潮 | 一个人免费观看的www视频 | 久久精品一区二区三区四区 | 亚洲国产精品久久久久久 | 无套内谢的新婚少妇国语播放 | 国产xxx69麻豆国语对白 | 国产精品香蕉在线观看 | 亚洲精品中文字幕乱码 | 日韩视频 中文字幕 视频一区 | 无人区乱码一区二区三区 | 国内揄拍国内精品人妻 | 少妇厨房愉情理9仑片视频 | 高清不卡一区二区三区 | 国产综合久久久久鬼色 | 精品欧美一区二区三区久久久 | 99久久精品日本一区二区免费 | 久久精品国产一区二区三区肥胖 | 熟妇激情内射com | 亚洲午夜福利在线观看 | 亚洲综合精品香蕉久久网 | 亚洲成a人片在线观看无码3d | 国产无av码在线观看 | 最近免费中文字幕中文高清百度 | 欧美人与善在线com | 日韩亚洲欧美中文高清在线 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 欧美日韩一区二区免费视频 | 国产麻豆精品一区二区三区v视界 | 日韩精品成人一区二区三区 | 久久国产36精品色熟妇 | aa片在线观看视频在线播放 | 大胆欧美熟妇xx | 精品久久久无码中文字幕 | 亚洲一区二区三区播放 | 国产精品久久国产三级国 | 国产av一区二区三区最新精品 | 无码成人精品区在线观看 | 久久99精品国产麻豆蜜芽 | 红桃av一区二区三区在线无码av | 国产成人精品无码播放 | 无码人妻丰满熟妇区五十路百度 | v一区无码内射国产 | 亚洲日韩精品欧美一区二区 | 国产特级毛片aaaaaa高潮流水 | 美女毛片一区二区三区四区 | 波多野结衣aⅴ在线 | 久久精品中文闷骚内射 | 亚洲一区av无码专区在线观看 | 国产97色在线 | 免 | 国产精品第一区揄拍无码 | 国内综合精品午夜久久资源 | 51国偷自产一区二区三区 | 在线看片无码永久免费视频 | 欧美熟妇另类久久久久久不卡 | av无码久久久久不卡免费网站 | 国产又粗又硬又大爽黄老大爷视 | 亚洲精品久久久久久一区二区 | 亚洲国产精品久久人人爱 | 中文字幕无码日韩欧毛 | 国产三级精品三级男人的天堂 | 狠狠躁日日躁夜夜躁2020 | 麻豆精品国产精华精华液好用吗 | 香港三级日本三级妇三级 | 高潮毛片无遮挡高清免费视频 | 成人无码视频在线观看网站 | 狠狠躁日日躁夜夜躁2020 | 国产精品视频免费播放 | 精品久久久无码人妻字幂 | 天天躁夜夜躁狠狠是什么心态 | 狠狠亚洲超碰狼人久久 | 亚洲一区av无码专区在线观看 | 亚洲色在线无码国产精品不卡 | 国产口爆吞精在线视频 | 白嫩日本少妇做爰 | 97久久超碰中文字幕 | 天堂亚洲免费视频 | 国产三级久久久精品麻豆三级 | 国产精品无码一区二区三区不卡 | 欧美国产亚洲日韩在线二区 | 超碰97人人做人人爱少妇 | 欧美性生交活xxxxxdddd | 99久久无码一区人妻 | 又粗又大又硬毛片免费看 | 久久久精品成人免费观看 | 久久亚洲日韩精品一区二区三区 | 国产成人无码专区 | 亚洲成色www久久网站 | 久久国内精品自在自线 | 无码中文字幕色专区 | 动漫av网站免费观看 | 日本熟妇乱子伦xxxx | 欧美亚洲国产一区二区三区 | 无码播放一区二区三区 | 亚洲精品午夜无码电影网 | 亚洲一区二区三区偷拍女厕 | 亚洲成av人片在线观看无码不卡 | 67194成是人免费无码 | 亚洲第一网站男人都懂 | av香港经典三级级 在线 | 欧美精品无码一区二区三区 | 国产激情精品一区二区三区 | 亚洲综合精品香蕉久久网 | 妺妺窝人体色www婷婷 | 在线观看国产一区二区三区 | 久久综合给合久久狠狠狠97色 | 国产高清不卡无码视频 | 中文字幕乱码中文乱码51精品 | 理论片87福利理论电影 | 一本久道高清无码视频 | 少妇愉情理伦片bd | 国产做国产爱免费视频 | 丰满人妻被黑人猛烈进入 | 成人毛片一区二区 | 亚洲va欧美va天堂v国产综合 | 最新国产乱人伦偷精品免费网站 | 国产成人精品无码播放 | 亚洲一区二区三区在线观看网站 | 成人亚洲精品久久久久软件 | 久久www免费人成人片 | 国产内射老熟女aaaa | 曰本女人与公拘交酡免费视频 | 99久久久无码国产精品免费 | 99久久久国产精品无码免费 | 亚洲欧美中文字幕5发布 | 少妇人妻偷人精品无码视频 | 国产亚洲精品久久久久久国模美 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 精品一区二区三区波多野结衣 | 天天摸天天碰天天添 | 亚洲色欲色欲天天天www | 性色欲网站人妻丰满中文久久不卡 | 中文字幕人成乱码熟女app | 国产乱码精品一品二品 | 国产电影无码午夜在线播放 | 丰满少妇女裸体bbw | 久久精品中文字幕一区 | 99久久久国产精品无码免费 | 亚洲精品一区二区三区婷婷月 | 色欲综合久久中文字幕网 | 国产精品人妻一区二区三区四 | 亚洲色大成网站www | 婷婷五月综合缴情在线视频 | 亚洲精品中文字幕乱码 | 老熟妇仑乱视频一区二区 | 天干天干啦夜天干天2017 | 国产99久久精品一区二区 | 日本精品人妻无码77777 天堂一区人妻无码 | 最新国产乱人伦偷精品免费网站 | 最新国产乱人伦偷精品免费网站 | 一二三四社区在线中文视频 | 中文字幕久久久久人妻 | 国内丰满熟女出轨videos | 亚洲精品国产a久久久久久 | 国产成人无码a区在线观看视频app | 国产精品内射视频免费 | 中文无码成人免费视频在线观看 | 岛国片人妻三上悠亚 | 奇米影视7777久久精品 | 日韩欧美群交p片內射中文 | 欧美日韩一区二区综合 | 九九在线中文字幕无码 | 荫蒂添的好舒服视频囗交 | 亚洲精品中文字幕久久久久 | 麻花豆传媒剧国产免费mv在线 | 性生交大片免费看女人按摩摩 | 色噜噜亚洲男人的天堂 | 亚洲人成网站色7799 | 亚洲第一无码av无码专区 | 精品无人区无码乱码毛片国产 | 亚洲 高清 成人 动漫 | 日韩av无码中文无码电影 | 成人片黄网站色大片免费观看 | 亚洲精品国产a久久久久久 | 99精品无人区乱码1区2区3区 | 精品国产乱码久久久久乱码 | 亚洲一区av无码专区在线观看 | 午夜性刺激在线视频免费 | 中文毛片无遮挡高清免费 | 蜜臀aⅴ国产精品久久久国产老师 | 免费男性肉肉影院 | 国产精品人妻一区二区三区四 | 久久综合给合久久狠狠狠97色 | 色爱情人网站 | 久久精品国产99久久6动漫 | 玩弄人妻少妇500系列视频 | 综合人妻久久一区二区精品 | 风流少妇按摩来高潮 | 纯爱无遮挡h肉动漫在线播放 | 377p欧洲日本亚洲大胆 | 国产九九九九九九九a片 | 丰满人妻精品国产99aⅴ | 爽爽影院免费观看 | 免费观看的无遮挡av | 欧美日韩人成综合在线播放 | 久久综合给久久狠狠97色 | 亚洲日韩精品欧美一区二区 | 久久久久99精品成人片 | 精品日本一区二区三区在线观看 | 欧美熟妇另类久久久久久多毛 | 乱中年女人伦av三区 | 波多野42部无码喷潮在线 | av香港经典三级级 在线 | 伊人久久大香线蕉av一区二区 | 熟女少妇在线视频播放 | 亚洲啪av永久无码精品放毛片 | 高清国产亚洲精品自在久久 | 激情五月综合色婷婷一区二区 | 18禁止看的免费污网站 | 中文字幕无码免费久久99 | 国产av人人夜夜澡人人爽麻豆 | 亚洲日本在线电影 | 色五月五月丁香亚洲综合网 | √天堂中文官网8在线 | 中文精品久久久久人妻不卡 | 97久久国产亚洲精品超碰热 | 久久精品人人做人人综合试看 | 色婷婷久久一区二区三区麻豆 | 午夜无码区在线观看 | 国产精品久久久一区二区三区 | 国内少妇偷人精品视频 | 久久久久人妻一区精品色欧美 | 亚洲色偷偷偷综合网 | 在线播放亚洲第一字幕 | 天天拍夜夜添久久精品大 | 对白脏话肉麻粗话av | 亚洲精品中文字幕久久久久 | 色欲人妻aaaaaaa无码 | 女人被爽到呻吟gif动态图视看 | 97精品人妻一区二区三区香蕉 | www一区二区www免费 | 久久综合九色综合欧美狠狠 | 狠狠cao日日穞夜夜穞av | 67194成是人免费无码 | 扒开双腿吃奶呻吟做受视频 | 久久精品国产亚洲精品 | 人妻熟女一区 | 无遮挡啪啪摇乳动态图 | 一本久道久久综合婷婷五月 | 国产综合久久久久鬼色 | 国产乱人伦av在线无码 | 99久久婷婷国产综合精品青草免费 | 丰满少妇高潮惨叫视频 | 无套内谢的新婚少妇国语播放 | 精品成人av一区二区三区 | 亚洲熟悉妇女xxx妇女av | 日韩精品成人一区二区三区 | yw尤物av无码国产在线观看 | 亚洲中文字幕无码中字 | 国产精品欧美成人 | 国产在热线精品视频 | 免费看男女做好爽好硬视频 | 永久免费观看国产裸体美女 | 秋霞成人午夜鲁丝一区二区三区 | 野狼第一精品社区 | 亚洲精品一区二区三区四区五区 | 欧美三级a做爰在线观看 | 久久久久免费精品国产 | 欧美老人巨大xxxx做受 | 狠狠cao日日穞夜夜穞av | 九一九色国产 | 国产精品理论片在线观看 | 99在线 | 亚洲 | 亚洲综合精品香蕉久久网 | 成人一区二区免费视频 | 国模大胆一区二区三区 | 国产亚洲tv在线观看 | 免费无码一区二区三区蜜桃大 | 国产一精品一av一免费 | 亚洲成av人在线观看网址 | 麻豆国产97在线 | 欧洲 | 国产乱人伦av在线无码 | 色婷婷香蕉在线一区二区 | 亚洲国产精品无码一区二区三区 | 亚洲日韩av片在线观看 | 奇米影视7777久久精品人人爽 | 思思久久99热只有频精品66 | 麻豆国产丝袜白领秘书在线观看 | 牲欲强的熟妇农村老妇女视频 | 精品国产av色一区二区深夜久久 | 永久黄网站色视频免费直播 | 亚洲呦女专区 | 99精品无人区乱码1区2区3区 | 国产精品久久久久久无码 | 久久人人97超碰a片精品 | 波多野结衣aⅴ在线 | 鲁鲁鲁爽爽爽在线视频观看 | 国产成人无码区免费内射一片色欲 | 国产精品久久久 | 国产精品二区一区二区aⅴ污介绍 | 欧美一区二区三区视频在线观看 | ass日本丰满熟妇pics | 男女爱爱好爽视频免费看 | 成熟女人特级毛片www免费 | 久久99久久99精品中文字幕 | 好爽又高潮了毛片免费下载 | 国产乡下妇女做爰 | 国产成人精品久久亚洲高清不卡 | 国产精品久久久久无码av色戒 | 国产精品久久久久久久9999 | 欧美性猛交内射兽交老熟妇 | 在线天堂新版最新版在线8 | 久久精品中文字幕大胸 | 日韩av无码一区二区三区 | 国产精品99久久精品爆乳 | 装睡被陌生人摸出水好爽 | 正在播放东北夫妻内射 | 伊在人天堂亚洲香蕉精品区 | 玩弄人妻少妇500系列视频 | 麻豆精品国产精华精华液好用吗 | 国产精品成人av在线观看 | 日韩无码专区 | 又紧又大又爽精品一区二区 | av无码久久久久不卡免费网站 | 99国产欧美久久久精品 | 国产口爆吞精在线视频 | 少妇激情av一区二区 | 国产人妻大战黑人第1集 | 国产精品99爱免费视频 | 东京热男人av天堂 | 狠狠躁日日躁夜夜躁2020 | 精品国产国产综合精品 | 国产凸凹视频一区二区 | 亚洲成色在线综合网站 | а天堂中文在线官网 | 日韩视频 中文字幕 视频一区 | 久久亚洲中文字幕无码 | 国产艳妇av在线观看果冻传媒 | 中文无码伦av中文字幕 | av无码不卡在线观看免费 | 男人扒开女人内裤强吻桶进去 | 在线а√天堂中文官网 | 熟妇人妻无乱码中文字幕 | 久久久久亚洲精品中文字幕 | 精品国产一区二区三区av 性色 | 人妻尝试又大又粗久久 | 日韩精品无码一区二区中文字幕 | 色一情一乱一伦 | 丰腴饱满的极品熟妇 | 丝袜足控一区二区三区 | 激情内射日本一区二区三区 | 无码吃奶揉捏奶头高潮视频 | 中文字幕 人妻熟女 | 国产精品久久久久久久影院 | 欧美性猛交xxxx富婆 | 沈阳熟女露脸对白视频 | 国产又粗又硬又大爽黄老大爷视 | 天天躁夜夜躁狠狠是什么心态 | 国产成人午夜福利在线播放 | 国产香蕉尹人综合在线观看 | 欧美激情内射喷水高潮 | 亚洲欧美色中文字幕在线 | 国产精品二区一区二区aⅴ污介绍 | 中文字幕 亚洲精品 第1页 | 国产精品理论片在线观看 | 免费无码av一区二区 | 国产精品资源一区二区 | 国产人妻精品一区二区三区 | 一本一道久久综合久久 | 亚洲中文字幕无码中字 | 99精品国产综合久久久久五月天 | 国产综合在线观看 | 亚洲精品一区二区三区婷婷月 | 99久久精品日本一区二区免费 | a片免费视频在线观看 | 国产成人精品久久亚洲高清不卡 | 久久精品成人欧美大片 | 久久久久成人片免费观看蜜芽 | 国产真实伦对白全集 | 东北女人啪啪对白 | 伊人久久大香线蕉午夜 | 国产性生交xxxxx无码 | 国产av一区二区精品久久凹凸 | 最近的中文字幕在线看视频 | 日本爽爽爽爽爽爽在线观看免 | 国产精品久久久久久亚洲毛片 | 婷婷丁香六月激情综合啪 | 成人亚洲精品久久久久 | 亚洲欧美综合区丁香五月小说 | av无码久久久久不卡免费网站 | 国产精品第一区揄拍无码 | 成人无码视频在线观看网站 | 久久这里只有精品视频9 | 精品久久久无码中文字幕 | 中文字幕中文有码在线 | 日韩欧美成人免费观看 | 精品久久久久久人妻无码中文字幕 | 一本久久a久久精品vr综合 | 国产农村妇女高潮大叫 | av香港经典三级级 在线 | 久久久久成人片免费观看蜜芽 | 黑人大群体交免费视频 | 国产特级毛片aaaaaaa高清 | 国产精品久久久久久亚洲毛片 | 国产在热线精品视频 | 成人精品视频一区二区三区尤物 | 国产精品丝袜黑色高跟鞋 | 99久久人妻精品免费一区 | 又色又爽又黄的美女裸体网站 | 亚洲一区二区三区含羞草 | 日韩人妻少妇一区二区三区 | 国产女主播喷水视频在线观看 | 双乳奶水饱满少妇呻吟 | 少妇人妻偷人精品无码视频 | 国产精品内射视频免费 | 亚洲人成影院在线无码按摩店 | 日本熟妇浓毛 | 亚洲小说春色综合另类 | 欧美第一黄网免费网站 | 无遮无挡爽爽免费视频 | 中文字幕av日韩精品一区二区 | 性欧美videos高清精品 | 亚洲日韩一区二区三区 | 少妇性俱乐部纵欲狂欢电影 | 亚洲国产精品一区二区美利坚 | 鲁一鲁av2019在线 | 国产情侣作爱视频免费观看 | 久青草影院在线观看国产 | 日韩无码专区 | 亚洲天堂2017无码中文 | 天堂а√在线中文在线 | 男人扒开女人内裤强吻桶进去 | 在线 国产 欧美 亚洲 天堂 | 日韩 欧美 动漫 国产 制服 | 激情综合激情五月俺也去 | 亚洲天堂2017无码 | 精品夜夜澡人妻无码av蜜桃 | 成熟女人特级毛片www免费 | 日本一本二本三区免费 | 欧美性猛交内射兽交老熟妇 | 爱做久久久久久 | 亚洲午夜无码久久 | 国内揄拍国内精品人妻 | 无码成人精品区在线观看 | 中文字幕人妻无码一夲道 | 色偷偷人人澡人人爽人人模 | 国产人妻精品午夜福利免费 | 高潮喷水的毛片 | 国产乡下妇女做爰 | 99国产精品白浆在线观看免费 | 午夜无码人妻av大片色欲 | 中文字幕乱码人妻二区三区 | 色五月五月丁香亚洲综合网 | 亚洲精品一区二区三区四区五区 | 无码一区二区三区在线观看 | 欧美性猛交xxxx富婆 | 国产免费久久精品国产传媒 | 国产精品办公室沙发 | 中文亚洲成a人片在线观看 | 露脸叫床粗话东北少妇 | 黑森林福利视频导航 | 波多野结衣高清一区二区三区 | 图片区 小说区 区 亚洲五月 | 在线а√天堂中文官网 | 国产精品亚洲一区二区三区喷水 | 天天躁夜夜躁狠狠是什么心态 | 久久亚洲日韩精品一区二区三区 | 国产精品久免费的黄网站 | 亚洲a无码综合a国产av中文 | 九九久久精品国产免费看小说 | 国产精品久久久久久亚洲影视内衣 | 国产av人人夜夜澡人人爽麻豆 | 人人澡人人妻人人爽人人蜜桃 | 国产亚洲美女精品久久久2020 | 又色又爽又黄的美女裸体网站 | 在线亚洲高清揄拍自拍一品区 | 人妻尝试又大又粗久久 | 久久久精品欧美一区二区免费 | 网友自拍区视频精品 | 亚洲欧美色中文字幕在线 | 18精品久久久无码午夜福利 | 久久天天躁夜夜躁狠狠 | 99视频精品全部免费免费观看 | 亚洲中文字幕av在天堂 | 中文亚洲成a人片在线观看 | 成人性做爰aaa片免费看不忠 | 亚洲色www成人永久网址 | 老熟女乱子伦 | 欧美日本日韩 | 成人免费视频视频在线观看 免费 | 国产精品久久久久久久9999 | 性啪啪chinese东北女人 | 一本色道久久综合亚洲精品不卡 | 精品水蜜桃久久久久久久 | 亚洲国精产品一二二线 | 宝宝好涨水快流出来免费视频 | 又大又紧又粉嫩18p少妇 | 国产日产欧产精品精品app | 国产亚洲人成a在线v网站 | 欧美高清在线精品一区 | 麻豆果冻传媒2021精品传媒一区下载 | 欧美猛少妇色xxxxx | 一个人看的www免费视频在线观看 | 啦啦啦www在线观看免费视频 | 老熟妇乱子伦牲交视频 | 国产成人av免费观看 | 丝袜人妻一区二区三区 | 国产激情精品一区二区三区 | 国产人妻久久精品二区三区老狼 | 精品久久久无码中文字幕 | 亚洲中文字幕在线观看 | 高清不卡一区二区三区 | 国产精华av午夜在线观看 | 丝袜美腿亚洲一区二区 | 特黄特色大片免费播放器图片 | 人妻无码αv中文字幕久久琪琪布 | 乱中年女人伦av三区 | 久久99精品久久久久久动态图 | 青草青草久热国产精品 | 精品无人国产偷自产在线 | 领导边摸边吃奶边做爽在线观看 | 国产午夜手机精彩视频 | 蜜臀av无码人妻精品 | 樱花草在线播放免费中文 | 国产另类ts人妖一区二区 | 18无码粉嫩小泬无套在线观看 | 欧美黑人巨大xxxxx | 日本大乳高潮视频在线观看 | 天天av天天av天天透 | 少妇高潮一区二区三区99 | 国产 精品 自在自线 | 亚洲中文字幕久久无码 | 久久精品中文字幕大胸 | www国产亚洲精品久久网站 | 国产综合色产在线精品 | 97资源共享在线视频 | 久久无码专区国产精品s | 国内揄拍国内精品人妻 | 九九久久精品国产免费看小说 | 亚洲呦女专区 | 国产成人综合美国十次 | 18禁止看的免费污网站 | 一本久道高清无码视频 | 日本一卡2卡3卡四卡精品网站 | 亚洲熟悉妇女xxx妇女av | 天堂久久天堂av色综合 | 在线а√天堂中文官网 | 无码人妻丰满熟妇区五十路百度 | 丝袜人妻一区二区三区 | 午夜精品一区二区三区的区别 | 欧美人与禽zoz0性伦交 | 久久伊人色av天堂九九小黄鸭 | 在线观看国产一区二区三区 | 国产美女极度色诱视频www | 性欧美大战久久久久久久 | 国产精品毛片一区二区 | 久久综合香蕉国产蜜臀av | 亚洲色在线无码国产精品不卡 | 最新国产乱人伦偷精品免费网站 | 国产午夜无码视频在线观看 | 又色又爽又黄的美女裸体网站 | 无码帝国www无码专区色综合 | 丰满护士巨好爽好大乳 | 中文精品久久久久人妻不卡 | 性史性农村dvd毛片 | 精品国产福利一区二区 | 亚洲熟妇自偷自拍另类 | 亚洲 高清 成人 动漫 | 亚洲精品午夜无码电影网 | 国产后入清纯学生妹 | 婷婷色婷婷开心五月四房播播 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲成a人片在线观看无码3d | 无码人妻久久一区二区三区不卡 | 黑人巨大精品欧美一区二区 | 99在线 | 亚洲 | 久久午夜无码鲁丝片 | 大乳丰满人妻中文字幕日本 | 国产人妻精品一区二区三区 | 国产超碰人人爽人人做人人添 | 麻豆人妻少妇精品无码专区 | 免费观看的无遮挡av | 伊人色综合久久天天小片 | 亚洲日韩中文字幕在线播放 | 中文无码精品a∨在线观看不卡 | 国产在线aaa片一区二区99 | 乱人伦人妻中文字幕无码久久网 | 国产成人综合色在线观看网站 | 国产麻豆精品一区二区三区v视界 | 久久人妻内射无码一区三区 | 亚洲va欧美va天堂v国产综合 | 女高中生第一次破苞av | 人人澡人人妻人人爽人人蜜桃 | 日日躁夜夜躁狠狠躁 | 久久久久久九九精品久 | 色综合久久久无码网中文 | 成人aaa片一区国产精品 | 扒开双腿吃奶呻吟做受视频 | 国产麻豆精品一区二区三区v视界 | 亚洲国产av精品一区二区蜜芽 | 图片区 小说区 区 亚洲五月 | 无码av免费一区二区三区试看 | 亚洲色成人中文字幕网站 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久精品中文字幕一区 | 亚洲高清偷拍一区二区三区 | 免费无码肉片在线观看 | 亚洲国产精品无码久久久久高潮 | 青草青草久热国产精品 | 无码国内精品人妻少妇 | 性生交大片免费看女人按摩摩 | 九九久久精品国产免费看小说 | 无码人妻少妇伦在线电影 | 丰满肥臀大屁股熟妇激情视频 | 国精产品一品二品国精品69xx | 少女韩国电视剧在线观看完整 | 国产精品内射视频免费 | 亚洲欧洲中文日韩av乱码 | а天堂中文在线官网 | 国产精品-区区久久久狼 | 丝袜美腿亚洲一区二区 | 大胆欧美熟妇xx | 无码av中文字幕免费放 | 天下第一社区视频www日本 | 红桃av一区二区三区在线无码av | 欧美变态另类xxxx | 国产真实伦对白全集 | 99久久久无码国产精品免费 | 一本加勒比波多野结衣 | 噜噜噜亚洲色成人网站 | 18黄暴禁片在线观看 | 婷婷六月久久综合丁香 | 国产精品多人p群无码 | 亚洲国产精品久久久久久 | 麻豆国产人妻欲求不满谁演的 | 免费观看又污又黄的网站 | 午夜福利电影 | 一本色道久久综合亚洲精品不卡 | 色五月五月丁香亚洲综合网 | 国产亚洲精品久久久久久大师 | 日韩亚洲欧美精品综合 | 日本成熟视频免费视频 | 国产精品-区区久久久狼 | 精品无码av一区二区三区 | 狠狠cao日日穞夜夜穞av | 精品一区二区不卡无码av | 欧美老妇与禽交 | 性欧美牲交xxxxx视频 | 女高中生第一次破苞av | 久久久久99精品国产片 | 国产日产欧产精品精品app | 亚洲国产欧美日韩精品一区二区三区 | 国产精品欧美成人 | 欧美性黑人极品hd | 国产偷国产偷精品高清尤物 | 漂亮人妻洗澡被公强 日日躁 | 黑人大群体交免费视频 | 黑人粗大猛烈进出高潮视频 | 久久久久se色偷偷亚洲精品av | 粉嫩少妇内射浓精videos | 国产精品久久久久久无码 | 一区二区传媒有限公司 | 欧美老熟妇乱xxxxx | 76少妇精品导航 | 国语自产偷拍精品视频偷 | 激情亚洲一区国产精品 | 亚洲精品国偷拍自产在线麻豆 | 欧美xxxxx精品 | 99久久久无码国产aaa精品 | 日本大乳高潮视频在线观看 | 精品厕所偷拍各类美女tp嘘嘘 | 在线欧美精品一区二区三区 | 亚洲国产精华液网站w | 亚洲精品国产第一综合99久久 | 久久99热只有频精品8 | 日韩人妻无码一区二区三区久久99 | 国内精品人妻无码久久久影院蜜桃 | 四虎国产精品一区二区 | 给我免费的视频在线观看 | 欧美人与善在线com | a片在线免费观看 | 性色av无码免费一区二区三区 | 久在线观看福利视频 | 中文无码精品a∨在线观看不卡 | 中文字幕久久久久人妻 | 国产真实伦对白全集 | 亚洲乱码国产乱码精品精 | 国产午夜手机精彩视频 | 麻豆成人精品国产免费 | 久久久亚洲欧洲日产国码αv | 无码人妻久久一区二区三区不卡 | 国产综合久久久久鬼色 | 好男人www社区 | 久久99精品久久久久婷婷 | 国产免费观看黄av片 | 3d动漫精品啪啪一区二区中 | 性欧美videos高清精品 | 亚洲国产欧美国产综合一区 | 男女爱爱好爽视频免费看 | 国产极品美女高潮无套在线观看 | 精品国偷自产在线视频 | 少女韩国电视剧在线观看完整 | 午夜成人1000部免费视频 | 黑人玩弄人妻中文在线 | 波多野结衣一区二区三区av免费 | 国产色视频一区二区三区 | 大乳丰满人妻中文字幕日本 | 国产成人无码午夜视频在线观看 | 俺去俺来也www色官网 |