日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

python

python刷题+leetcode(第一部分)

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

1. 設計前中后隊列

思路:python代碼直接利用list的insert特性

class FrontMiddleBackQueue:def __init__(self):self.queque = []def pushFront(self, val: int) -> None:self.queque.insert(0, val)def pushMiddle(self, val: int) -> None:self.queque.insert(len(self.queque)//2, val)def pushBack(self, val: int) -> None:self.queque.append(val)def popFront(self) -> int:if self.queque: return self.queque.pop(0)return -1def popMiddle(self) -> int:if self.queque: return self.queque.pop((len(self.queque)-1)//2)return -1def popBack(self) -> int:if self.queque: return self.queque.pop(-1)return -1# Your FrontMiddleBackQueue object will be instantiated and called as such: # obj = FrontMiddleBackQueue() # obj.pushFront(val) # obj.pushMiddle(val) # obj.pushBack(val) # param_4 = obj.popFront() # param_5 = obj.popMiddle() # param_6 = obj.popBack()

c++實現:利用vector特性

class FrontMiddleBackQueue { public:vector<int> queue;FrontMiddleBackQueue() {}void pushFront(int val) {queue.insert(queue.begin(), val);}void pushMiddle(int val) {int pos = queue.size() / 2;queue.insert(queue.begin() + pos, val);}void pushBack(int val) {queue.push_back(val);}int popFront() {if(queue.empty()){return -1;}int value = queue[0];queue.erase(queue.begin());return value;}int popMiddle() {if(queue.empty()){return -1;}int pos = (queue.size()-1)/2;int value = queue[pos];queue.erase(queue.begin() + pos);return value;}int popBack() {if(queue.empty()){return -1;}int value = queue[queue.size()-1];// queue.erase(queue.end()-1);queue.pop_back();return value;} };/*** Your FrontMiddleBackQueue object will be instantiated and called as such:* FrontMiddleBackQueue* obj = new FrontMiddleBackQueue();* obj->pushFront(val);* obj->pushMiddle(val);* obj->pushBack(val);* int param_4 = obj->popFront();* int param_5 = obj->popMiddle();* int param_6 = obj->popBack();*/

2. 字典序的第K小數字

思路:

python代碼:

class Solution:def getNode(self, n, first, second):nums = 0while first <= n:nums += min(n+1, second) - firstfirst *= 10second *= 10return numsdef findKthNumber(self, n: int, k: int) -> int:cur = 1k -= 1while k > 0:nums = self.getNode(n, cur, cur+1)if nums <= k: #第k個數不在以cur為根節點的樹上cur += 1 #cur在字典序數組中從左往右移動k -= numselse:#在子樹中cur *= 10 #cur在字典序數組中從上往下移動k -= 1 #刨除根節點return cur

c++實現:

class Solution { public:int getNode(long n, long first, long second){int nums = 0;while(first <= n){nums += min(n+1, second) - first;first *= 10;second *= 10;}return nums;}int findKthNumber(int n, int k) {long cur = 1;k -= 1;while(k > 0){int nums = getNode(n, cur, cur + 1);if(nums <= k){cur += 1;k -= nums;}else{cur *= 10;k -= 1;}}return cur;} };

3.復原 IP 地址

思路:遞歸+回溯

分兩種情況:如果開頭是0 需要單獨拿出來, 不是的話 在分 1位, 2位, 3位的 只是需要注意,兩位 三位需要有數字范圍限定

class Solution:def backtrace(self, s, track, count):if len(track) == 4 and count == self.length:self.res.append('.'.join(track))returnif len(track) == 4 and count != self.length:returnif count == self.length:returnn = len(s)for i in range(n):if s[i] == '0': #0要單獨拿出來 self.backtrace(s[i+1:], track + ['0'], count + 1)else:self.backtrace(s[i+1:], track + [s[i]], count + 1)#一位數的if i < n-1 and 10 <= int(s[i:i+2])<=99:self.backtrace(s[i+2:], track + [s[i:i+2]], count + 2)#兩位數的if i < n-2 and 100 <= int(s[i:i+3])<=255:self.backtrace(s[i+3:], track + [s[i:i+3]], count + 3)#三位數的def restoreIpAddresses(self, s: str) -> List[str]:self.res = []self.length = len(s)if self.length > 12:return []self.backtrace(s, [], 0)return self.res

c++實現:

class Solution { public:vector<string> res;void backtrace(string s, vector<string>& track, int count, int length){if(track.size() == 4 && count == length){ string temp = "";for(int i = 0; i < 4; i++){temp += track[i];if(i != 3){temp += ".";}}res.push_back(temp);return;}if(track.size() == 4 && count != length){return;}if(count == length){return;}int n = s.size();for(int i = 0; i < n; i++){if(s[i] == '0'){track.push_back("0");backtrace(s.substr(i + 1, n - 1), track, count + 1, length);track.pop_back();}else{string temp_;temp_ = s[i];track.push_back(temp_);backtrace(s.substr(i + 1, n - 1), track, count + 1, length);track.pop_back();if(i < n-1 && 10 <= atoi(s.substr(i, 2).c_str()) && atoi(s.substr(i, 2).c_str()) <= 99){track.push_back(s.substr(i, 2));backtrace(s.substr(i + 2, n - 2), track, count + 2, length);track.pop_back();}if(i < n-2 && 100 <= atoi(s.substr(i, 3).c_str()) && atoi(s.substr(i, 3).c_str()) <= 255){track.push_back(s.substr(i, 3));backtrace(s.substr(i + 3, n - 3), track, count + 3, length);track.pop_back();}}}} vector<string> restoreIpAddresses(string s) {int length = s.size();if(length > 12){return {};}vector<string> track;backtrace(s, track, 0, length);return res;} };

4.無重復字符的最長子串

思路1.暴力破解

""" 給一個字符串,找出最長的沒有重復字符的子字符串,并返回該字符串的長度 """ # class solution: def lengthOfLongestSubstring(s):max_len=0if(len(s)==1 or len(s)==0):max_len=len(s)#第一層循環從最左側到右側第二個,第二層循環從第一層緊跟的一個到最后一個,找出所有不重復的子字符串,比較長度得出最長。for i in range(0,len(s)-1):for j in range(i+1,len(s)):if s[j] in s[i:j]:if j-i>max_len:right=jleft=imax_len=right-leftarray=s[i:j]breakelif j==len(s)-1:if max_len<j-i+1:max_len=j-i+1array = s[:(j+1)]return max_len,array # # sol=solution() result,array=lengthOfLongestSubstring('abcabcbbb') print(result,array)

思路2.滑動窗口

class Solution:def lengthOfLongestSubstring(self, s: str) -> int: dict_={}res = 0left,right=0,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+=1return res

思路3.利用字典,用key存儲字符 value存儲其相應的index

#hash 用key存儲字符 value存儲其相應的index class Solution:def lengthOfLongestSubstring(self, s):dict_={}max_length = 0start = 0for index,char in enumerate(s):if char in dict_ and start<=dict_[char]:start = dict_[char]+1else:max_length = max(max_length, index - start +1)dict_[char] = indexprint('==dict_:',dict_)return max_length s = 'abcdafg' sol = Solution() res = sol.lengthOfLongestSubstring(s) print('res:', res)

5,給出兩個有序的數字列表,長度分別為m,n。找到這兩個列表中的中間值。

""" 給出兩個有序的數字列表,長度分別為m,n。找到這兩個列表中的中間值。 """ class solution:def findMedianSortedArrays(self,nums1,nums2):nums3=[0]*(len(nums1)+len(nums2))l_i,r_i,i=0,0,0#兩個列表進行比較,將較小值放入新的列表while(l_i<len(nums1)) and (r_i<len(nums2)):if nums1[l_i]<nums2[r_i]:nums3[i]=nums1[l_i]l_i+=1else:nums3[i]=nums2[r_i]r_i+=1i+=1#將未遍歷完的列表加入新的列表if l_i!=len(nums1):nums3[i:]=nums1[l_i:]else:nums3[i:]=nums2[r_i:]len_3=len(nums3)if len_3%2!=0:return float(nums3[(len_3-1)//2])return (nums3[len_3//2-1]+nums3[len_3//2])/2 sol=solution()num1=[1,3,5] num2=[2,4] result=sol.findMedianSortedArrays(num1,num2) print(result)

6.將字符串?"PAYPALISHIRING"?以Z字形排列成給定的行數:

P A H N A P L S I I G Y I R

之后從左往右,逐行讀取字符:"PAHNAPLSIIGYIR"

暴力解法:

class Solution:def convert(self,s,numRows):n=numRowsres_list=[]l=len(s)if n==1:return sfor i in range(n):for j in range(l):if j%(2*n-2)==i or j%(2*n-2)==2*n-2-i:res_list.append(s[j])res=''.join(res_list)return ressol=Solution() res=sol.convert('abcdefg',3) print(res)

更好的解法,不需要遍歷整個字符串長度

class Solution:def convert(self, s, numRows):str_length=len(s)node_length=2*numRows-2result=''if str_length==0 or numRows==0 or numRows==1:return s#從第一行遍歷到最后一行for i in range(numRows):#大的改進for j in range(i,str_length,node_length):#第一行和最后一行和普通行的整列數據result+=s[j]#得到斜著部分 j-2*i+node_lengthif i!=0 and i!=numRows-1 and j-2*i+node_length<str_length:result+=s[j-2*i+node_length]return resultsol=Solution() res=sol.convert('abcdefg',3) print(res)

7. 丟失的數字

思路:和減去nums中的數,就是缺失的啦

class Solution:def missingNumber(self, nums: List[int]) -> int:n = len(nums)sum_ = n*(n+1)//2for num in nums:sum_ -= numreturn sum_

c++實現:

class Solution { public:int missingNumber(vector<int>& nums) {int n = nums.size();int sum_ = n*(n+1)/2;for(auto num: nums){sum_ -= num;}return sum_;} };

8.整數反轉

class Solution:def reverse(self, x):""":type x: int:rtype: int"""sign = [-1, 1][x > 0]res=sign*int(str(abs(x))[::-1])return res if -(2**31)<=res<=2**31-1 else 0 sol=Solution() res=sol.reverse(-123) print(res)

c++實現:

class Solution { public:int reverse(int x) {//棧int res = 0;while(x != 0){int temp = x % 10;x /=10;if(res > INT_MAX/10 || (res == INT_MAX/10 && temp > 7)) return 0;if(res < INT_MIN/10 || (res == INT_MIN/10 && temp < -8)) return 0;res = res * 10 + temp;}return res;}};

9.把字符串轉換成整數

'

思路:刪除首尾空格
判斷刪除空格后的第一個字符是否是+或者-
? ? ? ? ? ? ? ? ? ? ? ? 如果是+或者- 下一個字符必須是數字 否則返回0,是的話就一直合并到字母
? ? ? ? ? ? ? ? ? ? ? ? 如果是數字就一直合并到出現字母停止

# 刪除首尾空格 # 判斷刪除空格后的第一個字符是否是+或者-# 如果是+或者- 下一個字符必須是數字 否則返回0,是的話就一直合并到字母# 如果是數字就一直合并到出現字母停止 class Solution:def strToInt(self, str):new_str = str.strip()if len(new_str) == 0:return 0sign, start = 1, 0if new_str[0] == "-":sign = -1start = 1if new_str[0] == "+":sign = 1start = 1res = 0for c in new_str[start:]:if "0" <= c <= "9":res = 10 * res + int(c)else:breakres = sign * resif res > 2 ** 31 - 1:return 2 ** 31 - 1elif res < -2 ** 31:return -2 ** 31else:return resstr = "4193 with words" sol = Solution() res = sol.strToInt(str) print(res)

10.外觀數列

思路:核心是雙指針做聚類,只不過需要聚類的字符串需要更新,外面需要套一個for循環

python代碼:

class Solution:def countAndSay(self, n: int) -> str:#雙指針外面 套一個循環n就行pre = ""res = "1"for k in range(1, n):pre = resres = ""left, right = 0, 0while right < len(pre):while right < len(pre) and pre[left] == pre[right]:right += 1res += str(right - left) + pre[left]left = rightreturn res

c++代碼:

class Solution { public:string countAndSay(int n) { string res = "1";string s = "";for(int k = 1; k < n; k++){s = res;res = "";int left = 0, right = 0;while(right < s.size()){while(right < s.size() && s[left] == s[right]){right++;}res += to_string(right - left) + s[left];left = right;}}return res;} };

11.只出現一次的數字 III

思路1:hash

class Solution:def singleNumber(self, nums: List[int]) -> List[int]:dict_ = {}for num in nums:if num not in dict_:dict_[num] = 1else:dict_[num] -= 1res = []for key in dict_:if dict_[key] != 0:res.append(key)return res

c++:

class Solution { public:vector<int> singleNumber(vector<int>& nums) {map<int, int> dict_;for(auto num: nums){if(dict_.count(num) == 0){dict_[num] += 1;}else{dict_[num] -= 1;}}vector<int> res;map<int, int> ::iterator it;for(it = dict_.begin(); it != dict_.end(); it++){if(it->second != 0){res.push_back(it->first);}}return res;} };

思路2:因為有兩個不同的數,如果能將兩個不同的數分組開,那么異或一下自然就出來了。

class Solution { public:vector<int> singleNumber(vector<int>& nums) {//div保持的是兩位要找的數的異或 ^long div = 0;int a = 0, b = 0;for(int num : nums)div ^= num;//取最低位的1,這個1表示的是在這個bit,a與b一個為0一個為1div &= -div;for(int num : nums){ if(div & num)a ^= num;else{b ^= num;}}return {a,b};} };

12. 整數轉羅馬數字

思路:貪心算法

class Solution:def intToRoman(self, num: int) -> str:# 使用哈希表,按照從大到小順序排列dict_ = {1000:'M', 900:'CM', 500:'D', 400:'CD', 100:'C', 90:'XC', 50:'L', 40:'XL', 10:'X', 9:'IX', 5:'V', 4:'IV', 1:'I'}res = ""for key in dict_:count = num // keyif count != 0:res += count*dict_[key]num %= keyreturn res;

c++實現:

class Solution { public:string intToRoman(int num) {int value[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};string str_[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};string res;for(int i = 0; i < 13; i++){while(num >= value[i]){num -= value[i];res += str_[i];}}return res;} };

13.羅馬數字轉整數

思路:貪心算法

class Solution:def romanToInt(self, s: str) -> int:dict_ = {'M':1000,"CM":900,'D':500, "CD":400, 'C':100, "XC":90, 'L':50,"XL":40, 'X':10, "IX":9, 'V':5, "IV":4,'I':1}n = len(s)res = 0i= 0while i < n:if i < n-1 and s[i:i+2] in dict_:res += dict_[s[i:i+2]]i += 2else:res += dict_[s[i]]i += 1return res

c++實現:?

class Solution { public:int romanToInt(string s) {int value[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};string str_[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};map<string, int> dict_;int length = sizeof(value)/sizeof(value[0]);for(int i = 0; i < length; i++){dict_[str_[i]] = value[i];}int res = 0;int i = 0;int n = s.size();while(i < n){if (i < n-1 && dict_.count(s.substr(i, 2))){res += dict_[s.substr(i, 2)];i += 2;}else{res += dict_[s.substr(i, 1)];i++;}}return res;} };

14. 最長公共前綴

找最短字符串即可

class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:min_length = min([len(str_) for str_ in strs]) #最短字符串for i in range(min_length):for j in range(1, len(strs)):if strs[0][i] != strs[j][i]:return strs[0][:i]return strs[0][:min_length]

c++實現:

class Solution { public:string longestCommonPrefix(vector<string>& strs) {int min_lenth = INT_MAX;int n = strs.size();for(int i = 0; i < n; i++){int temp_ = strs[i].size();if(temp_ < min_lenth){min_lenth = temp_;}} for(int i = 0; i < min_lenth; i++){for (int j = 1; j < n; j++){if(strs[0][i] != strs[j][i]){return strs[0].substr(0, i);}}}return strs[0].substr(0, min_lenth);} };

14.三數之和

思路1: 固定兩數,尋找第三個數,兩層循環,最復雜解法,列表比較大時,時間會很長

class Solution:def threeSum(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""result=[]nums.sort()length=len(nums)for i in range(length-1):for j in range(i+1,length):if -(nums[i]+nums[j]) in nums[j+1:]:tmp=[nums[i],nums[j],-(nums[i]+nums[j])]if tmp not in result:result.append(tmp)return result

思路2: 雙指針,固定一個數,讓其余兩個數從第一個數+1和尾 向中間靠近,只需要循環一遍

# 雙指針:排好序以后,雙指針去尋找兩數之和等于第一個 class Solution:def threeSum(self, nums):nums = sorted(nums)res = []n = len(nums)print('==nums:', nums)for i in range(n):if i>0 and nums[i]==nums[i-1]:#去除相同的第一個數[-1, 0, 1, 2, -1, -4]continuestart = i + 1end = n - 1# print('==start:', start)# print('==end:', end)while start < end:if nums[i] + nums[start] + nums[end] == 0:res.append([nums[i], nums[start], nums[end]])start += 1end -= 1while start<end and nums[start]==nums[start-1]:# 首部出現連續兩個數[-2, 0, 0, 2, 2]start+=1while start<end and nums[end]==nums[end+1]:# 尾部出現連續兩個數[-2, 0, 0, 2, 2]end-=1elif (nums[i] + nums[start] + nums[end]) > 0:end -= 1else:start += 1print('==res:', res)return res# nums = [-1, 0, 1, 2, -1, -4] nums = [-2, 0, 0, 2, 2] sol = Solution() sol.threeSum(nums)

十五:最接近的三數之和

固定一個數,讓其余兩個數從首,尾 向中間靠近,只需要循環一遍

class Solution:def threeSumClosest(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""nums.sort()length=len(nums)res=[]for i,num in enumerate(nums[0:-2]):l,r=i+1,length-1if num+nums[r]+nums[r-1]<target:#從右邊遍歷res.append(num+nums[r]+nums[r-1])elif num+nums[l]+nums[l+1]>target:#從左邊遍歷res.append(num + nums[l] + nums[l+1])else:while l<r:#左邊索引小于右邊時,遍歷res.append(num + nums[l] + nums[r])if num+nums[l]+nums[r]<target:l+=1elif num+nums[l]+nums[r]>target:r-=1else:return targetres.sort(key=lambda x:abs(x-target))return res[0]nums = [-1,2,1,-4] target = 1. sol=Solution() result=sol.threeSumClosest(nums,target) print(result)

16.給定一個僅包含數字?2-9?的字符串,返回所有它能表示的字母組合。

給出數字到字母的映射如下(與電話按鍵相同)。注意 1 不對應任何字母。

https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/description/

輸入:"23" 輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. class Solution:def letterCombinations(self, digits):""":type digits: str:rtype: List[str]"""if not digits: return []#建立字典table={'2':['a','b','c'],'3':['d','e','f'],'4':['g','h','i'],'5':['j','k','l'],'6':['m','n','o'],'7':['p','q','r','s'],'8':['t','u','v'],'9':['w','x','y','z']}result=['']for digit in digits:str_list=[]for char_single in table[digit]:str_list+=[x+char_single for x in result]print(str_list)#result存儲前一個數對應的字母result=str_listreturn result

17.Pow(x, n)

思路:一層一層遞歸 超時

class Solution:def myPow(self, x: float, n: int) -> float:if n == 0:return 1if n == 1:return xif n > 0:return x*self.myPow(x, n-1)else:return 1/(x*self.myPow(x, abs(n)-1))

思路:快速冪

class Solution:def help(self, x, n):if n == 0:return 1temp = self.myPow(x, n//2)if n % 2 == 0:return temp*tempelse:return x*(temp*temp)def 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 long n){if(n == 0){return 1.;}double temp = help(x, n / 2);if (n % 2){return x*(temp*temp);}else{return temp*temp;}}double myPow(double x, int n) {long long N = n;if(n > 0){return help(x, N);}else{return 1. / help(x, -N);}} };

18:螺旋矩陣

思路:循環打印

class Solution:def help(self, x1, x2, y1, y2, matrix):for i in range(x1, x2 + 1):self.res.append(matrix[y1][i]) #1, 2, 3for i in range(y1 + 1, y2 + 1):self.res.append(matrix[i][x2]) #6, 9if x1 < x2 and y1 < y2:for i in range(x2 - 1, x1, -1):self.res.append(matrix[y2][i]) #8for i in range(y2, y1, -1):self.res.append(matrix[i][x1]) #7, 4def spiralOrder(self, matrix: List[List[int]]) -> List[int]:self.res = []x1, y1, x2, y2 = 0, 0, len(matrix[0]) - 1, len(matrix) - 1while(x1 <= x2 and y1 <= y2):self.help(x1, x2, y1, y2, matrix)x1 += 1y1 += 1x2 -= 1 y2 -= 1return self.res

c++實現:

class Solution { public:vector<int> res;void help(int x1, int y1, int x2, int y2, vector<vector<int>>& matrix){for(int i = x1; i < x2 + 1; i++){res.push_back(matrix[y1][i]); //1, 2, 3}for(int i = y1 + 1; i < y2 + 1; i++){res.push_back(matrix[i][x2]); //6, 9}if(x2 > x1 && y2 > y1){for(int i = x2 - 1; i > x1 ; i--){res.push_back(matrix[y2][i]); //8}for(int i = y2; i > y1 ; i--){res.push_back(matrix[i][x1]); //7,4}} }vector<int> spiralOrder(vector<vector<int>>& matrix) {int x1 = 0, y1 = 0, x2 = matrix[0].size() - 1, y2 = matrix.size() - 1;while(x1 <= x2 && y1 <= y2){help(x1, y1, x2, y2, matrix);x1++;y1++;x2--;y2--;}return res;} };

20-1.用棧實現隊列

思路:就是將先進后出換成先進先出,這樣的話在出隊列的時候,需要將棧A除去棧底的元素給棧B,在彈出A中元素,在把棧B給A,一直循環保持棧A只有一個元素

python代碼:

class MyQueue:def __init__(self):"""Initialize your data structure here."""self.stack_A = []self.stack_B = []def push(self, x: int) -> None:"""Push element x to the back of queue."""self.stack_A.append(x)def pop(self) -> int:"""Removes the element from in front of queue and returns that element."""while len(self.stack_A)>1:self.stack_B.append(self.stack_A.pop())value = self.stack_A.pop()while len(self.stack_B):self.stack_A.append(self.stack_B.pop())return valuedef peek(self) -> int:"""Get the front element."""if len(self.stack_A):return self.stack_A[0]else:return Nonedef empty(self) -> bool:"""Returns whether the queue is empty."""if len(self.stack_A):return Falseelse:return True# Your MyQueue object will be instantiated and called as such: # obj = MyQueue() # obj.push(x) # param_2 = obj.pop() # param_3 = obj.peek() # param_4 = obj.empty()

c++:

#include <map> #include <vector> #include <iostream> #include <string> #include <algorithm> #include <limits.h> #include <math.h> #include <stack>class MyQueue { public:stack<int> stack_A;stack<int> stack_B;/** Initialize your data structure here. */MyQueue() {} /** Push element x to the back of queue. */void push(int x) {stack_A.push(x);} /** Removes the element from in front of queue and returns that element. */int pop() {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;} /** Get the front element. */int peek() {int res = pop();stack_B.push(res);return res;} /** Returns whether the queue is empty. */bool empty() {return stack_A.empty() && stack_B.empty();} };int main() {MyQueue* obj = new MyQueue();int x=1;obj->push(x);x=2;obj->push(x);x=3;obj->push(x);int param_2 = obj->pop();cout<<"param_2:"<<param_2<<endl;int param_3 = obj->peek();cout<<param_3<<endl;bool param_4 = obj->empty();cout<<param_4<<endl;delete obj;obj=NULL;return 0; }

20-2.用隊列實現棧

思路:就是將先進先出換成先進后出,這樣的話在出棧的時候,需要將隊列A除去隊尾的元素給隊列B,在彈出A中元素,在把隊列B給A,一直循環保持隊列A只有一個元素

python代碼:

class MyStack:def __init__(self):"""Initialize your data structure here."""self.quene_A = []self.quene_B = []def push(self, x):"""Push element x onto stack."""self.quene_A.append(x)def pop(self):"""Removes the element on top of the stack and returns that element."""if len(self.quene_A)==0:return Nonewhile len(self.quene_A)>1:self.quene_B.append(self.quene_A.pop(0))value = self.quene_A.pop()self.quene_A=self.quene_Bself.quene_B =[]return valuedef top(self):"""Get the top element."""if len(self.quene_A) == 0:return Nonereturn self.quene_A[-1]def empty(self):"""Returns whether the stack is empty."""if len(self.quene_A):return Trueelse:return False # Your MyStack object will be instantiated and called as such: obj = MyStack() obj.push(1) obj.push(2) obj.push(3) param_2 = obj.pop() print('==param_2:', param_2) param_3 = obj.top() print('==param_3:', param_3) param_4 = obj.empty() print('=param_4:', param_4)

c++:

#include <map> #include <vector> #include <iostream> #include <string> #include <algorithm> #include <limits.h> #include <math.h>class MyStack { public:queue<int> queue_A;queue<int> queue_B;/** Initialize your data structure here. */MyStack() {}/** Push element x onto stack. */void push(int x) {queue_A.push(x);}/** Removes the element on top of the stack and returns that element. */int pop() {int length = queue_A.size();cout<<length<<endl;while (length>1)//讓A中只有一個元素{ length--;queue_B.push(queue_A.front());queue_A.pop();}int res = queue_A.front();//彈出的A就是棧頂元素queue_A.pop();queue_A = queue_B;while (!queue_B.empty()){queue_B.pop();}return res;}/** Get the top element. */int top() {return queue_A.back();}/** Returns whether the stack is empty. */bool empty() {return queue_A.empty();} };int main() {MyStack* obj = new MyStack();int x=1;obj->push(x);x=2;obj->push(x);x=3;obj->push(x);int param_2 = obj->pop();cout<<"param_2:"<<param_2<<endl;int param_3 = obj->top();cout<<param_3<<endl;bool param_4 = obj->empty();cout<<param_4<<endl;delete obj;obj=NULL;return 0; }

二十一,實現最大子列和問題

時間復雜度O(N)

class Solution:def maxSubArray(self, nums):for i in range(1,len(nums)):nums[i]+=max(nums[i-1],0)print('==nums:', nums)return max(nums) sol =Solution() # nums =[-1] nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4] res = sol.maxSubArray(nums) print('res:',res)

二十二,利用鏈表實現多項式加法

解題思路


存儲方式可以采用鏈表存儲和數組存儲,為了熟悉鏈式操作,所以采用鏈表存儲。其中指針定義的格式如下所示

class Node:def __init__(self, coef, exp):self.coef = coefself.exp = expself.next = Nonedef get_data(self):return [self.coef, self.exp]class List:def __init__(self, head):self.head = head# 添加節點def addNode(self, node):temp = self.headwhile temp.next is not None:temp = temp.nexttemp.next = node# 打印def printLink(self, head):res = []while head is not None:res.append(head.get_data())head = head.nextreturn resdef adds(l1, l2): # l1,l2為鏈表,且不為空p1 = l1.headp2 = l2.headaddRes = []while (p1 is not None) and (p2 is not None):tmp1_exp = p1.get_data()[1]tmp2_exp = p2.get_data()[1]# 當指數相同時,系數相加if tmp1_exp == tmp2_exp:addRes.append([p1.get_data()[0] + p2.get_data()[0], p1.get_data()[1]])p1 = p1.nextp2 = p2.nextif tmp1_exp > tmp2_exp:addRes.append([p1.get_data()[0], p1.get_data()[1]])p1 = p1.nextif tmp1_exp < tmp2_exp:addRes.append([p2.get_data()[0], p2.get_data()[1]])p2 = p2.nextwhile p1 is not None:addRes.append([p1.get_data()[0], p1.get_data()[1]])p1 = p1.nextwhile p2 is not None:addRes.append([p2.get_data()[0], p2.get_data()[1]])p2 = p2.nextres1 = []for item in addRes:if item[0] != 0:res1.append(item[0])res1.append(item[1])if len(res1) == 0:return [0, 0]return res1def muls(l1, l2):p1 = l1.headp2 = l2.headmulRes = []while p1 is not None:tmp1 = p1.get_data()while p2 is not None:tmp2 = p2.get_data()mulRes.append([tmp1[0] * tmp2[0], tmp1[1] + tmp2[1]])p2 = p2.nextp2 = l2.headp1 = p1.nextexps = []for item in mulRes:if item[1] not in exps:exps.append(item[1])d = {}for item in mulRes:if item[1] not in d.keys():d[item[1]] = 0d[item[1]] += item[0]d = sorted(d.items(), key=lambda x: x[0], reverse=True)res2 = []for item in d:# 如果多項式中出現抵消,即系數為0需要刪除if item[1] != 0:res2.append(item[1])res2.append(item[0])# 如果最后出現空數組需要輸出0 0if len(res2) == 0:return [0, 0]return res2def print_list(x):for i in x[:-1]:print(i, end=' ')print(x[-1], end='')# 輸入 # a1 = list(map(int, input().split())) # a2 = list(map(int, input().split())) a1=[4,3,4,-5,2,6,1,-2,0] a2=[3,5,20,-7,4,3,1]# 變為鏈表 if a1[0] != 0:head1 = Node(a1[1], a1[2])l1 = List(head1)if a1[0] > 1:for i in range(a1[0] - 1):node = Node(a1[i * 2 + 3], a1[i * 2 + 4])l1.addNode(node)if a2[0] != 0:head2 = Node(a2[1], a2[2])l2 = List(head2)if a2[0] > 1:for i in range(a2[0] - 1):node = Node(a2[i * 2 + 3], a2[i * 2 + 4])l2.addNode(node) # 考慮鏈表長度進行運算 if len(a1) == 1 and len(a2) == 1: # 都為0,則輸出都為0print_list([0, 0])print()print_list([0, 0]) elif len(a1) == 1 and len(a2) > 1: # 一個為0,另一個為多項式print_list([0, 0])print()print_list(a2[1:]) elif len(a2) == 1 and len(a1) > 1:print_list([0, 0])print()print_list(a1[1:]) else: # 都為多項式# print_list(muls(l1, l2))# print()print_list(adds(l1, l2))

23-1.滑動窗口中位數

#滑動窗口 雙指針 class Solution:def medianSlidingWindow(self, nums, k):left, right = 0, 0length = len(nums)res = []while right + k <= length:part_num = sorted(nums[left:right + k])print('==part_num:', part_num)if k % 2 == 1: # 奇數res.append(part_num[k // 2])else:res.append((part_num[k // 2] + part_num[k // 2 - 1]) / 2)left += 1right += 1print(res)return resnums = [1, 3, -1, -3, 5, 3, 6, 7] k = 3 sol = Solution() sol.medianSlidingWindow(nums, k)

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

答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。

1.?

class Solution(object):def numWays(self, n):""":type n: int:rtype: int"""if n==0:return 1if 1<=n<3:return ndp = [0]*(n+1)dp[1],dp[2] = 1,2for i in range(3, n+1):dp[i] = dp[i-1]+dp[i-2]return dp[-1]%(1000000007)

2.

class Solution(object):def climbStairs(self, n):""":type n: int:rtype: int"""i=1j=2for _ in range(3,n):i,j=j,i+jreturn i+j if n>2 else n

24-2.使用最小花費爬樓梯

class Solution:def minCostClimbingStairs(self, cost):dp = [0]*len(cost)dp[0],dp[1] =cost[0],cost[1]for i in range(2,len(cost)):dp[i] = min(dp[i-1],dp[i-2])+cost[i]print(dp)return min(dp[-1],dp[-2])sol =Solution() cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] sol.minCostClimbingStairs(cost)

c++:

class Solution { public:int minCostClimbingStairs(vector<int>& cost) {int n = cost.size();vector<int> dp(n, 0);dp[0] = cost[0];dp[1] = cost[1];for(int i=2; i<n; i++){dp[i] = min(dp[i-1], dp[i-2]) + cost[i];}return min(dp[n-1], dp[n-2]);} };

二十五:#一個四位數,如1024,1004,打印出他們的中文形式,如果一千零二十四,一千零四

a=9002 number_key={'0':'零','1':'一','2':'二','3':'三','4':'四','5':'五','6':'六','7':'七','8':'八','9':'九'} c='' if a%1000:for i,_ in enumerate(str(a)):while(i==0):c+=number_key[str(a)[i]]+'千'breakwhile(i==1):if str(a)[i]=='0' and str(a)[i]==str(a)[i+1]:c+=number_key[str(a)[i]]breakif str(a)[i]=='0' and str(a)[i]!=str(a)[i+1]:c+=number_key[str(a)[i]]+number_key[str(a)[i+1]]+'十'breakif str(a)[i] !='0' and str(a)[i+1]=='0':c+=number_key[str(a)[i]]+'百'breakelse:c+=number_key[str(a)[i]]+'百'+number_key[str(a)[i+1]]+'十'breakwhile(i==3):if str(a)[i]=='0':breakelse:c += number_key[str(a)[i]]break else:c+=number_key[str(a)[0]]+'千' print(c)

二十六:#找一串最長字符串 不含數字

#找一串最長字符串 不含數字 str1 = "abc123abcd234abcdefgha324adsdawqdasdaseqqwe345abchded"#第一種解法 #空間換時間做法 O(n) all_count=[] count='' flag=0 for i in str1:if i.isdigit():flag=1if len(count):all_count.append(count)count=''else:flag=0count+=iprint(all_count) num=[len(i) for i in all_count] print(all_count[num.index(max(num))])

二十七:# 給定一行字符串,求出這行字符串中出現頻率最高的字符,字符串中含有標點符號, # 字符不區分大小寫。如果出現頻率相同時,輸出先出現在字符串中的字符。

s='AbAdefg ahigkl Mnopq rstu o v wBBBBBB!'a={s[0]:1} for i in s[1:]:if i !=' ':if i in a:a[i]+=1else:a[i]=1print(a)print(a.items()) #a.items() 將dict變成list b=sorted(a.items(),key=lambda x:x[1]) print(b) print(b[-1][0]) print(b[-1][1])

二十八:#給出一個字符串,然后計算字符串中數字的和,

s=input() # s='ssddd-12jijij-12hi-12' a='' for i in s:if i.isdigit() or i=='-':a+=ielse:a+='+' print(a)if '-' in a:print(eval(a)) else:print(int(a))

eval知識補充:

x = 7 print(eval( '3 * x' )) print(eval('2 +++- 2'))

二十九:#有一對奶牛,從出生后的第四年開始生小牛,每次生一對小牛, # 問現在有m對小牛,在第n年后有多少奶牛?

def cal(n):if n==None:return Noneif n<=3:return 1else:return cal(n-3)+cal(n-1) #上一年的牛 + 今年出生的牛n=4 m=2 print(cal(n))

三十:漁夫捕魚

# A、B、C、D、E五人在某天夜里合伙捕魚 最后疲憊不堪各自睡覺

# 第二天A第一個醒來 他將魚分為5份 扔掉多余的1條 拿走自己的一份

# B第二個醒來 也將魚分為5份 扔掉多余的1條 拿走自己的一份

# 然后C、D、E依次醒來也按同樣的方式分魚 問他們至少捕了多少條魚

total=6 while True:enough=Truesingle_fish=totalfor person in range(5):if (single_fish -1) % 5==0:print('before single_fish=', single_fish)single_fish=(single_fish-1)//5*4print('after single_fish=', single_fish)else:enough=Falsebreakif enough:print('total=', total)breaktotal+=5

32.刪除排序數組中的重復項

class Solution:def removeDuplicates(self, nums):# temp=0# n = len(nums)# for i in range(1,n):# if nums[i]==nums[i-1]:# temp+=1# return n-tempj = 0for i in range(1, len(nums)):if nums[i] != nums[j]:j += 1nums[j] = nums[i]print(nums)return j + 1nums = [1, 1, 2] sol = Solution() res = sol.removeDuplicates(nums) print('==res:', res)

三十三.給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素最多出現兩次,返回移除后數組的新長度。給定 nums = [1,1,1,2,2,3],函數應返回新長度 length = 5, 并且原數組的前五個元素被修改為 1, 1, 2, 2,3

nums = [1,1,1,2,2,3,3,3,4]class Solution(object):def removeDuplicates(self, nums):""":type nums: List[int]:rtype: int"""if len(nums)<=2:return len(nums)k=2for i in range(k,len(nums)):if nums[i]!=nums[k-1] or nums[i]!=nums[k-2]:nums[k]=nums[i]k+=1return ksol=Solution() k=sol.removeDuplicates(nums) print(k) print(nums[:k])

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

nums = [5,7,7,8,8,10] target = 8 def solution(nums,target):a=[]#O(N)時間復雜度for i in range(len(nums)):if target==nums[i]:a.append(i)if len(a)==0:a=[-1,-1]return a res=solution(nums,target) print('res=',res)#O(log(N))時間復雜度 雙指針查找 def solution(nums,target):low=0high=len(nums)-1while(low<=high):if target==nums[low] and target==nums[high]:return [low,high]elif target!=nums[low]:low+=1elif target!=nums[high]:high-=1return [-1,-1] res=solution(nums,target) print('res=',res)

三十五:給定一個排序數組和一個目標值,在數組中找到目標值,并返回其索引。如果目標值不存在于數組中,返回它將會被按順序插入的位置。你可以假設數組中無重復元素。

示例 1:

輸入: [1,3,5,6], 5
輸出: 2

#時間復雜度O(log(N)) nums=[3,4,5,6,7] target=9 def searchInsert(nums, target):low=0high=len(nums)while(low<high):mid = low + (high - low) // 2# print('mid:',mid)if nums[mid]>target or nums[mid]==target:high=midelse:low=mid+1return lowres=searchInsert(nums,target) print('res:',res)#O(N)時間復雜度 nums=[3,4,5,6,7] target=1 def searchInsert(nums, target):for i in range(len(nums)):if nums[i]>target:return iif nums[i]==target:return ireturn len(nums)res=searchInsert(nums,target) print('res:',res)

三十六.給定一個無重復元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字

candidates = [2,3,6,7] target = 7 所求解集為: [[7],[2,2,3] ] # #給定一個無重復元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合 candidates = [2,4,6] target = 7def combinationSum(candidates, target):results=[]for i,num in enumerate(candidates):if target==num:results.append([num])elif num<target:print('num:',num)result_son=combinationSum(candidates[i:],target-num)print('result_son:',result_son)for result in result_son:result.append(num)results.append(result)return resultsres=combinationSum(candidates,target) print('res:',res)

三十七.給定一個數組?candidates?和一個目標數?target?,找出?candidates?中所有可以使數字和為?target?的組合。candidates?中的每個數字在每個組合中只能使用一次。

candidates = [8,10] target = 8 class Solution:def combinationSum2(self, candidates, target):candidates.sort()print('candidates:',candidates)res=[]self.addsort(candidates,target,res,[])return resdef addsort(self,candidates,target,res,cur):for i in range(len(candidates)):if target==candidates[i]:if cur+[candidates[i]] not in res:res.append(cur+[candidates[i]])print('res:',res)elif candidates[i]>target:returnelse:self.addsort(candidates[i+1:],target-candidates[i],res,cur+[candidates[i]])solv=Solution() res=solv.combinationSum2(candidates,target) print('res:',res)

三十八.合并矩形框算法

class Solution:def merge(self, intervals,threshold):# intervals.sort(key=lambda x: x[0])# print(intervals)merged = []for interval in intervals:# print('interval:',interval)#x2減去下一個框的x1if not merged or abs(merged[-1][2]-interval[0]) <threshold :if len(merged):merged[-1][-2:] = interval[-2:]else:merged.append(interval)else:merged.append(interval)print('merged:',merged)return merged# a=[[1,3],[2,6],[12,10],[15,18]] import numpy as np import cv2 points=np.array([[0,0,20,20],[30,0,20,50],[90,0,70,20],[220,0,200,200],[240,0,220,200],[250,230,260,280]]) img=np.zeros((500,500)) #before merge for point in points:x1,y1,x2,y2=pointcv2.rectangle(img,(x1,y1),(x2,y2),color=(255,255,255),thickness=1) cv2.imwrite('img_before.jpg',img)#after merge sol=Solution() res=sol.merge(points,threshold=100) print(res) #before merge # for point in res: # x1,y1,x2,y2=point # cv2.rectangle(img,(x1,y1),(x2,y2),color=(255,255,255),thickness=1) # cv2.imwrite('img_after.jpg',img)

三十九.求眾數

class Solution(object):def majorityElement(self, nums):""":type nums: List[int]:rtype: int"""res={}for num in nums:if num not in res:res[num]=1else:res[num]+=1index=sorted(res,key=lambda i:res[i])return index[-1]a=[1,1,1,2,2,3,3,3,3,3] sol=Solution() res=sol.majorityElement(a) print('res:',res)

四十.缺失的第一個正數

class Solution(object):def firstMissingPositive(self, nums):""":type nums: List[int]:rtype: int"""num=1for i in range(len(nums)):if num in nums:num+=1return numa=[1,2,3,-1] sol=Solution() res=sol.firstMissingPositive(a) print('res:',res)

四十二.牛頓法開跟號

class Solution(object):def mySqrt(self, a):""":type x: int:rtype: int"""x0=awhile x0*x0>a:x0=(x0*x0+a)/(2*x0)return int(x0)sol=Solution() x=5 res=sol.mySqrt(x) print('res:',res)

四十三.堆棧實現加減乘除(逆波蘭表達式求值)

class Solution(object):def evalRPN(self, tokens):""":type tokens: List[str]:rtype: int"""stack = []cal = {"+" : lambda x,y :x+y, "-" : lambda x,y : x-y, "*" : lambda x,y : x*y, "/" : lambda x,y : int(x/y)}for i in tokens:print('stack:',stack)if i not in ["+","-","*","/"]:stack.append(int(i))else:b = stack.pop()a = stack.pop()stack.append(cal[i](a,b))return stack[0]a=["10","6","9","3","+","-11","*","/","*","17","+","5","+"] sol=Solution() res=sol.evalRPN(a) print('res:',res)

四十五.給定一個字符串,逐個翻轉字符串中的每個單詞。

輸入: " ?hello world! ?" 輸出:?"world! hello" class Solution(object):def reverseWords(self, s):""":type s: str:rtype: str"""return " ".join(s.split()[::-1])

49.給定兩個數組,編寫一個函數來計算它們的交集。

class Solution(object):def intersection(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: List[int]"""inter = set(nums1) & set(nums2)res = []for i in inter:res += [i] * min(nums1.count(i), nums2.count(i))return resnums1 = [1,2,3,2,1] nums2 = [2,3,2] sol=Solution() res=sol.intersection(nums1,nums2) print('res:', res)

五十.給定一個包含紅色、白色和藍色,一共?n 個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,并按照紅色、白色、藍色順序排列。此題中,我們使用整數 0、?1 和 2 分別表示紅色、白色和藍色

https://leetcode-cn.com/problems/sort-colors/

利用三指針,(p0, p2 和curr)來分別追蹤0的最右邊界,2的最左邊界和當前考慮的元素。

class Solution(object):def sortColors(self, nums):""":type nums: List[int]:rtype: None Do not return anything, modify nums in-place instead."""p0=0curr=0p2=len(nums)-1while curr<=p2:if nums[curr]==0:nums[p0],nums[curr]=nums[curr],nums[p0]p0+=1curr+=1elif nums[curr]==1:curr += 1else:#nums[curr]==2nums[p2],nums[curr] = nums[curr],nums[p2]p2 -= 1print(nums)return numsnums=[2,0,2,1,1,0] sol=Solution() sol.sortColors(nums)

51.驗證回文字符串

解法1:雙指針

class Solution(object):def isPalindrome(self, s):""":type s: str:rtype: bool"""i = 0j = len(s)-1while i<j:while i < len(s) and not s[i].isalnum():i += 1while j>=0 and not s[j].isalnum():j-=1#多個符號時 i跳得太多if i>j:return Trueif s[i].upper()!=s[j].upper():return Falseelse:i+=1j-=1#while外面自然是i>=jreturn Trues= "" sol = Solution() res = sol.isPalindrome(s) print('res:',res)

解法2:

class Solution(object):def isPalindrome(self, s):""":type s: str:rtype: bool"""s = ''.join(list(filter(str.isalnum,s))).lower()print('s:',s)return s==s[::-1]

五十二,驗證回文串2,字符串只包含從 a-z 的小寫字母。字符串的最大長度是50000。

https://leetcode-cn.com/problems/valid-palindrome-ii/

class Solution(object):def validPalindrome(self, s):""":type s: str:rtype: bool"""if s==s[::-1]:return Truel=0r=len(s)-1while l<r:if s[l]==s[r]:l+=1r-=1else:part1=s[l+1:r+1]part2=s[l:r]# print('part1',part1)# print('part2',part2)return part1 == part1[::-1] or part2 == part2[::-1]s= "abca" sol = Solution() res = sol.validPalindrome(s) print('res:',res)

五十三.漢諾他問題

如果只有一個A直接給C,當大與1個時,將n-1暫時給B,剩下的最大的給C,然后再將n-1給C.

def hannota(n,A,B,C):if n==1:print(A+'->'+C)else:hannota(n - 1,A,C,B)print(A + '->' + C)hannota(n - 1, B, A, C)if __name__ == '__main__':n=2A='A'B='B'C='C'hannota(n,A,B,C)

五十四.有效的數獨 要求:行 ,列和3x3只能出現一個數字一次

https://leetcode-cn.com/problems/valid-sudoku/

class Solution(object):def isValidSudoku(self, board):""":type board: List[List[str]]:rtype: bool"""# init datarows = [{} for i in range(9)]columns = [{} for i in range(9)]boxes = [{} for i in range(9)]# print(rows)# print(rows[2].get(3, 0))rows[2][3]=rows[2].get(3, 0)# print(rows)for i in range(9):for j in range(9):num = board[i][j]if num != '.':num = int(num)box_index = (i // 3) * 3 + j // 3# keep the current cell valuerows[i][num] = rows[i].get(num,0) + 1columns[j][num] = columns[j].get(num,0)+1boxes[box_index][num]=boxes[box_index].get(num,0)+1if rows[i][num]>1 or columns[j][num]>1 or boxes[box_index][num]>1:return Falsereturn Trueboard=[["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"] ] sol = Solution() res = sol.isValidSudoku(board) print('res:') print(res)

五十五.給定一個整數數組和一個整數?k,判斷數組中是否存在兩個不同的索引?i?和?j,使得?nums [i] = nums [j],并且 i 和 j?的差的絕對值最大為 k。

https://leetcode-cn.com/problems/contains-duplicate-ii/

class Solution:def containsNearbyDuplicate(self, nums, k):""":type nums: List[int]:type k: int:rtype: bool"""nums_len = len(nums)if nums_len <= 1:return False#key存放列表值,value存放位置索引nums_dict = {}for i in range(nums_len):print(nums_dict)if nums[i] in nums_dict:if i-nums_dict[nums[i]] <= k:return Truenums_dict[nums[i]] = ireturn Falsenums = [1,2,3,1] k = 3 sol = Solution() res = sol.containsNearbyDuplicate(nums,k) print('res:') print(res)

五十六.長度最小的子數組

思路:雙指針  滑動窗口

class Solution:def minSubArrayLen(self, s, nums):i = 0j = 0ans = float('inf')while j < len(nums):# 向右滑動 直到大于sif sum(nums[i:j + 1]) < s:# Sum=sum(nums[begin:right])j += 1# 找到滑窗之和大于s的地方else:# 當前長度若是小于之前的 則更新if j - i < ans:ans = j - i + 1i += 1return 0 if ans == float('inf') else anss = 7 nums = [2,3,1,2,4,3] sol = Solution() res = sol.minSubArrayLen(s, nums) print('==res:', res)

五十七.滑動窗口找到長度最長的子數組? <=4 [3,1,2,1]? 最長為[1,2,1]

class Solution(object):def minSubArrayLen(self, s, nums):""":type s: int:type nums: List[int]:rtype: int"""final_begin=0final_end=0begin=0right=0ans=0#float('inf')while right<len(nums):# print('begin:', begin)# print('right:', right)# print(nums[begin:right+1])#向右滑動 直到大于sif sum(nums[begin:right+1]) <= s:# Sum=sum(nums[begin:right])right+=1# 當前長度若是大于之前的 則更新if right-begin>ans:ans = right-begin +1final_begin=beginfinal_end=right#找到滑窗之和大于s的地方else:begin+=1print('final_begin:',final_begin)print('final_end:',final_end)print(nums[final_begin:final_end+1])return 0 if ans==float('inf') else anss = 4 nums = [3,1,2,1] # s = 3 # nums = [1,1] sol=Solution() res=sol.minSubArrayLen(s,nums) print('res:',res)

五十九.將矩陣存在0的行列都置零

https://leetcode-cn.com/problems/set-matrix-zeroes

import numpy as npclass Solution(object):def setZeroes(self, matrix):""":type matrix: List[List[int]]:rtype: None Do not return anything, modify matrix in-place instead."""print(np.array(matrix))# matrix=np.array(matrix)is_col=False#記錄為0的索引,并此處的行頭和獵頭置為零for i in range(len(matrix)):if matrix[i][0]==0:is_col=Truefor j in range(1,len(matrix[0])):# print(matrix[i][j])if matrix[i][j]==0:matrix[0][j] = 0matrix[i][0] = 0# breakprint(np.array(matrix))for i in range(1,len(matrix)):for j in range(1,len(matrix[0])):if not matrix[i][0] or not matrix[0][j]:matrix[i][j]=0print(np.array(matrix))# 對第一個數存在0將這一列置為0print(np.array(matrix))if matrix[0][0] == 0:for j in range(len(matrix[0])):matrix[0][j] = 0#對第一列存在0將整列置零if is_col:for i in range(len(matrix)):matrix[i][0]=0print(np.array(matrix))return matrix# matrix = [[1,1,1], # [1,0,1], # [1,1,1]] # matrix=[[0,1,2,0], # [3,4,5,2], # [1,3,1,5]] matrix=[[1,1,1],[0,1,2]] sol=Solution() res=sol.setZeroes(matrix) print('res:',res)

六十.給定一個包含?n 個整數的數組?nums?和一個目標值?target,判斷?nums?中是否存在四個元素 a,b,c?和 d?,使得?a + b + c + d?的值與?target?相等?找出所有滿足條件且不重復的四元組。

https://leetcode-cn.com/problems/4sum/

class Solution(object):def fourSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[List[int]]"""nums.sort()# print('nums:',nums)ans = set()for i in range(len(nums)-3):#第一層循環到達三個數之前for j in range(i+1,len(nums)-2):#最后兩個數需要固定left=j+1 #左指針right=len(nums)-1 #右指針while(right>left):temp=nums[i]+nums[j]+nums[left]+nums[right]if temp==target:ans.add((nums[i],nums[j],nums[left],nums[right]))left+=1right-=1elif temp>target:right-=1else:left+=1# print('ans:',ans)ans = sorted(ans)res=[]for i in ans:res.append(i)# print('res:',res)return resnums = [-3,-2,-1,0,0,1,2,3] target = 0 sol=Solution() res=sol.fourSum(nums, target) print('res:',res)

61.無重復字符的最長子串

思路1滑動窗口:

class Solution:def lengthOfLongestSubstring(self, s):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 += 1right += 1res = max(right - left, res)print('==res:', res)return ress = "abcabcbb" sol = Solution() sol.lengthOfLongestSubstring(s)

思路2.hash

class Solution:def lengthOfLongestSubstring(self, s: str) -> int:occ = set()n = len(s)# 右指針,初始值為 -1,相當于我們在字符串的左邊界的左側,還沒有開始移動start, ans = -1, 0for i in range(n):# print('===occ:', occ)if i != 0:# 左指針向右移動一格,移除一個字符occ.remove(s[i - 1])while start + 1 < n and s[start + 1] not in occ:# 不斷地移動右指針occ.add(s[start + 1])start += 1# 第 i 到 rk 個字符是一個極長的無重復字符子串ans = max(ans, start - i + 1)return ans

六十二.串聯所有單詞的子串

給定一個字符串s和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。

注意子串要與 words 中的單詞完全匹配,中間不能有其他字符,但不需要考慮 words 中單詞串聯的順序。

#通過滑動去裁剪主串得到子串,然后子串與需要匹配的字符串數組去統計出現的個數,個數相等即找到 class Solution:def findSubstring(self, s, words):from collections import Counterif not s or not words:return []all_len = len(''.join(words))print('==all_len:', all_len)n = len(s)words = Counter(words)print('==words', words)res = []for i in range(0, n-all_len+1):temp = s[i:i+all_len]# print(temp)c_temp=[]for j in range(0, all_len,all_len//len(words)):c_temp.append(temp[j:j+all_len//len(words)])# print(c_temp)if Counter(c_temp)==words:res.append(i)# print('res:', res)return resif __name__ == '__main__':solution = Solution()# s = "abc"# words = ["a"]s = "barfoothefoobarman"words = ["foo", "bar"]res = solution.findSubstring(s, words)print('res:', res)

六十三.給你一個字符串 S、一個字符串 T,請在字符串 S 里面找出:包含 T 所有字母的最小子串。

輸入: S = "ADOBECODEBANC", T = "ABC" 輸出: "BANC"

雙指針法:

from collections import Counterdef minWindow(s, t):""":type s: str:type t: str:rtype: str"""if not t or not s:return ""dict_t = Counter(t)print('==dict_t:', dict_t)required = len(dict_t)l, r = 0, 0formed = 0window_counts = {}# ans tuple of the form (window length, left, right)ans = float("inf"), None, Nonewhile r < len(s):character = s[r]window_counts[character] = window_counts.get(character, 0) + 1print('==window_counts:', window_counts)#s = "ABAACBAB"#t = "ABC"#相等的話就加1if character in dict_t and window_counts[character] == dict_t[character]:formed += 1#找到滿足要求的 進行存儲while l <= r and formed == required:character = s[l]print('==character:', character)# Save the smallest window until now.if r - l + 1 < ans[0]:ans = (r - l + 1, l, r)#window_counts[character] -= 1#左指針向右移動 出現不符合的就減一if character in dict_t and window_counts[character] < dict_t[character]:formed -= 1#移動左指針l += 1#右指針移動r += 1return "" if ans[0] == float("inf") else s[ans[1]:ans[2] + 1]S = "ABAACBAB" T = "ABC" res = minWindow(S, T) print('res:', res)

六十四.替換子串得到平衡字符串

有一個只含有'Q',?'W',?'E','R'四種字符,且長度為?n的字符串。假如在該字符串中,這四個字符都恰好出現n/4次,那么它就是一個「平衡字符串」。

輸入:s = "QQWE" 輸出:1 解釋:我們需要把一個 'Q' 替換成 'R',這樣得到的 "RQWE" (或 "QRWE") 是平衡的。 import collections class Solution(object):def balancedString(self, s):"""python版本:type s: str:rtype: int"""cnt = collections.Counter(s)res = n = len(s)left, avg = 0, n//4for right, c in enumerate(s):# print('c:', c)#一直進行字符減操作cnt[c] -= 1print('cnt:', cnt)#直到n//4大于單個字符的個數 說明右邊界找到 在對左邊界進行右移 找最小的長度while left < n and all(avg >= cnt[x] for x in 'QWER'):res = min(res, right - left + 1)print('res:', res)cnt[s[left]] += 1print('==cnt:', cnt)left += 1print('res:', res)return ressol = Solution()s = 'WQWRQQQW' sol.balancedString(s)

六十八.不鄰接植花

圖著色問題?

# 1、構建鄰接矩陣; # 2、將1的顏色置為1,從2開始遍歷鄰接矩陣; # 3、每一次遍歷,新建一個顏色集合([1,2,3,4]),取出key對應的花園代號,遍歷代號。 # 如果該代號花園已經有顏色了,取出其顏色,從顏色集合中去掉;如果該花園沒有顏色,跳過; # 全部代號遍歷結束后,取顏色集合第一個顏色作為當前key 的顏色,存入結果中; # 4、反復計算更新結果,最后輸出結果;class Solution(object):def gardenNoAdj(self, N, paths):""":type N: int:type paths: List[List[int]]:rtype: List[int]"""recorder = {}for i in range(1, N+1, 1):recorder[str(i)] = []for path in paths:recorder[str(path[0])].append(path[1])recorder[str(path[1])].append(path[0])print('===recorder:', recorder)#將1的顏色置為1,從2開始遍歷result = [1]for i in range(2, N+1, 1):colors = [1, 2, 3, 4]sub_nodes = recorder[str(i)]print('==sub_nodes:', sub_nodes)for sub_node in sub_nodes:if sub_node > len(result):#沒有顏色,跳過continueelse:if result[sub_node-1] in colors:#有顏色進行移除colors.remove(result[sub_node-1])result.append(colors[0])print('==result:', result)return result# N = 3 # paths = [[1, 2], # [2, 3], # [3, 1]]N = 4 paths = [[1, 2],[3, 4]] sol = Solution() sol.gardenNoAdj(N, paths)

七十.找到小鎮的法官

思路:統計所有人的入度和出度信息,將滿足出度為0,入度為 N - 1的節點輸出。

#維護兩個列表一個用于記錄入度,一個用于記錄出度,滿足入度為N-1, 出度為0的就是法官 class Solution:def findJudge(self, N, trust):input_degree = [0]*Nouput_degree = [0]*Nfor trust_ in trust:input_degree[trust_[0] - 1] += 0input_degree[trust_[1] - 1] += 1ouput_degree[trust_[0] - 1] += 1ouput_degree[trust_[1] - 1] += 0print('==input_degree:', input_degree)print('==ouput_degree:', ouput_degree)for i in range(len(input_degree)):if input_degree[i] == N-1 and ouput_degree[i] == 0:return i+1return -1 # N = 2 # trust = [[1, 2]] # N = 3 # trust = [[1, 3], # [2, 3]] # N = 3 # trust = [[1,3], # [2,3], # [3,1]] N = 4 trust = [[1,3],[1,4],[2,3],[2,4],[4,3]] sol = Solution() res = sol.findJudge(N, trust) print(res)

#維護一個列表用于記錄入度與出度的差值,差值為N-1, 就是法官 class Solution:def findJudge(self, N, trust):count = [0]*Nfor trust_ in trust:count[trust_[0] - 1] -= 1count[trust_[1] - 1] += 1print('==count:', count)for i in range(len(count)):if count[i] == N-1:return i+1return -1 # N = 2 # trust = [[1, 2]] # N = 3 # trust = [[1, 3], # [2, 3]] # N = 3 # trust = [[1, 3], # [2, 3], # [3, 1]] N = 4 trust = [[1,3],[1,4],[2,3],[2,4],[4,3]] sol = Solution() res = sol.findJudge(N, trust) print(res)

七十一.課程安排 IV

利用弗洛伊德算法找出節點與節點之間的路徑,計算出鄰接矩陣。

#佛羅伊德算法:dp矩陣先進行初始化,用兩個節點是否經過中間節點,來更新中間節點的dp矩陣 class Solution:def checkIfPrerequisite(self, n, prerequisites, queries):dp = [[0 for i in range(n)] for j in range(n)]print(dp)for prerequisite in prerequisites:dp[prerequisite[0]][prerequisite[1]] = 1print(dp)for k in range(n):#k代表中間節點for i in range(n):#i開始節點for j in range(n):#j終止節點if dp[i][k] ==1 and dp[k][j]==1:dp[i][j] = 1print(dp)res = []for querie in queries:# print(dp[querie[0]][querie[-1]])res.append(dp[querie[0]][querie[-1]])return res n = 5 prerequisites = [[0, 1],[1, 2],[2, 3],[3, 4]] queries = [[0, 4],[4, 0],[1, 3],[3, 0]]sol = Solution() res = sol.checkIfPrerequisite(n, prerequisites, queries) print('res:', res)

七十四.劃分為k個相等的子集

# 1、先求出數組的平均數 avg,如果平均數 avg 不為整數,也就是說數組的數字總和不能平均的分為 k 份,那么直接返回 false; # # 2、創建一個布爾數組 flag,用來記錄 nums 數組中數字的狀態(已用還是未用)。 temp 的作用是記錄當前子集的數字總和,temp 初始為 avg ,當 temp 等于 0 時,當前這個子集也就可以確定了。index 是用來記錄遍歷數組時從哪個位置開始遍歷,以防將前面的數字重新計算。 # # 3、當 temp = 0 的時候,也就是新一個子集求解完,那么繼續求解下一個子集,k - 1,temp 重新置為 avg;當 temp != 0 時,就是子集還未求解完,那么繼續求解子集,繼續從數組中取數字,遞歸求解。 # # 4、當 k 個子集全部求解完,返回 true,如果一直求解不出,則返回 false。 class Solution:def canPartitionKSubsets(self, nums, k):if sum(nums) % k != 0:#先判斷能不能分成k組return Falseavg = sum(nums)/kflag = [0]*len(nums)print('==flag:', flag)return self.helper(nums, flag, avg, k, avg, 0)def helper(self, nums, flag, avg, k, temp, index):if k == 0:#k為0說明劃分好了k個子集return Trueif temp == 0:#平均數減去子集的剩下數字.如果為0繼續求解下一個子集,k-1,temp重置為avg,下標index也重置為0return self.helper(nums, flag, avg, k - 1, avg, 0)#劃分當前子集for i in range(index, len(nums)):if flag[i]:#已經使用過continueflag[i] =1 #標記使用print('==flag:', flag)# 遞歸調用子過程,父過程是否為true,取決于子過程的結果if (temp - nums[i]) >= 0 and self.helper(nums, flag, avg, k, temp - nums[i], index + 1):return True#往下執行 說明沒有使用 重置為0flag[i] = 0return Falsenums = [4, 3, 2, 3, 5, 2, 1] k = 4 target, rem = divmod(sum(nums), k) print('==target:', target) print('==rem:', rem) # nums = [129, 17, 74, 57, 1421, 99, 92, 285, 1276, 218, 1588, 215, 369, 117, 153, 22] # k = 3 sol = Solution() res = sol.canPartitionKSubsets(nums, k) print('=res:', res)

總結

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

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

www久久九| 亚洲一区欧美精品 | 国产精品久久久久影院日本 | 2023亚洲精品国偷拍自产在线 | 久久久久成人精品亚洲国产 | 亚洲免费黄色 | 99热999 | 国产成人久久av免费高清密臂 | 国产精品无 | www.久久久.com | 中文字幕中文字幕在线中文字幕三区 | 中文字幕免费观看视频 | 亚洲精品国产自产拍在线观看 | 亚洲精品美女久久久久网站 | 男女激情片在线观看 | 激情在线五月天 | 久久综合精品国产一区二区三区 | 日本巨乳在线 | 国产精品免费视频观看 | 欧美日韩精品在线一区二区 | 99视频免费看 | 2024av在线播放| 亚洲日本在线视频观看 | 色偷偷88888欧美精品久久 | 欧美黑人xxxx猛性大交 | 国产精品久久久久久久av电影 | 麻豆94tv免费版 | 91丨porny丨九色 | 久草在线免费色站 | 日韩欧美精品在线 | 午夜影视剧场 | 在线观看视频国产一区 | 狠狠色丁香婷婷综合视频 | 免费观看午夜视频 | 一本到在线 | 人人看人人做人人澡 | 波多野结衣电影一区 | 国产香蕉久久精品综合网 | 天天干天天做 | 一区二区三区在线看 | 午夜精品电影一区二区在线 | 久久综合九色综合97婷婷女人 | 99视屏| 久草视频免费在线观看 | 激情综合网色播五月 | 天天操夜夜叫 | 中文在线资源 | 在线亚洲人成电影网站色www | 久草在线久| 久久人人爽人人爽人人片 | 中文字幕在线观看国产 | 丰满少妇在线观看 | 久久99婷婷| 精品国产午夜 | 97色在线视频 | 精品久久久久久电影 | 天天干天天操天天射 | 午夜视频在线网站 | 中文字幕影视 | 精品国产一区二区三区噜噜噜 | 黄色在线观看污 | 五月天电影免费在线观看一区 | 色综合天天做天天爱 | 亚洲精品乱码久久久久久9色 | japanesexxxxfreehd乱熟 | 69国产成人综合久久精品欧美 | 九九在线视频免费观看 | 欧美激情第一区 | 亚洲综合成人专区片 | 五月婷婷丁香综合 | 欧美xxxx性xxxxx高清 | 在线播放亚洲 | 免费看黄的视频 | 婷婷久久国产 | 久久久www成人免费精品张筱雨 | 久久国产免费视频 | 色婷婷福利视频 | 色视频一区| 久久精品7| 在线免费视频a | 狠狠操狠狠干天天操 | 欧美黑人xxxx猛性大交 | 亚洲国产日韩av | 国产亚洲精品精品精品 | 国产视频1 | 亚洲视频h | 国产在线不卡 | 免费亚洲精品 | 亚洲丝袜中文 | 亚洲乱码国产乱码精品天美传媒 | 综合久久2023| www.狠狠操.com| 精品久久久久久综合 | www蜜桃视频 | 亚洲在线视频播放 | 免费观看一级一片 | 区一区二区三在线观看 | 日韩av资源在线观看 | 97国产| 在线国产视频 | 8x成人在线 | 亚洲涩涩涩 | 日韩理论在线 | 国产字幕在线播放 | 爱情影院aqdy鲁丝片二区 | www久久国产 | 国产精选在线 | 美女精品在线观看 | 91高清免费在线观看 | 日韩一区二区三区免费视频 | 波多野结衣最新 | 免费视频一级片 | 国产少妇在线观看 | 偷拍久久久| 91精品亚洲影视在线观看 | 久久www免费人成看片高清 | 中文字幕在线久一本久 | 成人久久视频 | 精品国产一区在线观看 | 精品国产一区二 | 国产日本亚洲 | 免费看黄的 | 91精品看片| 999热视频| 日本激情动作片免费看 | 久久久久高清毛片一级 | 欧美a视频在线观看 | 欧美巨乳网 | 日韩黄色免费 | 亚洲a网 | 久久婷五月 | 国产精品一区欧美 | 日韩久久久久久久久久 | 欧美一区二区三区激情视频 | 欧美色久 | 97激情影院 | 国产精品一区二区在线观看 | 日韩精品视频久久 | 免费网站黄 | 久久精品毛片 | 国产美女免费观看 | 一区二区激情视频 | 国产免费高清视频 | 国产精品黑丝在线观看 | 中文字幕丝袜一区二区 | 一本到在线 | 欧洲精品码一区二区三区免费看 | 久久精品一区二区三区视频 | 亚洲欧美视频在线 | 中文字幕 成人 | 天天射日 | 大胆欧美gogo免费视频一二区 | av天天干 | 久久69精品| 国产成人精品一区二区三区福利 | 国产成人综合图片 | 97超碰人人模人人人爽人人爱 | 国产免费视频一区二区裸体 | 一级a性色生活片久久毛片波多野 | av黄色av| 久久国产午夜精品理论片最新版本 | 久久激情网站 | 久久香蕉国产精品麻豆粉嫩av | 美女福利视频一区二区 | 免费视频a | 四虎在线免费观看 | 在线韩国电影免费观影完整版 | a黄色一级片 | 亚洲作爱| 五月天丁香 | 视频1区2区 | 最新av网址在线 | av在线网站观看 | 亚洲小视频在线观看 | 国产精品久久久久9999 | 成人中文字幕av | 色综合天天射 | 97视频人人免费看 | 国产最顶级的黄色片在线免费观看 | 国产免费午夜 | 欧美日韩在线播放 | 久久久午夜电影 | 在线观看视频色 | 最近中文字幕久久 | 国产a级片免费观看 | 久久九九久久精品 | 在线影院中文字幕 | 亚洲国产美女久久久久 | 狠狠的干狠狠的操 | 日韩在线短视频 | 六月色播 | av软件在线观看 | 97超碰资源总站 | 国产黄色看片 | 一区二区电影网 | 欧美日韩精品影院 | 狠狠色狠狠色 | 色香网| 91成人精品一区在线播放 | 成人a级免费视频 | 免费在线成人 | 日韩av高清 | 久草在线欧美 | 视频在线观看入口黄最新永久免费国产 | 免费日韩 精品中文字幕视频在线 | 日韩成人av在线 | 国产a级精品 | 天天操天天操天天操天天 | 久久一线| 五月天视频网站 | 国产精品视频你懂的 | 亚洲涩涩涩涩涩涩 | 美女网站在线看 | 少妇bbb好爽| 又爽又黄又无遮挡网站动态图 | 91视频在线免费看 | 91在线亚洲 | 人人射人人爽 | 亚洲精品乱码久久久久久9色 | 日韩精品欧美视频 | 97精品国产91久久久久久 | 美女久久一区 | 免费观看福利视频 | 色视频在线免费观看 | 免费在线看成人av | 午夜视频在线观看一区二区三区 | 亚洲视频免费在线观看 | 日韩欧美高清 | 日韩激情视频在线 | av夜夜操| 黄色1级大片| 亚洲国产精品小视频 | 日韩av中文字幕在线 | 久久99视频精品 | 国产不卡高清 | 欧美另类重口 | 久久国产精品网站 | 玖玖综合网 | 草久在线视频 | 丁香婷婷综合五月 | 瑞典xxxx性hd极品 | 婷婷久久亚洲 | 一本一道久久a久久精品蜜桃 | 欧美 亚洲 另类 激情 另类 | 欧美一区二区三区激情视频 | 色先锋资源网 | 91日韩在线专区 | 91视频在线自拍 | 日韩成人邪恶影片 | 91av电影网 | 国产一区二区在线观看免费 | 日韩一区正在播放 | 国产精品九九视频 | h动漫中文字幕 | 久久精品在线免费观看 | 4438全国亚洲精品观看视频 | 欧美无极色 | 欧美日韩精品在线一区二区 | 成人夜晚看av | 亚洲一区欧美激情 | 成人午夜电影在线 | 免费色视频 | 亚洲专区欧美 | 中文字幕在线观看一区 | 国产精品淫 | 91九色在线播放 | 免费精品在线 | 国产亚洲午夜高清国产拍精品 | 久久国产经典 | 成年人免费在线观看网站 | 天天插狠狠插 | 91亚洲精品久久久蜜桃网站 | 中文字幕九九 | 亚洲成av片人久久久 | 亚州精品在线视频 | 99国产成+人+综合+亚洲 欧美 | 天天操天天干天天操天天干 | 香蕉影视app| 美女激情影院 | 九九久久免费视频 | 在线免费观看黄色大片 | 久久久精品国产一区二区电影四季 | 欧美日韩在线第一页 | 99久热在线精品 | 国产亚洲免费观看 | 成人av免费看 | 国产香蕉视频在线观看 | av天天澡天天爽天天av | 美女视频久久黄 | 字幕网在线观看 | 日韩h在线观看 | 欧美日韩免费网站 | 人人搞人人干 | 久久人人精品 | 我爱av激情网 | 色香天天 | 久久久久国产一区二区三区 | 欧美小视频在线观看 | 97av色| 亚洲国产精品视频在线观看 | 蜜臀精品久久久久久蜜臀 | 99视频精品在线 | 二区三区av | 国产精品久久久久久久久婷婷 | 99综合视频| 99热.com| 国产午夜一区 | 国产一区二区电影在线观看 | 国产亚洲一级高清 | www,黄视频 | 亚洲精品456在线播放乱码 | 午夜骚影 | 色橹橹欧美在线观看视频高清 | 国产精品午夜久久 | 免费看国产曰批40分钟 | 人人爽久久久噜噜噜电影 | 国产精品初高中精品久久 | 免费看一级特黄a大片 | 亚洲精品男女 | 国产美女在线观看 | 国产高清精品在线 | 成年性视频 | 日韩免费电影一区二区三区 | 日韩高清一区 | 丁香六月婷婷综合 | 国产精品videoxxxx | 人人爽久久涩噜噜噜网站 | av中文国产 | 国产成人精品一区二区三区福利 | 免费污片 | 人人干干人人 | 成人亚洲欧美 | 国产视频久久久 | 国产精品videossex国产高清 | 天天操天天色天天 | 免费观看成年人视频 | av亚洲产国偷v产偷v自拍小说 | 久久久久久久国产精品 | 人人草人人草 | 国产精品入口a级 | 日韩午夜电影 | 超级碰99| 久久99国产精品免费 | 国内揄拍国产精品 | 91精品啪在线观看国产81旧版 | 在线观看成人小视频 | av青草| 缴情综合网五月天 | 国产生活一级片 | 免费看av片网站 | 久久久久夜色 | 丁香婷婷亚洲 | 91人人人| 免费日韩一区二区三区 | 激情婷婷综合网 | av片在线观看 | 亚洲激情五月 | 亚洲区另类春色综合小说校园片 | 碰超人人 | 色婷婷激情五月 | 欧美久久久久久久久久 | 久久精品视频免费 | 日本精品午夜 | 久久久久国产a免费观看rela | 国产一区在线视频观看 | 一级成人免费视频 | 日韩精品在线一区 | 欧美日韩亚洲精品在线 | 国产精品久久久久久久久费观看 | 热久久免费视频精品 | 丁香婷婷成人 | 波多野结衣在线观看视频 | 91av国产视频| 国产精品观看 | 国产精品永久久久久久久www | 激情自拍av | av在线免费观看不卡 | 国产精品麻豆免费版 | 成 人 黄 色 视频 免费观看 | 国产精品美女久久久久久久久 | 国产乱对白刺激视频在线观看女王 | 69国产成人综合久久精品欧美 | 久久综合五月天 | 人人看97 | 久久精品8 | 在线观看精品视频 | 免费观看国产精品视频 | 精品国产一区二区三区不卡 | 中文字幕在线观看第二页 | 在线观看亚洲免费视频 | 久久免费视频精品 | 久久久久国产免费免费 | 久久婷婷综合激情 | 中文字幕在线观看2018 | 久久人人爽人人爽人人片av免费 | 天天干.com | 免费看的av片 | 久久综合电影 | 日韩一区二区免费视频 | 国产高清在线免费 | 99免费精品视频 | 国产高清免费观看 | 国产97色在线 | 精品91久久久久 | 在线va视频| 人人超在线公开视频 | 在线欧美最极品的av | www.久热 | 一区电影| a天堂最新版中文在线地址 久久99久久精品国产 | 国产黄色在线观看 | 中文字幕一区二区在线播放 | 在线观看成人小视频 | 黄色大全免费观看 | 亚洲精品网页 | 在线观看中文av | 一区二区电影在线观看 | 中文字幕观看av | av动态图片 | 日本视频不卡 | 色视频成人在线观看免 | 九九视频精品免费 | 在线黄色免费av | 中文字幕免费观看全部电影 | 色资源网在线观看 | 成人免费观看完整版电影 | 91香蕉国产在线观看软件 | 国产小视频在线免费观看视频 | 六月丁香在线观看 | 成人av电影网址 | 天天干天天搞天天射 | 久草在线中文888 | 久久激情视频 久久 | 国产精品一区二区在线看 | 在线视频欧美精品 | 日韩高清免费在线 | 91福利小视频| av丝袜天堂| 日韩免费视频一区二区 | 久久久免费观看完整版 | 探花视频在线观看+在线播放 | 国内精品久久久久久久影视简单 | 国产精品私人影院 | 成人av资源站 | 天天操伊人 | 一区二区精品久久 | 国产精品久久99综合免费观看尤物 | 亚洲免费av电影 | 在线亚洲欧美视频 | 欧美一区二区三区特黄 | 国产高清福利在线 | 少妇按摩av | 日韩av在线免费播放 | 夜色资源站国产www在线视频 | 欧美精品被 | 精品视频123区在线观看 | 美女在线免费观看视频 | www.在线看片.com | 中文字幕乱码电影 | 色视频网页 | 亚洲 欧洲 国产 精品 | 超碰在线公开 | 久久久国产高清 | 成年人黄色在线观看 | 日本久草电影 | 超碰在线9 | 亚洲欧美视频 | 国产麻豆精品传媒av国产下载 | 国产一区二区高清不卡 | 国产精品乱码一区二三区 | 狠狠操操 | 国产91勾搭技师精品 | 欧美色综合天天久久综合精品 | 日韩欧美在线不卡 | 六月色婷| 九七人人干 | 国产精品嫩草影视久久久 | 欧美色图狠狠干 | 在线中文字幕观看 | www.97视频| 香蕉视频在线看 | 国产成人精品一区二区三区在线观看 | 国产91精品高清一区二区三区 | 91综合久久一区二区 | 视频在线播放国产 | 黄色亚洲 | 超碰av在线免费观看 | 日本精品视频免费 | 久久理论电影网 | 久草在线最新视频 | 成人精品久久久 | 午夜视频欧美 | 亚洲精品视频免费在线观看 | 又黄又爽又无遮挡免费的网站 | 91在线看 | 日日夜夜精品网站 | 久久人人添人人爽添人人88v | 亚洲婷婷在线视频 | 在线黄色观看 | 999电影免费在线观看2020 | 日韩久久午夜一级啪啪 | 欧美日韩国产在线观看 | 成人午夜网址 | 中文字幕高清免费日韩视频在线 | 337p欧美 | 在线视频手机国产 | 99在线视频网站 | 美州a亚洲一视本频v色道 | 手机在线黄色网址 | 精品免费久久久久久 | 一区三区视频 | 免费高清在线一区 | 国产一级免费在线 | 91精品在线视频观看 | 九九热.com| 色综合久久久久综合体 | 9ⅰ精品久久久久久久久中文字幕 | 国产精品入口66mio女同 | 91丨九色丨91啦蝌蚪老版 | 日韩电影久久 | 狠狠狠色狠狠色综合 | 欧美色一色 | 亚洲国产精彩中文乱码av | 午夜在线免费观看 | 成人黄色电影在线播放 | 五月天久久婷婷 | 中文字幕黄色网址 | 国产黄免费在线观看 | 久久综合久久综合久久 | 亚洲国产中文在线观看 | 中文字幕在线观看视频免费 | 不卡的av在线 | 操高跟美女 | 久久久噜噜噜久久久 | 四虎永久免费在线观看 | 国产精品高清免费在线观看 | 欧亚日韩精品一区二区在线 | 午夜电影一区 | 91九色老| 欧美亚洲国产日韩 | 国产精品1000 | 欧美激情视频在线免费观看 | 五月天亚洲综合小说网 | a成人v在线 | 国产中的精品av小宝探花 | 日韩专区在线播放 | 亚洲开心激情 | 中文字幕在线免费观看视频 | 中文字幕一区二区三区在线视频 | 日本三级国产 | 丰满少妇一级片 | 美女黄濒 | 五月婷丁香网 | 91中文字幕一区 | 天天摸日日摸人人看 | 中文字幕一区在线 | 午夜久久影视 | 亚洲区精品 | av在线官网 | 精品在线观看国产 | 国产成人久久77777精品 | 最新中文字幕在线资源 | 久久精品99久久久久久2456 | 精品国产一区二区三区在线观看 | 日韩在线观看精品 | 日本黄网站 | 国产精品乱码一区二区视频 | 亚洲一区 av | 蜜臀久久99静品久久久久久 | 国内精品视频在线 | 在线观看中文av | 精品国产伦一区二区三区观看方式 | 日韩一区二区三区不卡 | 欧美精品在线观看 | 免费亚洲视频在线观看 | 中文字幕日本在线 | 日韩激情视频在线 | 亚洲最新av | 国产精品6999成人免费视频 | 国产综合在线观看视频 | 激情五月色播五月 | 久久躁日日躁aaaaxxxx | 91av在| 欧美国产日韩一区二区三区 | 久久国产手机看片 | 国产女教师精品久久av | 91在线精品视频 | 99在线免费观看视频 | 久草在线视频新 | wwwwww色| 中文一区在线 | 欧美在线aa| 一级黄色在线视频 | 中文字幕日韩高清 | 色夜影院 | 激情av资源 | 成年人网站免费观看 | 欧美在线视频一区二区 | 麻豆传媒视频在线播放 | 午夜色场| 欧美成a人片在线观看久 | 日韩手机在线观看 | 国产成a人亚洲精v品在线观看 | 亚洲三级国产 | 激情综合六月 | 精品免费在线视频 | www免费看片com | 成人9ⅰ免费影视网站 | 黄色免费观看网址 | 亚洲国产三级 | 深夜国产福利 | 久久久男人的天堂 | 国产亚洲视频在线免费观看 | 日韩精品欧美专区 | 国产在线观看免费av | 亚洲成人999 | 欧美一区二区三区在线看 | 国产成人一区二区三区免费看 | 国产精品网红福利 | 日本aa在线 | 一区二区中文字幕在线播放 | 中文字幕久久精品 | 99精品系列 | 三级视频片 | 天天干天天射天天爽 | 水蜜桃亚洲一二三四在线 | 香蕉视频4aa | 久草在线这里只有精品 | 99理论片 | 欧美极品在线播放 | 一区二区 久久 | 在线视频欧美日韩 | 香蕉视频在线免费看 | 久久一区91 | 国产爽视频 | 欧美国产日韩一区二区三区 | 在线国产视频一区 | 免费av 在线| 国内精品在线一区 | 成人影音av | 国产色就色 | 亚洲精品小区久久久久久 | 国产三级精品三级在线观看 | 国产丝袜网站 | 久久不射电影院 | 欧美性生交大片免网 | 一 级 黄 色 片免费看的 | 黄色成人在线观看 | 久久久久欧美精品 | 欧美一级大片在线观看 | 国产在线视频资源 | 欧美二区三区91 | 精品视频免费观看 | 国产精品美乳一区二区免费 | 国产亚洲资源 | 久精品视频| 日韩色区| 日韩精品免费在线观看 | 9999精品免费视频 | 日日夜夜综合网 | 在线观看亚洲成人 | 久久电影网站中文字幕 | 成x99人av在线www| 亚州av免费 | 精品一区二区免费视频 | 超碰在线1 | 中文字幕中文字幕在线中文字幕三区 | 免费污片 | 日韩在线观看你懂的 | 成人av片免费观看app下载 | 四虎永久视频 | 久久视频在线观看中文字幕 | 视频一区视频二区在线观看 | 成人毛片一区 | 精品久久91 | 正在播放国产一区 | 欧美成a人片在线观看久 | 久久黄色小说视频 | 一本一道波多野毛片中文在线 | 色94色欧美 | 中文不卡视频在线 | 天天操天天能 | 亚洲乱亚洲乱亚洲 | 日韩v欧美v日本v亚洲v国产v | 色欧美日韩 | 午夜精品久久久久久 | 人人爽人人爽人人爽人人爽 | 在线免费观看黄色 | 久久黄色a级片 | 麻豆传媒电影在线观看 | 成人国产精品一区二区 | 狠狠干狠狠插 | 四虎成人精品 | 婷婷丁香视频 | 亚洲播放一区 | 国产色就色 | 一区三区在线欧 | 成人一区不卡 | 欧美久久九九 | 日韩美女黄色片 | 91视频在线免费下载 | 成年人黄色免费网站 | 国产不卡精品 | 伊人网综合在线观看 | 国产中文欧美日韩在线 | 成片免费 | 色免费在线| 超碰九九 | 免费网站在线观看人 | 久久午夜免费观看 | 精品亚洲男同gayvideo网站 | 亚洲黄色小说网 | 亚洲国产视频直播 | 亚洲精品国产欧美在线观看 | 男女拍拍免费视频 | 精品一区91| 亚洲欧洲一区二区在线观看 | 又黄又爽又刺激视频 | 国产成人精品一区二区在线 | 97操操操| 亚洲蜜桃在线 | 最新av在线网站 | 婷婷六月天丁香 | 久久久 精品| 国产精品国产亚洲精品看不卡15 | 亚洲一级黄色大片 | 久久精品韩国 | 久草在| 欧美91精品久久久久国产性生爱 | 成人精品影视 | 韩日电影在线免费看 | 国产精品视频免费看 | 亚洲日本在线视频观看 | 中文字幕精品一区二区精品 | 99re亚洲国产精品 | 久久久久久久久久久影院 | 麻豆免费在线视频 | 青青河边草观看完整版高清 | 色亚洲激情 | 丁香婷婷激情国产高清秒播 | 免费在线国产精品 | 久久免费在线观看视频 | 国产97在线观看 | 欧美激情精品一区 | 欧美色操 | 国产一区二区在线看 | 国模一二三区 | 四虎影视国产精品免费久久 | 中文字幕亚洲精品日韩 | 亚洲综合国产精品 | 亚洲电影久久久 | 精品自拍sae8—视频 | 91av在线免费观看 | 夜夜摸夜夜爽 | 97福利视频 | 国产又粗又猛又黄视频 | 欧美久久久久久久久久久久久 | 伊人久久精品久久亚洲一区 | 免费高清看电视网站 | 久久久久久久久久久免费 | 色五月情| 六月丁香婷 | 激情视频免费观看 | 一区中文字幕在线观看 | 免费av网址在线观看 | 久久视频这里只有精品 | 日韩免费网站 | 伊人官网| 黄色网www | 天天干天天操天天射 | 在线视频黄 | 91亚洲激情 | 99在线精品视频 | 日韩高清无线码2023 | 美女在线免费视频 | 久久视频免费观看 | 一级黄色片在线播放 | 黄色www| 一区二区精品视频 | 九九综合在线 | 久久人人爽爽人人爽人人片av | 欧美色图30p | 久草爱| 日免费视频 | 久久精品这里热有精品 | 麻豆视频在线看 | 丁香六月中文字幕 | 99视频在线播放 | 综合久久网 | 午夜精品电影 | 91成人蝌蚪| 肉色欧美久久久久久久免费看 | 国产精品久久久久久久久久不蜜月 | 久久经典国产视频 | 免费福利视频网站 | 亚洲成人黄色在线观看 | 97人人爽人人 | 天天干天天操天天入 | 三级黄色欧美 | 亚洲美女免费视频 | 国产精品99久久99久久久二8 | 五月婷婷在线视频观看 | 成人免费观看在线视频 | av丝袜天堂| 国产一级一片免费播放放a 一区二区三区国产欧美 | 91黄视频在线观看 | 国产群p| 国产精品理论片在线播放 | 亚洲无在线 | 中文字幕在线观看三区 | 精品自拍av | 成人h动漫精品一区二 | 成人免费在线视频观看 | 亚洲电影av在线 | 99电影456麻豆| 成人97人人超碰人人99 | 日本一区二区不卡高清 | 99riav1国产精品视频 | 国产 亚洲 欧美 在线 | 天堂在线视频中文网 | 婷婷激情欧美 | 婷婷六月网 | www色婷婷com| 色综合天天射 | 精品久久久久久久久久久久 | 久久三级视频 | 久久久免费精品视频 | 午夜精品久久久久久久99 | 99热精品国产 | 91理论片午午伦夜理片久久 | 久久av网址 | 992tv在线观看网站 | 久久这里只有精品视频99 | 在线综合 亚洲 欧美在线视频 | 天天干人人干 | www.日韩免费| 97超碰香蕉| 一区三区在线欧 | 一二区精品 | 99久久国产免费免费 | 日韩中文字幕亚洲一区二区va在线 | 日韩欧美综合在线视频 | 日韩免费播放 | 玖玖视频精品 | 亚洲成人免费在线观看 | av在线看网站 | 91热精品视频| 99视频精品在线 | 国产精品电影一区二区 | 2019天天干天天色 | 国产精品对白一区二区三区 | 日日操操操 | 精品久久五月天 | 日韩av专区 | 中文字幕有码在线 | 精品国模一区二区三区 | 国产裸体视频网站 | 九九涩涩av台湾日本热热 | 欧美在线视频a | 国产成人综合精品 | 国产精品96久久久久久吹潮 | 欧美另类美少妇69xxxx | 国产精品乱码一区二区视频 | 最近能播放的中文字幕 | 91传媒视频在线观看 | 国产精品久久久久久欧美 | 日韩精品视频网站 | 欧美一级小视频 | 久久国产福利 | 国产黄色片免费观看 | 69视频国产 | 亚洲国产成人精品在线观看 | 欧美在线视频二区 | 97综合视频| 一级性视频 | 久久久久久久99精品免费观看 | 九九在线视频 | 99精品欧美一区二区 | 在线播放 日韩专区 | 久久男女视频 | 国内精品一区二区 | www.久热| 在线免费观看黄色大片 | 黄色软件大全网站 | 国产精品久久久久aaaa九色 | 日韩精品一区二区三区第95 | 久久精品久久精品久久39 | 国产精品初高中精品久久 | 久久精品伊人 | 91精品在线视频观看 | 天天操天天操天天 | 天堂av一区二区 | 好看av在线| 日本中文字幕网址 | 色综合久久久久综合99 | 在线香蕉视频 | 99久久久久久久 | 国产a国产a国产a | 91精品婷婷国产综合久久蝌蚪 | av一级片网站 | 国产精品毛片网 | 免费三级a | 国产高清在线观看av | 欧美国产精品一区二区 | 国产精品美女在线观看 | www.日日操.com| 激情综合中文娱乐网 | 精品国产精品一区二区夜夜嗨 | 一个色综合网站 | 三上悠亚一区二区在线观看 | av免费观看高清 | www五月婷婷 | 久久久精品一区二区 | 久久久午夜精品理论片中文字幕 | 91黄色影视| 色视频在线观看免费 | 91九色网址 | 亚州免费视频 | 色狠狠婷婷 | 91免费在线播放 | av片中文 | 久久久午夜精品理论片中文字幕 | 亚州精品在线视频 | 久久精久久精 | 韩日色视频 | 国产亚洲精品久久久久久电影 | 亚洲天堂社区 | 在线观看视频免费大全 | 国产黄色免费电影 | 99精品在线免费观看 | 午夜精品区 | 久久精品网站视频 | 欧美激情视频在线观看免费 | 久久久免费观看完整版 | 午夜在线观看 | 在线一区二区三区 | 欧美在线观看禁18 | 亚洲最新在线 | 夜夜躁日日躁狠狠躁 | 91精品1区2区 | 久久精品视频3 | 午夜影视剧场 | 久久电影中文字幕视频 | 综合色综合色 | 国产中文字幕一区二区 | 久久成人久久 | av在线电影网站 | 九九免费在线观看 | 三级av免费| 日批在线看 | 久久精品99国产国产 | 天天天干天天天操 | 日韩精品一区二区三区丰满 | 亚洲精品视频www | 久热色超碰| 亚洲开心激情 | 成人免费av电影 | 日日成人网 | 国产精品久久久久久久久久不蜜月 | 久草免费在线视频观看 | 亚洲片在线 | 97精品国产91久久久久久 | 成年人毛片在线观看 | av色一区 | 久久综合视频网 | 天天操天天射天天 | 亚洲人成免费网站 | 在线一二三四区 | 中文字幕之中文字幕 | 久久精品视 | 日韩在线免费电影 | 久久久综合 | 国产99久久久国产精品成人免费 | 91免费观看视频在线 | 五月天最新网址 | 国产亚洲日本 | 久久狠狠婷婷 | 国产黄色片一级 | 日韩在线观看你懂得 | 在线a视频 | 日本精品在线看 | 成人黄色在线观看视频 | 五月天色网站 | 探花视频在线版播放免费观看 | 久久精品国产精品亚洲 | 日日日日 | 亚洲精品在线网站 | 亚洲五月婷婷 | 精品一区二区在线免费观看 | 精品一区二三区 | 亚洲欧洲中文日韩久久av乱码 | 久久久久久久影院 | 成人午夜免费剧场 | 99久久精品免费一区 | 久草久视频 | 日韩视频三区 | 黄色免费电影网站 | 亚洲免费激情 |