小算法----寻找插入元素的位置
来源:互联网 发布:登陆淘宝账号 编辑:程序博客网 时间:2024/06/02 07:29
题目如下:
给定一个已经升序排好序的数组,以及一个数 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。
第二行输入 n 个整数,表示数组A[n]
。
第三行输入 target。
输出格式
输出一行,为要求返回的结果。
样例输入
31 3 52
样例输出
1
找到,再遍历一遍数组,找到该元素应该插入的位置。所以,我写了如下代码:
#include<stdio.h>#include<malloc.h>#include<assert.h>int findInsertPos(int arr[], int num, int target){assert(arr);if (num <= 0){printf("元素个数错误");return -1;;}int left = 0;int right = num - 1;int i = 0;int minIndex = 0;while (left <= right){int middle = (left & right) + ((left | right) >> 1);if (arr[middle] == target){return middle;}else if (arr[middle] < target){left = middle + 1;}else{right = middle - 1;}}for (i = 0; i < num; i++){if (target < arr[i])return i;}}int main(){int num = 0;int i = 0;int target = 0;int *arr = NULL;scanf("%d",&num);if(num > 0){arr = (int *)malloc(num*sizeof(int));if (NULL == arr){printf("out of memory.");}}else return;for (i = 0;i < num; i++){scanf("%d",arr+i);}scanf("%d",&target);int ret = findInsertPos(arr,num,target);printf("%d",ret);free(arr);arr = NULL;return 0;}
这段代码在我自己的vs下完全运行通过,并且可以得到正确的答案。然而,acm不通
过。总觉得运行超时,所以,利用GetTickCount()函数(所在的头文件:windows.h)
测试程序的运行时间,所得结果是远远超过题目的限时时间。
在草稿纸上推理一番:我们没有必要分情况,直接遍历一次就好了。acm通过的代码展
示:
#include<stdio.h>#include<malloc.h>#include<assert.h>int findInsertPos(int arr[], int num, int target){assert(arr);if (num <= 0){printf("元素个数错误");return -1;;}int i = 0;for (i = 0; i < num; i++){if (target <= arr[i])return i;}}int main(){int num = 0;int i = 0;int target = 0;int *arr = NULL;int ret = 0;scanf("%d", &num);if (num > 0){arr = (int *)malloc(num*sizeof(int));if (NULL == arr){printf("out of memory.");}}elsereturn 0;for (i = 0;i < num; i++){scanf("%d", arr + i);}scanf("%d", &target);if (ret >= 0){ret = findInsertPos(arr, num, target);printf("%d", ret);}free(arr);arr = NULL;return 0;}
这样就符合题目要求,因为数组是升序,所以一趟循环就好了。题目看似和简单,但
是,算法最优就很重要了。
0 0
- 小算法----寻找插入元素的位置
- 数组中寻找插入位置算法
- 寻找有序数组数组的插入位置
- Search Insert Position 寻找插入的位置
- 算法:寻找第K小元素
- python寻找插入位置
- 寻找插入位置
- 【计蒜课】寻找插入位置
- 寻找插入位置
- 计蒜客 寻找插入位置
- 寻找第二小元素
- 寻找第二小元素
- 计蒜客010-寻找插入位置
- Java - 计蒜客 - 寻找插入位置
- 光标位置插入元素
- 寻找序列的插入位置 Search Insert Position
- [Leetcode] Search Insert Position 寻找插入的位置
- 算法导论习题:寻找第2小元素
- android登录界面小案例
- 6.lz中学
- 总结一下模拟的各种库函数
- 关于二叉树遍历及二叉树面试题目
- 基于Python,Selenium和PhantomJS实现动态页面爬取
- 小算法----寻找插入元素的位置
- 做一个GPSCar类,要求继承Car类,并实现GPS接口
- 浅拷贝和深拷贝
- Poj 2112 Optimal Milking【Floyd+二分+最大流Dinic】
- 如何检测网站的活跃用户与流失用户
- 数据库的隔离级别
- 视频 帧加密=真加密
- poj 3020 Antenna Placement
- 生命周期和画面跳转