数据结构基础训练[java版本]

题目来源:LeetCode


一、数组

1.寻找数组的中心索引

题目描述:给你一个整数数组nums ,请编写一个能够返回数组 “中心下标” 的方法。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。
注意:中心下标可能出现在数组的两端。

思路:

先求和,然后再分别求左和和右和,如果左和和右和相等,则返回索引,否则执行完毕返回-1

解答代码:

class Solution {
    public int pivotIndex(int[] nums) {
        int SumL=0,SumR,sum=0;

        for(int i=0;i<nums.length;i++){sum+=nums[i];}
        if(sum-nums[0]==0){return 0;}
        SumR=sum;
        for(int i=0;i<nums.length;i++)
        {
            SumL+=nums[i];
            if(i!=0){SumR-=nums[i-1];}
            if(SumL==SumR){return i;}
        }
    return -1;
    }
}

重点:多种情况必须厘清,分情况设置判断条件

战绩截图:

2.搜索插入位置

题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。

思路:

二分法缩小查找范围,直到 l<=target, mid=target

解答代码:

class Solution {
    public int searchInsert(int[] nums, int target) {
        int l=0,r=nums.length-1,mid;
        
        while(l<=r)
        {
            mid=(l+r)/2;
            if(nums[mid]==target){return mid;}
            else if(nums[mid]<target){l=mid+1;}
            else{r=mid-1;}
        }
        return l;
    }
}

重点:二分法搜索需要确定数组的边界

战绩截图:

二、二维数组

1.旋转矩阵

给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。

思路:

使用数组newMatrix储存旋转后的结果,最后复制到原数组

解答代码:

class Solution {
    public void rotate(int[][] matrix) {
        int Max=matrix.length;
        int[][] newMatrix=new int[Max][Max];
        for(int i=0;i<Max;++i)
        {
            for(int j=0;j<Max;++j)
            {
                newMatrix[j][Max-1-i]=matrix[i][j];
            }
        }
        for(int i=0;i<Max;++i)
            {
                for(int j=0;j<Max;++j)
                {
                    matrix[i][j]=newMatrix[i][j];
                }
            }
        
    }
}

重点:厘清旋转前后位置对应的数组下标变化

战绩截图:

原题目来源:

LeetCode原题目地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值