精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在排序數組中查找元素的第一個和最后一個位置

開發 前端
給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。

[[440116]]

這個就是考察二分法的進階題目了

在排序數組中查找元素的第一個和最后一個位置

給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。

如果數組中不存在目標值 target,返回 [-1, -1]。

進階:你可以設計并實現時間復雜度為 O(log n) 的算法解決此問題嗎?

示例 1:

  • 輸入:nums = [5,7,7,8,8,10], target = 8
  • 輸出:[3,4]

示例 2:

  • 輸入:nums = [5,7,7,8,8,10], target = 6
  • 輸出:[-1,-1]

示例 3:

  • 輸入:nums = [], target = 0
  • 輸出:[-1,-1]

思路

這道題目如果基礎不是很好,不建議大家看簡短的代碼,簡短的代碼隱藏了太多邏輯,結果就是稀里糊涂把題AC了,但是沒有想清楚具體細節!

對二分還不了解的同學先做這兩題:

  • 704.二分查找
  • 35.搜索插入位置

下面我來把所有情況都討論一下。

尋找target在數組里的左右邊界,有如下三種情況:

  • 情況一:target 在數組范圍的右邊或者左邊,例如數組{3, 4, 5},target為2或者數組{3, 4, 5},target為6,此時應該返回{-1, -1}
  • 情況二:target 在數組范圍中,且數組中不存在target,例如數組{3,6,7},target為5,此時應該返回{-1, -1}
  • 情況三:target 在數組范圍中,且數組中存在target,例如數組{3,6,7},target為6,此時應該返回{1, 1}

這三種情況都考慮到,說明就想的很清楚了。

接下來,在去尋找左邊界,和右邊界了。

采用二分法來去尋找左右邊界,為了讓代碼清晰,我分別寫兩個二分來尋找左邊界和右邊界。

剛剛接觸二分搜索的同學不建議上來就像如果用一個二分來查找左右邊界,很容易把自己繞進去,建議扎扎實實的寫兩個二分分別找左邊界和右邊界

尋找右邊界

先來尋找右邊界,至于二分查找,如果看過704.二分查找就會知道,二分查找中什么時候用while (left <= right),有什么時候用while (left < right),其實只要清楚循環不變量,很容易區分兩種寫法。

那么這里我采用while (left <= right)的寫法,區間定義為[left, right],即左閉又閉的區間(如果這里有點看不懂了,強烈建議把704.二分查找這篇文章先看了,704題目做了之后再做這道題目就好很多了)

確定好:計算出來的右邊界是不包好target的右邊界,左邊界同理。

