找出有序数组中绝对值最小的元素
来源:互联网 发布:淘宝卖返利商品处罚 编辑:程序博客网 时间:2024/05/06 06:55
给定一个有序整数序列(非递减序),可能包含负数,找出其中绝对值最小的元素,比如给定序列 -5, -3, -1, 2, 8 则返回-1。
思路:
由于给定序列是有序的,而这又是搜索问题,所以首先想到二分搜索法,只不过这个二分法比普通的二分法稍微麻烦点,可以分为下面几种情况
- 如果给定的序列中所有的数都是正数,那么数组的第一个元素即是结果。
- 如果给定的序列中所有的数都是负数,那么数组的最后一个元素即是结果。
- 如果给定的序列中既有正数又有负数,那么绝对值得最小值一定出现在正数和负数的连接处。
#include <stdio.h>#include <math.h>#include <stdlib.h>#define true 1#define false 0int SameSign(int a, int b){ if (a * b > 0) return true; else return false;}// 找出一个非递减序整数序列中绝对值最小的数int MinimumAbsoluteValue(int* a, int n){ // Only one number in array if (n == 1) { return a[0]; } // All numbers in array have the same sign if (SameSign(a[0], a[n-1])) { return (a[0]>=0)? a[0] : a[n-1] ; } // Binary search int l = 0 ; int r = n-1 ; while(l < r) { if (l + 1 == r) { return abs(a[l]) < abs(a[r]) ? a[l] : a[r] ; } int m = (l + r) /2 ; if (SameSign(a[m], a[r])) { r = m; } else { l = m ; } } return -1;}int main(int argc, const char * argv[]){ int a[5] = {-3,-2,-1,5,6}; printf("%d\n",MinimumAbsoluteValue(a, 5)); return 0;}
0 0
- 找出有序数组中绝对值最小的元素
- 找出有序数组中绝对值最小的元素
- 找出有序数组中绝对值最小的数
- 面试题81:有序数组中绝对值最小的元素
- 求数组中绝对值最小的元素
- 找出有序数组中的绝对值的最大值
- 有序数组最小绝对值。
- 找出整数数组中两个数差值的绝对值最小
- 找出整数数组中两个数差值的绝对值最小
- 找出数组中最小的元素
- 找出旋转数组中最小的元素
- 求升序数组中绝对值最小的元素
- 找出两个有序数组中相同的元素
- 寻找有序数组的反转数组中最小的元素
- 每日一题(28) - 找出绝对值最小的元素
- 二分查找的一个题---找出排序数组中绝对值最小的数
- 找出数组中最小的k个元素
- 找出数组中最小的k个元素
- Hbase 常用工具类
- WIFI基本知识整理
- Mysql只Union用法
- 实现键值对存储(一):什么是键值对存储,为什么要实现它
- Excel导入导出
- 找出有序数组中绝对值最小的元素
- 神仙是个大SB
- 数据添加界面
- 防止Android程序被系统kill掉的处理方法
- 程序员 谨防猝死
- mysal5.X修改root的密码
- java取得网卡物理地址
- Web3D 2014 Paper概览
- iOS 截图 截取屏幕