classSolution(object):deftwoSum(self, nums, target):leng=len(nums)for i inrange(leng):for j inrange(leng):if nums[i]+nums[j]==target and i!=j:return[i,j]
在b站up那里學到的【然后自己復寫】
忘記怎么取list的第二個值了。【利用range的特性】
classSolution(object):deftwoSum(self, nums, target):leng=len(nums)for i inrange(0,leng):for j inrange(i+1,leng):if nums[i]+nums[j]==target and i!=j:return[i,j]
哈希表【空間換時間】
classSolution(object):deftwoSum(self, nums, target):mapping ={}for i inrange(0,len(nums)):mapping[nums[i]]= ifor j inrange(0,len(nums)):diff = target - nums[j]if(diff in mapping and mapping[diff]!= j):return[j,mapping[diff]];
和為 K 的子數組
在b站up那里學到的【然后自己復寫】
classSolution(object):defsubarraySum(self, nums, k):count =0dic={}dic[0]=1cur_sum =0for num in nums:cur_sum = cur_sum + numif cur_sum-k in dic:# 很巧的思路count=count+dic[cur_sum-k]if cur_sum in dic:dic[cur_sum]+=1else:dic[cur_sum]=1return count
三數之和
在b站up那里學到的【然后自己復寫】
classSolution(object):defthreeSum(self, nums):resol=[]nums.sort()for i inrange(len(nums)):cur = iif nums[cur]>0:return resolif cur>0and nums[cur-1]== nums[cur]:continue# 去重left = cur+1right =len(nums)-1while left<right:total = nums[cur]+nums[left]+nums[right]if total >0:right-=1elif total<0:left+=1else:resol.append([nums[cur],nums[left],nums[right]])while left<right and nums[right-1]==nums[right]:# 去重right-=1while left<right and nums[left+1]==nums[left]:# 去重left+=1right-=1left+=1return resol
兩數相加【鏈表】
我的半路答案:沒有看到是鏈表
我還沒有寫完,只是想半路測一下是否正確。
關于鏈表的話,我相對還是弱一點,下次鞏固。
classSolution(object):defaddTwoNumbers(self, l1, l2):resl=[]cur=0len1=len(l1)len2=len(l2)for i inrange(min(len1,len2)):total=l1[i]+l2[i]+curif total>10:cur=total/10resl.append(total%10)else:resl.append(total)return resl
筆記: 例題: #include<bits/stdc.h>
using namespace std;
const int N 5000010;
char str[N];
int s[N];
int main(){int t;cin>>t;for(int a1;a<t;a){int n;cin>>n;scanf("%s",str1);for(int i1;i<n;i){s[i]s[i-1]…