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