C# 数据结构基础训练——数组与字符串
第一题 leetcode 寻找数组的中心索引
题目链接:
https://leetcode-cn.com/problems/find-pivot-index/
解题思路:
利用两层循环求解,第一层循环用于确定中间数的下标,第二层循环用于累计计算左侧数之和&右侧数之和
解题代码:
public class Solution {
public int PivotIndex(int[] nums) {
for(int i=0;i<nums.Length;i++){
int temp=i;
// 左侧数之和
int sum1=0;
// 右侧数之和
int sum2=0;
for(int j=0;j<nums.Length;j++){
if(j<temp){
sum1+=nums[j];
}
if(j>temp){
sum2+=nums[j];
}
}
if(sum1==sum2){
return i;
break;
}
}
return -1;
}
}
第二题 leetcode 搜索插入位置
题目链接:
https://leetcode-cn.com/leetbook/read/array-and-string/cxqdh/
解题思路:
先用Indexof方法寻找数组中是否存在target,如果是,输出其下标;如果不是,利用循环找出其下标,若target大于数组中所有数,则插入到最后
解题代码:
public class Solution {
public int SearchInsert(int[] nums, int target) {
int id = Array.IndexOf(nums,target);
if(id != -1) return id;
else{
for(int i=0;i<nums.Length;i++){
if(target<=nums[i]){
return i;
}
}
return nums.Length;
}
}
}
第三题 leetcode 合并区间
题目链接:
https://leetcode-cn.com/leetbook/read/array-and-string/c5tv3/
解题思路:
先将数组排序,由于C#没有动态数组,创建一个列表。依次判断每个元素的左右边界,若左边界小于上一个元素的右边界则合并。
解题代码:
public class Solution {
// ArcNum.ToArray();
// int[][] answer= new int[][2];
public int[][] Merge(int[][] intervals) {
// 获取行数
int row = intervals.Rank;
Array.Sort(intervals);
List<int[]> answer = new List<int[]>(intervals.Length);
for(int i=0;i<row;i++){
if(i==0){
answer.Add(intervals[i]);
}
else{
if(intervals[i][0]<intervals[i-1][1]){
if(answer[i-1][1]>intervals[i][1]) answer[i-1][1]=answer[i-1][1];
else answer[i-1][1]=intervals[i][1];
}
else{
answer.Add(intervals[i]);
}
}
}
int[][] lists = answer.ToArray();
return lists;
}
}
created by wzs