【计蒜客系列】挑战难题10:寻找插入位置
2015-07-13 20:47
411 查看
题目来源:计蒜客
给定一个已经升序排好序的数组,以及一个数target,如果target在数组中,返回它在数组中的位置。
否则,返回target插入数组后它应该在的位置。
假设数组中没有重复的数。以下是简单的示例:
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
提示:输入一个整数n,以及其对应的数组A
,最后输入target
searchInsert(int A[], int n, int target)
样例1
输入:
3
1 3 5
2
输出:
1
给定一个已经升序排好序的数组,以及一个数target,如果target在数组中,返回它在数组中的位置。
否则,返回target插入数组后它应该在的位置。
假设数组中没有重复的数。以下是简单的示例:
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
提示:输入一个整数n,以及其对应的数组A
,最后输入target
searchInsert(int A[], int n, int target)
样例1
输入:
3
1 3 5
2
输出:
1
#include <stdio.h> #include <malloc.h> int searchInsert(int A[], int n, int target){ int low = 0; int high = n - 1; int index; //未查找到时显示应该插入的索引 //使用二分查找target在不在A中 while(low <= high) { int mid = (low + high)/2; if(A[mid] == target) { return mid; }else if(A[mid] < target) { low = mid + 1; index = low; }else{ high = mid - 1; index = high + 1; } } return index; } int main(int argc, char **argv) { int i,n,result,target; scanf("%d",&n); int *a = (int *)malloc(n * sizeof(int)); for(i=0;i<n;i++){ scanf("%d",&a[i]); } scanf("%d",&target); result = searchInsert(a,n,target); printf("%d",result); return 0; }
相关文章推荐
- 泡面吧” “计蒜客” 挑战难题 第16题:爬楼梯
- 【计蒜客系列】挑战难题9:元素移除
- 【计蒜客系列】挑战难题8:字符串长度
- 【计蒜客系列】挑战难题5:矩阵翻转
- 【计蒜客系列】挑战难题4:简单斐波那契
- 【计蒜客系列】挑战难题2:整除问题
- 【计蒜客系列】挑战难题1:A+B+C问题
- 计蒜客第三场 -- A 腾讯课堂的物理实验
- 计蒜客蓝桥杯模拟赛5 引爆炸弹
- 计蒜客蓝桥杯模拟赛 九宫格
- 2017 计蒜之道 初赛 第三场
- 计蒜客 微软项目经理的挑选方案
- 计蒜客 百度地图的实时路况
- 计蒜客—程序设计竞赛入门
- 2016 计蒜之道 复赛 一些简单题的Solution
- 计蒜客——灌溉(最小生成树)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 I. Barty's Computer(哈希||字典树)
- 计蒜客NOIP提高组模拟Day2,Pro1蒜头君的兔子
- 2017 计蒜之道 初赛 第五场 A. UCloud 机房的网络搭建
- 计蒜客--天上的星星