2022.03.19

打卡站住开始学习
3.19号 5h
* 链表(环形链表判断,边界问题)

public ListNode detectCycle(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;
       while(fast!=null && fast.next!=null){
           slow = slow.next;
           fast = fast.next.next;
            if(slow == fast){
               ListNode cur = slow;
               ListNode pre = head;
                while(pre != slow){
                    pre = pre.next;
                    cur = cur.next;
                    //边界问题 ,如果第一次pre==cur 存在问题
                    //if(pre == cur){
                       // return pre;
                    //}
                }
                return pre;
            }
       }
       return null;
    }
  • 摆动序列
    只是换了一种写法,想把结果打印出来,边界想的不清楚,搞了一个小时,最后还是按视频动画节奏来了
public int wiggleMaxLength(int[] nums) {
        int len = nums.length;
        if(len < 2){
            return len;
        }
        List<Integer> res = new ArrayList<>();
        Boolean state = null;
        int i = 1;
       res.add(nums[0]);
       while(i<len){
           if(state == null){
                if(nums[i]>nums[i-1]){
                    state = true;
                    res.add(nums[i-1]);
                }
                if(nums[i]<nums[i-1]){
                    state = false;
                    res.add(nums[i]);
                }
           }else if(state){
               if(nums[i]<nums[i-1]){
                    state = false;
                    res.add(nums[i]);
                }
           }else if (!state){
                if(nums[i]>nums[i-1]){
                    state = true;
                    res.add(nums[i]);
                }
           }
          i++;    
       }
        return res.size();
}
  • 计算右侧小于当前元素的个数