第三题 搜索插入位置
题目信息:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
示例 :
输入: nums = [1,3,5,6], target = 2 输出: 1
解题思路:
这道题虽然多了一个如果目标值不存在数组中的条件,但是方法跟第一题还是一样的二分查找,先限制一下左右边界,其实还是三种情况,1.目标值等于中间值,直接返回下标;2.目标值大于中间值,查找范围[mid+1,high];3.目标值小于中间值,查找范围[low,mid-1]
解决方法:
public int SearchInsert(int[] nums, int target) {
int low = 0;
int high = nums.Length - 1;
while (low<=high)
{
int mid = (low + high) / 2;
if (nums[mid]==target)
{
return mid;
}
else if (nums[mid] < target)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
return low;
}
第四题 有序数组的平方
题目信息:
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例:
输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]
解题思路:
直接根据数组的长度,遍历数组中所有元素,乘方后用Array.Sort方法重新排序
解决方法:
public int[] SortedSquares(int[] nums) {
int n = nums.Length;
for (int i=0;i<n;i++)
{
nums[i] = nums[i] *nums[i];
}
Array.Sort(nums);
return nums;
}