代码随想录day1、2 数组

本文讨论了二分查找的技巧,左闭右闭的概念,以及双指针在移除元素、合并有序数组、滑动窗口问题和螺旋矩阵生成中的应用,强调了细节处理和正确理解算法的重要性。
摘要由CSDN通过智能技术生成

数组 

 【二分查找】

我个人觉得掌握一个就行了,选择了左闭右闭。

停止条件时,一定是right在前,left在后的退出状态,而left right的夹缝中,就是要插入的位置,不然呢,最后肯定是在正确位置附近转啊。Right left移动到最后肯定都会重合,不管重合在6节点还是8节点,最后都会变成下面这个,然后退出。

还有一点:mid的计算:mid=left+(right-left)/2;  位运算的写法是防止left+right溢出;

重要问题 int mid=left+((right-left)>>1); 如果写成 int mid=left+(right-left)>>1;由于>>优先级比+低,会先计算加法left+(right-left),最后才>>1;

做题情况

好久不写了,大概样子能写出来,但是左闭右闭这些细节是忘记了。

【双指针】

27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

主要就是将val和非val值进行交换。

卡住的地方在于移除后数组的新长度的计算,首先是题目就看错了,捣鼓了好一会。

977.有序数组的平方 

转化为合并两个有序数组,我写的和别人不一样的地方在于我的双指针是从中间开始的,题解都是从两边开始,确实更方便点。

卡住的地方在于中间指针位置的计算,很容易超出下标(对于只有一个元素的情况),所以从两边开始下次可以试试。

滑动窗口209.长度最小的子数组 

求sum ,两个指针,少了就加,多了就减。

卡住的地方在于看错题目,满足其总和大于等于 target 的子数列。

【模拟行为】

59.螺旋矩阵II 

我的方法是定义了四个方向,分别为右下左上,然后每个方向上都有停止条件,满足了就换下一个方向,同时定义了level,level自增的位置也是个值得注意的点。

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] ans=new int[n][n];//n*n的矩阵 
        int[] directions={0,1,0,-1,0};//四个方向 右 下 左 上 
        int x=0,y=0;
        int level=0;
        int dx=0;
        int dy=1;
        for(int i=1;i<=n*n;i++){
            System.out.println(x+" "+y);
            ans[x][y]=i;
            
            if(dx==0 && y+level==n-1  ){//遇到情况要转向 
                dx=1;dy=2;
                
            }else if(dx==1 && x+level==n-1 ){
                dx=2;dy=3;
                
            }else if(dx==2 && y-level==0){
                dx=3;dy=4;level+=1;
                
            }else if(dx==3 && x-level==0){
                dx=0; dy=1;
                
            }
            x+=directions[dx];
            y+=directions[dy];

        }
        return ans;

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值