可以寫出如下代碼

  1. // 二分查找,尋找target的右邊界(不包括target) 
  2. // 如果rightBorder為沒有被賦值(即target在數組范圍的左邊,例如數組[3,3],target為2),為了處理情況一 
  3. int getRightBorder(vector<int>& nums, int target) { 
  4.     int left = 0; 
  5.     int right = nums.size() - 1; // 定義target在左閉右閉的區間里,[leftright
  6.     int rightBorder = -2; // 記錄一下rightBorder沒有被賦值的情況 
  7.     while (left <= right) { // 當left==right,區間[leftright]依然有效 
  8.         int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2 
  9.         if (nums[middle] > target) { 
  10.             right = middle - 1; // target 在左區間,所以[left, middle - 1] 
  11.         } else { // 當nums[middle] == target的時候,更新left,這樣才能得到target的右邊界 
  12.             left = middle + 1; 
  13.             rightBorder = left
  14.         } 
  15.     } 
  16.     return rightBorder; 

尋找左邊界

  1. // 二分查找,尋找target的左邊界leftBorder(不包括target) 
  2. // 如果leftBorder沒有被賦值(即target在數組范圍的右邊,例如數組[3,3],target為4),為了處理情況一 
  3. int getLeftBorder(vector<int>& nums, int target) { 
  4.     int left = 0; 
  5.     int right = nums.size() - 1; // 定義target在左閉右閉的區間里,[leftright
  6.     int leftBorder = -2; // 記錄一下leftBorder沒有被賦值的情況 
  7.     while (left <= right) { 
  8.         int middle = left + ((right - left) / 2); 
  9.         if (nums[middle] >= target) { // 尋找左邊界,就要在nums[middle] == target的時候更新right 
  10.             right = middle - 1; 
  11.             leftBorder = right
  12.         } else { 
  13.             left = middle + 1; 
  14.         } 
  15.     } 
  16.     return leftBorder; 

處理三種情況

左右邊界計算完之后,看一下主體代碼,這里把上面討論的三種情況,都覆蓋了

  1. class Solution { 
  2. public
  3.     vector<int> searchRange(vector<int>& nums, int target) { 
  4.         int leftBorder = getLeftBorder(nums, target); 
  5.         int rightBorder = getRightBorder(nums, target); 
  6.         // 情況一 
  7.         if (leftBorder == -2 || rightBorder == -2) return {-1, -1}; 
  8.         // 情況三 
  9.         if (rightBorder - leftBorder > 1) return {leftBorder + 1, rightBorder - 1}; 
  10.         // 情況二 
  11.         return {-1, -1}; 
  12.     } 
  13. private: 
  14.      int getRightBorder(vector<int>& nums, int target) { 
  15.         int left = 0; 
  16.         int right = nums.size() - 1; 
  17.         int rightBorder = -2; // 記錄一下rightBorder沒有被賦值的情況 
  18.         while (left <= right) { 
  19.             int middle = left + ((right - left) / 2); 
  20.             if (nums[middle] > target) { 
  21.                 right = middle - 1; 
  22.             } else { // 尋找右邊界,nums[middle] == target的時候更新left 
  23.                 left = middle + 1; 
  24.                 rightBorder = left
  25.             } 
  26.         } 
  27.         return rightBorder; 
  28.     } 
  29.     int getLeftBorder(vector<int>& nums, int target) { 
  30.         int left = 0; 
  31.         int right = nums.size() - 1; 
  32.         int leftBorder = -2; // 記錄一下leftBorder沒有被賦值的情況 
  33.         while (left <= right) { 
  34.             int middle = left + ((right - left) / 2); 
  35.             if (nums[middle] >= target) { // 尋找左邊界,nums[middle] == target的時候更新right 
  36.                 right = middle - 1; 
  37.                 leftBorder = right
  38.             } else { 
  39.                 left = middle + 1; 
  40.             } 
  41.         } 
  42.         return leftBorder; 
  43.     } 
  44. }; 

這份代碼在簡潔性很有大的優化空間,例如把尋找左右區間函數合并一起。

但拆開更清晰一些,而且把三種情況以及對應的處理邏輯完整的展現出來了。

總結

初學者建議大家一塊一塊的去分拆這道題目,正如本題解描述,想清楚三種情況之后,先專注于尋找右區間,然后專注于尋找左區間,左右根據左右區間做最后判斷。

不要上來就想如果一起尋找左右區間,搞著搞著就會顧此失彼,繞進去拔不出來了。

其他語言版本

Java

  1. class Solution { 
  2.     int[] searchRange(int[] nums, int target) { 
  3.         int leftBorder = getLeftBorder(nums, target); 
  4.         int rightBorder = getRightBorder(nums, target); 
  5.         // 情況一 
  6.         if (leftBorder == -2 || rightBorder == -2) return new int[]{-1, -1}; 
  7.         // 情況三 
  8.         if (rightBorder - leftBorder > 1) return new int[]{leftBorder + 1, rightBorder - 1}; 
  9.         // 情況二 
  10.         return new int[]{-1, -1}; 
  11.     } 
  12.  
  13.     int getRightBorder(int[] nums, int target) { 
  14.         int left = 0; 
  15.         int right = nums.length - 1; 
  16.         int rightBorder = -2; // 記錄一下rightBorder沒有被賦值的情況 
  17.         while (left <= right) { 
  18.             int middle = left + ((right - left) / 2); 
  19.             if (nums[middle] > target) { 
  20.                 right = middle - 1; 
  21.             } else { // 尋找右邊界,nums[middle] == target的時候更新left 
  22.                 left = middle + 1; 
  23.                 rightBorder = left
  24.             } 
  25.         } 
  26.         return rightBorder; 
  27.     } 
  28.  
  29.     int getLeftBorder(int[] nums, int target) { 
  30.         int left = 0; 
  31.         int right = nums.length - 1; 
  32.         int leftBorder = -2; // 記錄一下leftBorder沒有被賦值的情況 
  33.         while (left <= right) { 
  34.             int middle = left + ((right - left) / 2); 
  35.             if (nums[middle] >= target) { // 尋找左邊界,nums[middle] == target的時候更新right 
  36.                 right = middle - 1; 
  37.                 leftBorder = right
  38.             } else { 
  39.                 left = middle + 1; 
  40.             } 
  41.         } 
  42.         return leftBorder; 
  43.     } 
  1. // 解法2 
  2. // 1、首先,在 nums 數組中二分查找 target; 
  3. // 2、如果二分查找失敗,則 binarySearch 返回 -1,表明 nums 中沒有 target。此時,searchRange 直接返回 {-1, -1}; 
  4. // 3、如果二分查找成功,則 binarySearch 返回 nums 中值為 target 的一個下標。然后,通過左右滑動指針,來找到符合題意的區間 
  5.  
  6. class Solution { 
  7.  public int[] searchRange(int[] nums, int target) { 
  8.   int index = binarySearch(nums, target); // 二分查找 
  9.  
  10.   if (index == -1) { // nums 中不存在 target,直接返回 {-1, -1} 
  11.    return new int[] {-1, -1}; // 匿名數組 
  12.   } 
  13.   // nums 中存在 targe,則左右滑動指針,來找到符合題意的區間 
  14.   int left = index
  15.   int right = index
  16.         // 向左滑動,找左邊界 
  17.   while (left - 1 >= 0 && nums[left - 1] == nums[index]) { // 防止數組越界。邏輯短路,兩個條件順序不能換 
  18.    left--; 
  19.   } 
  20.         // 向左滑動,找右邊界 
  21.   while (right + 1 < nums.length && nums[right + 1] == nums[index]) { // 防止數組越界。 
  22.    right++; 
  23.   } 
  24.   return new int[] {leftright}; 
  25.     } 
  26.  
  27.  /** 
  28.   * 二分查找 
  29.   * @param nums 
  30.   * @param target 
  31.   */ 
  32.  public int binarySearch(int[] nums, int target) { 
  33.   int left = 0; 
  34.   int right = nums.length - 1; // 不變量:左閉右閉區間 
  35.  
  36.   while (left <= right) { // 不變量:左閉右閉區間 
  37.    int mid = left + (right - left) / 2; 
  38.    if (nums[mid] == target) { 
  39.     return mid; 
  40.    } else if (nums[mid] < target) { 
  41.     left = mid + 1; 
  42.    } else { 
  43.     right = mid - 1; // 不變量:左閉右閉區間 
  44.    } 
  45.   } 
  46.   return -1; // 不存在 
  47.  } 

Python

  1. class Solution: 
  2.     def searchRange(self, nums: List[int], target: int) -> List[int]: 
  3.         def getRightBorder(nums:List[int], target:int) -> int
  4.             leftright = 0, len(nums)-1 
  5.             rightBoder = -2 # 記錄一下rightBorder沒有被賦值的情況 
  6.             while left <= right
  7.                 middle = left + (right-left) // 2 
  8.                 if nums[middle] > target: 
  9.                     right = middle - 1 
  10.                 else: # 尋找右邊界,nums[middle] == target的時候更新left 
  11.                     left = middle + 1 
  12.                     rightBoder = left 
  13.  
  14.             return rightBoder 
  15.  
  16.         def getLeftBorder(nums:List[int], target:int) -> int
  17.             leftright = 0, len(nums)-1 
  18.             leftBoder = -2 # 記錄一下leftBorder沒有被賦值的情況 
  19.             while left <= right
  20.                 middle = left + (right-left) // 2 
  21.                 if nums[middle] >= target: #  尋找左邊界,nums[middle] == target的時候更新right 
  22.                     right = middle - 1; 
  23.                     leftBoder = right
  24.                 else
  25.                     left = middle + 1 
  26.             return leftBoder 
  27.         leftBoder = getLeftBorder(nums, target) 
  28.         rightBoder = getRightBorder(nums, target) 
  29.         # 情況一 
  30.         if leftBoder == -2 or rightBoder == -2: return [-1, -1] 
  31.         # 情況三 
  32.         if rightBoder -leftBoder >1: return [leftBoder + 1, rightBoder - 1] 
  33.         # 情況二 
  34.         return [-1, -1] 
  1. # 解法2 
  2. # 1、首先,在 nums 數組中二分查找 target; 
  3. # 2、如果二分查找失敗,則 binarySearch 返回 -1,表明 nums 中沒有 target。此時,searchRange 直接返回 {-1, -1}; 
  4. # 3、如果二分查找成功,則 binarySearch 返回 nums 中值為 target 的一個下標。然后,通過左右滑動指針,來找到符合題意的區間 
  5. class Solution: 
  6.     def searchRange(self, nums: List[int], target: int) -> List[int]: 
  7.         def binarySearch(nums:List[int], target:int) -> int
  8.             leftright = 0, len(nums)-1 
  9.             while left<=right: # 不變量:左閉右閉區間 
  10.                 middle = left + (right-left) // 2 
  11.                 if nums[middle] > target: 
  12.                     right = middle - 1 
  13.                 elif nums[middle] < target: 
  14.                     left = middle + 1 
  15.                 else
  16.                     return middle 
  17.             return -1 
  18.         index = binarySearch(nums, target) 
  19.         if index == -1:return [-1, -1] # nums 中不存在 target,直接返回 {-1, -1} 
  20.         # nums 中存在 targe,則左右滑動指針,來找到符合題意的區間 
  21.         leftright = indexindex 
  22.         # 向左滑動,找左邊界 
  23.         while left -1 >=0 and nums[left - 1] == target: left -=1 
  24.         # 向右滑動,找右邊界 
  25.         while right+1 < len(nums) and nums[right + 1] == target: right +=1 
  26.         return [leftright
  1. # 解法3 
  2. # 1、首先,在 nums 數組中二分查找得到第一個大于等于 target的下標(左邊界)與第一個大于target的下標(右邊界); 
  3. # 2、如果左邊界<= 右邊界,則返回 [左邊界, 右邊界]。否則返回[-1, -1] 
  4. class Solution: 
  5.     def searchRange(self, nums: List[int], target: int) -> List[int]: 
  6.         def binarySearch(nums:List[int], target:intlower:bool) -> int
  7.             leftright = 0, len(nums)-1 
  8.             ans = len(nums) 
  9.             while left<=right: # 不變量:左閉右閉區間 
  10.                 middle = left + (right-left) //2 
  11.                 # lowerTrue,執行前半部分,找到第一個大于等于 target的下標 ,否則找到第一個大于target的下標 
  12.                 if nums[middle] > target or (lower and nums[middle] >= target): 
  13.                     right = middle - 1 
  14.                     ans = middle 
  15.                 else
  16.                     left = middle + 1 
  17.             return ans 
  18.  
  19.         leftBorder = binarySearch(nums, target, True) # 搜索左邊界 
  20.         rightBorder = binarySearch(nums, target, False) -1  # 搜索右邊界 
  21.         if leftBorder<= rightBorder and rightBorder< len(nums) and nums[leftBorder] == target and  nums[rightBorder] == target: 
  22.             return [leftBorder, rightBorder] 
  23.         return [-1, -1] 
  1. # 解法4 
  2. # 1、首先,在 nums 數組中二分查找得到第一個大于等于 target的下標leftBorder; 
  3. # 2、在 nums 數組中二分查找得到第一個大于等于 target+1的下標, 減1則得到rightBorder; 
  4. # 3、如果開始位置在數組的右邊或者不存在target,則返回[-1, -1] 。否則返回[leftBorder, rightBorder] 
  5. class Solution: 
  6.     def searchRange(self, nums: List[int], target: int) -> List[int]: 
  7.         def binarySearch(nums:List[int], target:int) -> int
  8.             leftright = 0, len(nums)-1 
  9.             while left<=right: # 不變量:左閉右閉區間 
  10.                 middle = left + (right-left) //2 
  11.                 if nums[middle] >= target: 
  12.                     right = middle - 1 
  13.                 else
  14.                     left = middle + 1 
  15.             return left  # 若存在target,則返回第一個等于target的值 
  16.  
  17.         leftBorder = binarySearch(nums, target) # 搜索左邊界 
  18.         rightBorder = binarySearch(nums, target+1) -1  # 搜索右邊界 
  19.         if leftBorder == len(nums) or nums[leftBorder]!= target: # 情況一和情況二 
  20.             return [-1, -1] 
  21.         return [leftBorder, rightBorder] 

 

責任編輯:姜華 來源: 代碼隨想錄
相關推薦

2021-11-02 14:54:41

排序數組元素

2024-03-18 09:50:18

Selenium元素Python

2024-06-06 08:46:26

彈性布局元素瀏覽器

2020-11-13 07:08:51

Spring Boot應用Spring

2010-07-05 17:00:39

SQL server

2013-10-30 22:10:28

Clouda程序

2022-10-17 10:28:05

Web 組件代碼

2021-04-07 13:38:27

Django項目視圖

2023-09-21 22:43:17

Django框架

2013-01-14 09:44:58

JavaScriptJSJS框架

2011-03-21 14:24:13

Debian 6

2010-07-30 14:58:06

Flex應用

2011-03-03 21:04:08

bug程序員

2012-02-08 11:15:38

HibernateJava

2021-08-26 07:43:44

vectorerase錯誤

2014-07-21 10:25:12

ENode開發論壇

2011-06-24 13:38:32

QT 編譯 安裝

2019-12-31 08:00:00

DebianLinuxApple Swift

2021-11-02 08:00:00

機器學習API技術

2025-05-28 09:04:00

谷歌AI搜索
點贊
收藏

51CTO技術棧公眾號

无码国模国产在线观看| 麻豆传媒在线观看| 亚洲91中文字幕无线码三区| 日韩女优制服丝袜电影| 日本www在线视频| 成人午夜影视| 成人一级视频在线观看| 日韩免费高清在线观看| 日韩三级在线观看视频| 日韩欧美中文字幕电影| 一区二区三区91| 91久久偷偷做嫩草影院| 免费人成在线观看| 欧美精品一区二区三区精品| 日韩精品专区在线影院重磅| 欧美黄网在线观看| 美国成人毛片| 懂色av中文一区二区三区| 国产精品jizz在线观看麻豆| 精品在线免费观看视频| 久久美女视频| 亚洲深夜福利在线| 日本精品一二三区| 涩涩视频在线| 亚洲一二三四在线| 黄色一级视频播放| 午夜在线小视频| 久久九九影视网| 国产在线欧美日韩| av网站免费大全| 美女任你摸久久| 久久资源免费视频| 日本爱爱小视频| 国产剧情在线观看一区| 欧美日韩精品是欧美日韩精品| 亚洲三区四区| 可以在线观看的av网站| 91热门视频在线观看| 97超碰人人看人人| 国产欧美日韩综合精品一区二区三区| 欧美va天堂| 久久精品免费播放| 三上悠亚在线观看视频| 久久国产电影| 亚洲激情视频在线| jizz欧美性11| 99久久亚洲国产日韩美女| 色婷婷国产精品| 国产69精品久久久久久久| 青草视频在线免费直播| 亚洲精品免费电影| 欧美一区二区三区在线免费观看| 在线免费看av的网站| 巨乳诱惑日韩免费av| 欧美成人黄色小视频| 91视频青青草| 欧美黄色一区| 久久久久久亚洲精品不卡| 中文字幕免费视频| 国产精品美女在线观看直播| 欧美电影免费观看完整版| 免费看国产曰批40分钟| 成人午夜影视| 最新中文字幕一区二区三区| 一区二区三区四区久久| 国产激情在线| 亚洲高清三级视频| 免费日韩视频在线观看| 91p九色成人| 91精品国产一区二区三区蜜臀| 爱福利视频一区二区| 免费观看成人性生生活片| 亚洲国产美女搞黄色| 欧美,日韩,国产在线| 亚洲wwwww| 午夜精品久久久久久久| 麻豆传传媒久久久爱| 成人在线免费| 欧美成人video| 国产美女视频免费看| 深夜福利一区| 日韩欧美一区二区在线视频| 白嫩情侣偷拍呻吟刺激| 国产精品一区2区3区| 日韩视频第一页| 久久精品国产亚洲av高清色欲| 亚洲网色网站| 78m国产成人精品视频| 中日韩av在线| 成人激情免费电影网址| 神马影院午夜我不卡| 亚洲丝袜精品| 亚洲人成网站影音先锋播放| 97视频在线免费| 国产蜜臀av在线播放| 色94色欧美sute亚洲线路一ni | 久久久久高清精品| 久久精品日韩精品| 日本视频不卡| 精品国产91久久久久久| 日韩精品 欧美| 国产在线美女| 欧美日本一区二区三区四区| 亚洲精品性视频| 精品亚洲自拍| 美女扒开尿口让男人操亚洲视频网站| 三级黄色在线观看| 国产精品视频久久一区| 亚洲a区在线视频| 成年人免费在线视频| 中文字幕一区二区三区不卡在线| 亚洲一区二区三区在线观看视频 | 国产亚洲成年网址在线观看| 国产精品8888| 成人在线中文| 亚洲精品一区二区三区婷婷月| 性欧美13一14内谢| 一区二区亚洲| 97在线电影| 日韩黄色影院| 欧美性生活影院| 少妇精品一区二区三区| 在线日韩视频| 99久久精品无码一区二区毛片 | 亚洲国产精品免费| 欧美日韩在线观看免费| 久久国产人妖系列| 日韩理论片在线观看| www.com.cn成人| 亚洲国产精品一区二区三区| 国产亚洲精品熟女国产成人| 99香蕉国产精品偷在线观看 | 亚洲精品视频在线观看免费视频| 麻豆精品91| 久久福利电影| 国产cdts系列另类在线观看| 欧美三片在线视频观看| 激情五月深爱五月| 免费人成精品欧美精品| 少妇特黄a一区二区三区| 中文字幕 在线观看| 日韩电影第一页| 毛片视频网站在线观看| 国产精品一品视频| 蜜桃在线一区二区三区精品| 成人在线网址| 日韩欧美专区在线| 久草视频手机在线观看| 成人性生交大片免费| 青青草精品视频在线| 蜜桃久久久久| 欧美在线观看日本一区| 免费人成黄页在线观看忧物| 91久久奴性调教| 亚洲午夜久久久久久久国产| 蜜桃久久久久久久| 五月天男人天堂| 日韩三级av高清片| 性欧美视频videos6一9| 国产乱子伦精品无码码专区| 亚洲欧美日韩综合aⅴ视频| 毛毛毛毛毛毛毛片123| 欧美日韩一区二区高清| 精品无人乱码一区二区三区的优势| 1024免费在线视频| 777亚洲妇女| 久久无码精品丰满人妻| 久久精品国产精品亚洲红杏 | 91欧美国产| 91在线视频一区| 日韩三级电影视频| 亚洲精品xxx| 亚洲中文字幕无码爆乳av| 国产精品色在线观看| 亚洲免费在线播放视频| 国产精品videossex久久发布| 91精品久久久久久久久久久久久| 久久精品国产亚洲a∨麻豆| 亚洲国产中文字幕在线视频综合 | 亚洲精品91天天久久人人| 国产精品久久久久久久久免费桃花| 一本大道熟女人妻中文字幕在线 | 日本高清不卡三区| 性感女国产在线| 日韩最新在线视频| 黄色a在线观看| 欧洲日韩一区二区三区| 欧美人妻精品一区二区三区| 26uuu另类欧美| 天堂av2020| 国产精品人人爽人人做我的可爱| 精品亚洲第一| 亚洲福利影院| 乱亲女秽乱长久久久| 日本大片在线观看| 日韩色在线观看| 波多野结衣一区二区在线 | 爱情岛论坛亚洲入口| 欧美色网一区| 欧美激情精品久久久久久大尺度| 亚洲狼人综合网| 亚洲国产日韩一级| 国产免费嫩草影院| 国产一区中文字幕| 国产一区视频免费观看| 波多野结衣在线播放一区| 国产精品裸体一区二区三区| 久久三级毛片| 欧美在线免费看| 好看的中文字幕在线播放| 一区二区三区视频免费在线观看| 亚洲天堂中文字幕在线| 狠狠躁天天躁日日躁欧美| 精品99久久久久成人网站免费| 成人久久视频在线观看| 国产乱码一区二区三区四区| 欧美午夜视频| 三年中国中文在线观看免费播放| 亚洲视频一起| 成人久久久久久| 欧美xnxx| 久久91精品国产| 欧美自拍偷拍第一页| 激情懂色av一区av二区av| 国产成人精品无码免费看夜聊软件| 爽好多水快深点欧美视频| 四虎影院一区二区| 日韩a一区二区| 日产国产精品精品a∨| 亚洲精品小区久久久久久| 国精产品99永久一区一区| 日本一区二区三区播放| 亚洲一区二区三区四区视频 | 粉嫩久久久久久久极品| 91网站免费看| 不卡精品视频| 成人激情视频网| 91色在线看| 欧美激情视频给我| 懂色av一区| 久久久久久有精品国产| 肉肉视频在线观看| 久久久久久欧美| 欧美裸体视频| 日本精品性网站在线观看| 在线手机中文字幕| 另类美女黄大片| 伊人影院在线视频| 在线性视频日韩欧美| 伦理片一区二区三区| 亚洲区一区二区| www亚洲人| 久久夜色精品国产| 手机在线免费av| 国自在线精品视频| 在线男人天堂| 国产精品美女免费| 18video性欧美19sex高清| 欧美精品久久久久久久久久| 成人免费观看在线观看| 原创国产精品91| 四虎精品成人免费网站| 亚洲女人被黑人巨大进入al| 丰满熟女一区二区三区| 日韩av在线精品| 国产视频网站在线| 亚洲国产欧美久久| 国产中文字幕在线视频| 日韩中文字幕av| 番号集在线观看| 久久久精品视频在线观看| 国产乱码在线| 欧美日本中文字幕| aaa日本高清在线播放免费观看| 日韩av在线影院| 国产精品无码2021在线观看| 精品国产自在精品国产浪潮| 国产探花在线观看| 国产精品久久久久久av福利软件| 97天天综合网| 国产精品小说在线| 亚洲天堂中文字幕在线观看| 久久亚洲免费| 久久久久亚洲| 99精品人妻少妇一区二区| 亚洲天堂成人| 国产性生交xxxxx免费| 国产黄色成人av| 小早川怜子久久精品中文字幕| www.久久精品| 国产成人在线网址| 亚州成人在线电影| 97超碰国产在线| 日韩精品有码在线观看| 精产国品自在线www| 欧美伊久线香蕉线新在线| 日本成人精品| 五月天丁香综合久久国产 | 精品一区二区三区免费观看| 国产福利在线免费| 91在线视频在线| 99久久99久久精品国产| 国产精品蜜臀av| 国产午夜精品无码| 精品久久久久久中文字幕大豆网| 国产精品久久久免费视频| 色综合久久久久网| 亚洲精品久久久久久久久久久久久久| 欧美成人午夜电影| 在线免费看a| 欧洲成人在线观看| 国产精品流白浆在线观看| 日日噜噜噜夜夜爽爽| 久久一综合视频| 黄色片视频免费观看| 一区二区三区波多野结衣在线观看 | 成人免费在线视频| 一级片视频在线观看| 欧美精品一区二区久久久| av在线免费网站| 91精品国产综合久久久久久蜜臀| 国产一区 二区| 性欧美videosex高清少妇| 久久精品30| 国产又爽又黄无码无遮挡在线观看| 国产亚洲精品aa午夜观看| 农村妇女精品一区二区| 欧美日韩精品一区二区天天拍小说 | 日韩午夜激情免费电影| 欧美人xxx| 国产精品永久免费在线| 日韩精品网站| 日日躁夜夜躁aaaabbbb| 中文字幕免费不卡| 在线免费一区二区| 一区二区欧美激情| 福利视频一区| 一区二区日本| 加勒比av一区二区| 大地资源高清在线视频观看| 欧美日韩国产三级| 午夜在线视频| 日韩av不卡电影| 国产伦精品一区二区三区视频| 宅男一区二区三区| 精品在线观看免费| 乱h高h女3p含苞待放| 欧美一级黄色片| 色在线视频网| 国内一区二区三区在线视频| 911久久香蕉国产线看观看| 福利视频999| 亚洲伦在线观看| 刘亦菲毛片一区二区三区| 视频直播国产精品| 国产午夜精品一区在线观看 | 一级日本黄色片| 亚洲高清视频中文字幕| 亚洲人妻一区二区| 97久久精品人人澡人人爽缅北| 四虎影视成人精品国库在线观看| 欧美另类一区| 美日韩一区二区| 91aaa在线观看| 日韩精品高清在线| 久久不射影院| 免费亚洲一区二区| 免费在线观看日韩欧美| 久久久久久久极品内射| 日韩成人网免费视频| 91综合国产| 青草视频在线观看视频| 久久综合九色综合欧美98| 99免费在线观看| 国产一区二区三区久久精品| 国产高清亚洲| 中文字幕精品—区二区日日骚| 日韩 欧美一区二区三区| 日本一级片免费| 亚洲国产精品国自产拍av秋霞 | 亚洲精品国产精品乱码不99| 日韩中文字幕免费在线观看| 国产精品∨欧美精品v日韩精品| 国产精品美女在线观看直播| 欧美伦理视频在线观看| 亚洲欧美另类图片小说| 99精品免费观看| 青青草国产精品一区二区| 91久久久精品国产| 搡老熟女老女人一区二区| 欧美精品久久99久久在免费线 | 天堂在线资源网| 国产欧美va欧美va香蕉在线| 成人婷婷网色偷偷亚洲男人的天堂| 国产又黄又猛视频| 一区二区三区久久久| 丰满人妻一区二区三区四区53 | 欧美日韩在线视频免费观看| 免费国产在线精品一区二区三区| 久久一区欧美|