水果成篮/滑动/有序数组平方/长度最小的子数组/有效的完全平方/合并二叉树/链表中删去和为0的节点

53 阅读1分钟

题目要求:意思是每棵树代表一种类型,用fruit表示,你有两个篮子,每个篮子只能装一种类型的水果,必须连续采摘,选择从那棵树开始摘,你能摘到更多的树 //滑动窗口

image.png

//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++
//    }
// }
//}

image.png

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
}

image.png

二分法 //有序的时候用 image.png

image.png

image.png

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

}

image.png