bsearch的溢出问题

在java中为了避免 low+high溢出,可以用无符号右移:正数高位补0,负数高位补1

int mid = (low + high) >>> 1;

如果是在c++中,那么需要先转换为unsigned的再移位

int a=100;
int b;
b=((unsigned int)a)>>1;

或者 int mid = low + ((high - low) / 2);

public static int binarySearch(int[] a, int target) {
 int low = 0;
 int high = a.length - 1;
   while (low <= high) {
     int mid = (low + high) >>> 1;
     int midVal = a[mid];
     if (midVal < target)
         low = mid + 1;
     else if (midVal > target)
         high = mid - 1;
     else
         return mid;
   }
   return -1;
 }

  

时间: 2024-10-20 21:49:41

bsearch的溢出问题的相关文章

Tomcat内存溢出解决办法

使用Java程序从数据库中查询大量的数据时出现异常:java.lang.OutOfMemoryError: Java heap space在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息.JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等

如何将超级大(肯定溢出)的数用数组来表示

算法原理:以2^10000为例 在最高数组位以2的幂次相乘,当最高位>10,将高位保存在低一位的数组中2^5 在数组中以23形式保存,最后以反向输出 /*在程序中如果要是表示2^1000次方形式,明显肯定溢出,如果用数组形式表示嗯*/ #include<stdlib.h> #include<stdio.h> #define ARRAY_LEN 4000 int main() { int ar[ARRAY_LEN]={0}; int i,j,print_flag=0,jinw;

C 语言中用bsearch()实现查找操作

C语言中可以用bsearch()实现二分查找.同qsort()一样,bsearch()也包含在库中,且同样要自定义比较子函数.其原型如下: void *bsearch(const void *key, const void *base, size_t nmem, size_t size, int (*comp)(const void *, const void *)); 头文件:#include<stdlib.h> key指向所要查找的元素,base指向进行查找的数组,nmem为查找长度,一般

jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space

使用myeclipse启动部署在tomcat7下的三个项目报出java.lang.OutOfMemoryError: PermGen space 解决办法: 在myeclipse中加大jvm内存方法:Window->Preferences->Myeclipse->Services->Tomcat->Tomcat 6.x->JDK,在Optional Java VM arguments:下边的输入框里输入:-Xms128m -Xmx512m -XX:PermSize=12

Reverse Integer - 反转一个int,溢出时返回0

Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 若反转的数溢出,直接返回0 可以用计算结果来判断溢出,也可以用因数来判断 Java代码实现: 1 public class ReverseInteger { 2 public static int reverseInt(int x){ 3 if (x == 0) { 4 return

有效解决Android加载大图片时内存溢出的问题

首先解析一下基本的知识: 位图模式,bitmap颜色位数是1位 灰度模式,bitmap颜色位数是8位,和256色一样 RGB模式,bitmap颜色位数是24位 在RGB模式下,一个像素对应的是红.绿.蓝三个字节 CMYK模式,bitmap颜色位数是32位  在CMYK模式下,一个像素对应的是青.品.黄.黑四个字节 图像文件的字节数(Byte) = 图像分辨率*颜色深度/8(bit/8) 例如:一幅640*480图像分辨率.RGB色一般为24位真彩色,图像未经压缩的数据容量为:640X480X24

记一次java程序内存溢出问题

一个自然语言处理程序,在封装为web-service后,部署到线上运行. 但最近出现了内存溢出的情况,频繁的out of memory. 先盲目尝试在启动脚本中增加-XX:-UseGCOverheadLimit. 因为根据原因未找到,依然频繁的out of memory,只能一直观察jstat -gcutil <pid>,看到老生代内存降不下来时,重启程序. 服务程序很简单,简单接收参数,自然语言处理,返回数据,除了自然语言处理模块,都是方法参数,不会出现内存泄漏的情况. 第一次解决这种内存溢

java堆溢出

在Eclipse 配置运行参数或者在命令行中加上参数 eclipse 安装MAT插件,使用. 虚拟机栈内存溢出: 创建很多线程导致内存溢出,可以减少最大堆和减少栈容量. 方法区和运行时常量池溢出 在jdk1.6中intern()方法会把首次遇到的字符串实例复制到永久代.而由StringBuilder创建的字符串实例在java堆上,所以不是同一个引用.而JDK1.7的实现知识在常量池中记录首次出现的引用."java"这个字符串在执行之前就已经出现过了. 方法区溢出 大量产生java类的应

Webloginc 内存溢出解决方法

  Webloginc 内存溢出解决方法  : javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space 解决方法: 1.在base_domain 域下找到startWebLogic.bat 文件,然后打开编辑, 2.然后加入以下的代码 JAVA_OPTS='-Xms512m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=25