目录
1 数组的定义
数组是有一定顺序关系的若干对象组成的集合,组成数组的对象称为数组元素。
例如 向量对应一维数组;矩阵对应二维数组
2 数组的存储
(1)n维数组的定义
下标由n个数组成的数组称为n维数组
// 一维数组(线)
int[] a = new int[10];
// 二维数组(面)
int[ , ] a = new int[2, 3];
// 三维数组(体)
int[ , , ] a = new int[2, 4, 3];
(2)数组存储的特点
- 数组元素在内存中按照顺序连续存储
- 数组的存储分配按行或列进行
- 数组名表示该数组的首地址,是常量
3 练习
a 两数之和
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现;可以按任意顺序返回答案。
示例1:
输入:num = [2,3,4,2,1], target = 6;
输出:[2, 5]
示例2:
输入:num = [2,3,1], target = 4;
输出:[1, 2]
public class Solution
{
public int[] TwoSum(int[] nums, int target)
{
int[] result = new int[2];
for (int i = 0; i < num.length - 1; int target)
for (int j = i + 1; j < num.length; j++)
{
if (num[i] + num[j] = target)
{
result[0] = i;
result[1] = j;
return result;
}
}
return result;
}
}
b 三数之和
一个长度为n的整数数组nums,和一个目标值target。
请从nums 中选出三个整数,使它们的和与target最接近;返回这三个数的和;假定每组输入只存在恰好一个解。
示例:
输入:num = [3,4,2,1], target = 6;
输出:7
public class Solution
{
public int TreeSumClosest(int[] nums, int target)
{
double error = int.MaxValue;
int sum = 0;
for (int i = 0; i < num.length - 2; i++)
for (int j = i + 1; j < num.length - 1; j++)
for (int k = j + 1; k < num.length; k++)
{
if (Math.Abs(num[i] + num[j] +num[k] - target) < error
{
sum = num[i] + num[j] +num[k];
error = Math.Abs(sum = target);
}
}
return result;
}
}
降低其时间复杂度 —— 排序
public class Solution
{
public int TreeSumClosest(int[] nums, int target)
{
nums = nums.OrderBy(a => a).ToArray();
int result = nums[0] + nums[1] + nums[2];
for (int i = 0; i < num.length - 2; i++)
{
int start = i + 1, end = num.length - 1;
while(strat < end)
{
int sum = nums[start] + nums[end] + nums[i];
if (Math.Abs(target- sum) < Math.Abs(target- result))
result = sum;
if (sum > target)
end--;
else if (sum < target)
start++;
else
return result;
}
}
return result;
}
}