2021-03-18

C#基础语法训练(LeetCode)

数组与字符串

一、一维数组

1.寻找数组的中心索引

2.搜索插入位置

、二维数组

1.旋转矩阵

三、学习心得

一、一维数组
1.寻找数组的中心索引

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

思考过程:首先不可能去一个一个算左边和右边的和,这样耗时太长,对于中心索引,那么根据其定义,如果知道数组之和,那么数组之和减去该中心元素,那么左边之和必定等于数组之和的一半,那么这样就减少了计算次数,简化了运算过程,因而效果较好,之所以用左边之和是因为题目要求:如果数组有多个中心下标,应该返回最靠近左边的那一个。

public class Solution {
    public int PivotIndex(int[] nums) {
 int addsum=0,sum=0;
for(int i=0;i<nums.Length;i++)
sum+=nums[i];
if(addsum+nums[0]==sum)
return 0;
for(int j=0;j<nums.Length-1;j++)
{
    addsum+=nums[j];
    if(2*addsum+nums[j+1]==sum)
    return j+1;
}
return -1;
    }
}

运行结果截图:
在这里插入图片描述
2.搜索插入位置

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

思考过程:最直接可以遍历数组找到目标值,然后记录索引并返回,但是当数组规模较大,那么此时耗费时间将较大,由于是排序数组,因而可以通过折半查找降低查找时间,提高效率。

public class Solution {
    public int SearchInsert(int[] nums, int target) {
int i;
if(target<nums[0])
return 0;
if(target<=nums[nums.Length/2]){
for(i=0;i<=nums.Length/2;i++){
    if(target==nums[i])
    return i;
    if(target>nums[i]&&target<nums[i+1])
    return i+1;
}
}
else if(target>nums[nums.Length/2]){
for(i=nums.Length/2;i<=nums.Length-2;i++){
    if(target==nums[i])
    return i;
    if(target>nums[i]&&target<nums[i+1])
    return i+1;
}
}
if(target<=nums[nums.Length-1])
    return nums.Length-1;
else return nums.Length;
    }
}

运行结果截图:
在这里插入图片描述
二、二维数组
1.旋转矩阵

问题描述:给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?

思考过程:旋转90°,按顺时针旋转操作,我们通过矩阵的规模,每四个点进行一次交换,通过一个临时变量存储第一个数据,从而完成交换,这样交换NxN/4次即可完成,也即是两次循环。

public class Solution {
    public void Rotate(int[][] matrix) {
        int n = matrix.Length;
        for(int i = 0;i<n/2;i++)
        {
            for(int j=i;j<n-1-i;j++)
            {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[n-1-j][i];
                matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
                matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
                matrix[j][n-1-i] = temp;
            }
        }
    }
}

运行结果截图:
在这里插入图片描述
三、学习心得
以前知道有leetcode这个网站,但没有深究,直到老师要求在上面学习,然后解答相应题目,这才知道纸上得来终觉浅,绝知此事要躬行,只有自己动手练习,不断实践,才能切实提高自己的编程水平,很多东西似是而非,没有经过实际操作,是不行的,这个学期希望通过C#的学习,进一步提高自己的编程能力,同时复习C/C++的相关知识,掌握一定的编程能力!
Good begun is half done!
gitee源代码网站链接:https://gitee.com/LiHua2019c/leet-code-exercise-C_sharp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值