package web;
import java.util.Arrays;
/**
* 鏈変竴涓凡緇忔帓搴忕殑鏁扮粍錛堝崌搴忥級錛?nbsp;鏁扮粍涓彲鑳芥湁姝f暟銆佽礋鏁版垨0錛屾眰鏁扮粍涓厓绱犵殑緇濆鍊兼渶灝忕殑鏁幫紝 瑕佹眰錛屼笉鑳界敤欏哄簭姣旇緝鐨勬柟娉?nbsp;姹傜粷瀵瑰兼渶灝忕殑鏁?br /> *
* @author mayw
*/
public class FindMinValue {
/**
*
* @param source
* 鍘熸暟緇?br /> * @return 緇濆鍊兼渶灝忕殑鏁?br /> * @throws Exception
*/
public static int[] getMinAbsoluteValue(final int[] source) throws Exception {
int[] rvs = null;
if(source==null){
throw new Exception("闈炴硶鐨勫師鏁扮粍, 瀵硅薄涓簄ull");
}
int index = binarySearch(source,0);
int insertPos = -1 - index;
if(index >= 0){
return new int[]{0}; // 瀛樺湪0, 0緇濆鍊兼渶灝?nbsp;
}else if(source.length==1){
return new int[]{source[0]};
}else if(insertPos == source.length){
return new int[]{source[source.length - 1]};
}else if(insertPos == 0){
return new int[]{source[0]};
}else if(Math.abs(source[insertPos]) > Math.abs(source[insertPos - 1])){
return new int[]{source[insertPos - 1]};
}else if(Math.abs(source[insertPos]) == Math.abs(source[insertPos - 1])){
return new int[]{source[insertPos - 1],source[insertPos],};
}else{
return new int[]{source[insertPos]};
}
// int rv = index >= 0 ? 0
// : source[insertPos == source.length ? source.length - 1
// : insertPos];
// if(){
//
// }
// return index >= 0 ? 0
// : source[insertPos == source.length ? source.length - 1
// : insertPos];
}
/**
* 浣跨敤浜屽垎鎼滅儲(chǔ)娉曟潵鎼滅儲(chǔ)鎸囧畾鐨?nbsp;int 鍨嬫暟緇勶紝浠ヨ幏寰楁寚瀹氱殑鍊箋?br /> *
* @param source
* 瑕佹煡鎵劇殑鐩爣鏁扮粍
* @param target
* 瑕佹煡鎵劇殑鏁?br /> * @return 濡傛灉瀹冨寘鍚湪鏁扮粍涓紝鍒欒繑鍥炴悳绱㈤敭鐨勭儲(chǔ)寮曪紱 鍚﹀垯榪斿洖 (-(鎻掑叆鐐? - 1)銆?nbsp;鎻掑叆鐐?br /> * 琚畾涔変負(fù)灝嗛敭鎻掑叆鏁扮粍鐨勯偅涓鐐癸細(xì)鍗崇涓涓ぇ浜庢閿殑鍏冪礌绱㈠紩錛?nbsp;濡傛灉鏁扮粍涓殑鎵鏈夊厓绱犻兘灝忎簬鎸囧畾鐨勯敭錛屽垯涓?nbsp;a.length銆?br /> * 娉ㄦ剰錛岃繖淇濊瘉浜嗗綋涓斾粎褰撴閿鎵懼埌鏃訛紝榪斿洖鐨勫煎皢 >= 0銆?br /> */
public static int binarySearch(final int[] source, int target) {
int low = 0;
int high = source.length - 1;
while(low<=high){
int midIdx = (low+high)>>1; // 鍘諱腑闂寸儲(chǔ)寮?/span>
int midVal = source[midIdx]; // 鍘諱腑闂村?/span>
if(target < midVal){
high = midIdx - 1; // 鍘諱腑闂寸儲(chǔ)寮曠殑鍓嶅崐閮ㄥ垎, 涓嶅寘鍚腑闂寸儲(chǔ)寮?/span>
}else if(target > midVal){
low = midIdx + 1; // 鍘諱腑闂寸儲(chǔ)寮曠殑鍚庡崐閮ㄥ垎, 涓嶅寘鍚腑闂寸儲(chǔ)寮?/span>
}else{
return midIdx; // 榪斿洖褰撳墠绱㈠紩
}
}
return -low-1;
}
public static void main(String[] args) throws Exception {
System.out.println(Arrays.toString(getMinAbsoluteValue(new int[]{0})));
System.out.println(Arrays.toString(getMinAbsoluteValue(new int[]{-1})));
System.out.println(Arrays.toString(getMinAbsoluteValue(new int[]{1})));
System.out.println(Arrays.toString(getMinAbsoluteValue(new int[]{-4,-2,-1})));
System.out.println(Arrays.toString(getMinAbsoluteValue(new int[]{-4,-2,-1,1,2,3,4})));
System.out.println(Arrays.toString(getMinAbsoluteValue(new int[]{-4,-2,-1,2,3,4})));
System.out.println(Arrays.toString(getMinAbsoluteValue(new int[]{-4,-2,-2,1,3,4})));
System.out.println(Arrays.toString(getMinAbsoluteValue(new int[]{1,2,3,4})));
}
}