int searchInsert(int* nums, int numsSize, int target) {
int i = 0;
int flag = 1;
for(i=0;i<numsSize;i++){
if(nums[i]==target){
return i;
}
else if(nums[i]>target){//如果当前数组中的数大于目标值则返回此时的i值(为将要插入
的数字的位置)
return i;
}
}
return i;//如果遍历完数组仍未得到返回值则返回i值作为最后一个额外加入进来的数
}
上面为一般法,下面为二分查找
int searchInsert(int* nums, int numsSize, int target) {
int left = 0, right = numsSize - 1, ans = numsSize;
while (left <= right) {
int mid = (right-left)/2+left;//防止溢出
if (target <= nums[mid]) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
#include<math.h>//利用双指针法从两侧开始比较
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* sortedSquares(int* nums, int numsSize, int* returnSize) {
*returnSize=numsSize;
int left=0,right=numsSize-1;
int lefts,rights;
int len=numsSize;
int *ans=(int *)malloc(sizeof(int)*numsSize);
for(int i=numsSize-1;i>=0;i--){//通过两个指针从两侧开始比较,将大的值从数组大小的最后
一个返回
lefts=nums[left]*nums[left];
rights=nums[right]*nums[right];
if(rights>=lefts){
ans[i]=rights;
right--;
} else{
ans[i]=lefts;
left++;
}
}
}
return ans;
}