题目要求:意思是每棵树代表一种类型,用fruit表示,你有两个篮子,每个篮子只能装一种类型的水果,必须连续采摘,选择从那棵树开始摘,你能摘到更多的树 //滑动窗口
//func check(n Type) {/*statement*/}
////形参列表要根据题意变换
//func slidingWindow(nums []int) {
// n := len(nums)
// //使用i指针遍历整个数组
// for i, j := 0, 0; i < n; i++ {
// //调整j指针使[i, j]符合题意
// for j <= i && check() {
// /*statement*/
// j++
// }
// }
//}
func sortedSquares(nuns []int)[]int {
n := len(nuns)
k := n-1
i,j := 0,n-1
ans := make([]int,n)
for i<=j{
for k = n-1;k>=0;k-- {
if nuns[i]*nuns[i]<nuns[j]*nuns[j]{
ans[k] = nuns[j]*nuns[j]
j--
}else {
ans[k] = nuns[i]*nuns[i]
i++
}
}
}
return ans
}
二分法 //有序的时候用
func lengthOfLongestSubstring1(s string) int {
strLen := len(s)
if strLen == 0 {
return 0
}
left,right,ans := 0,0,0
m := map[byte]int{}
for right < strLen{
if _,ok := m[s[right]]; !ok {
m[s[right]] = right
}else {
//更新后的“左窗棱”不能比之前的 “左窗棱” 小
//#我们应该找到重复元素第一次(最近一次更新)添加到map中的value值,然后把该value值加1,既为最新的 “左窗棱” 的位置
//abba 加入更新到最后一个a的时候,这时候l为2.并且m[a] = 0但是如果给他加1更新到1,那么就出问题了。多以说这个l不能更新
//判断
if m[s[right]] + 1 >= left {
left = m[s[right]] + 1
}
m[s[right]] = right
}
ans = max(right-left+1,ans)
right ++
}
return ans
}