2020-11-06算法二分查找

1106算法二分查找

一、算法

1.二分查找

package com.xinzhi;

/**
 * @author 荊少奇
 * @date 2020/11/6
 */
class BinarySearchNonRecursive {
        public static void main(String[] args) {
            //定義邊界
            int[] arr = {15,85,35,155,247,84,694};
            int index = binarySearch(arr, 15);
            if (index != -1) {
                System.out.println("找到了,下標為:" + index);
            }
        }
    //處理邊界
        private static int binarySearch(int[] arr, int target) {
            int left = 0;
            int right = arr.length - 1;
            //查找中間值mid,還沒找到
            while (left <= right) {
                int mid = (left + right) / 2;
                if (arr[mid] == target) {
                    return mid;
                } else if (arr[mid] > target) {
                    right = mid; // 向左找
                } else {
                    left = mid; // 向右找
                }
            }
            return -1;
        }
}


2.時間復(fù)雜(O(n))

時間復(fù)雜度(Time complexity)是一個函數(shù),它定性描述該算法的運行時間。

空間復(fù)雜度(Space Complexity)是對一個算法在運行過程中臨時占用存儲空間大小的量度,記做S(n)=O(f(n))。

隨機數(shù)

Random random = new Random();

獲取當前時間

long data = System.currentTimeMillis();

3.String

char charAt(值) 語法 :字符串名.charAt(值);  返回值為 char 類型。從字符串中取出指定位置的字符

sta.getBytes() 指定數(shù)值轉(zhuǎn)成byte類型

public String concat(String str) 將參數(shù)中的字符串str連接到當前字符串的后面,效果等價于"+"。

String trim() 截去字符串兩端的空格,但對于中間的空格不處理。

regionMatches(boolean b, int firstStart, String other, int otherStart, int length) 從當前字符串的firstStart位置開始比較,取長度為length的一個子字符串,other字符串從otherStart位置開始,指定另外一個長度為length的字符串,兩字符串比較,當b為true時字符串不區(qū)分大小寫。

4.可變參數(shù)

工具類

帶有“s”的是工具類

工具類絕大多數(shù)為靜態(tài)類

Arrays的折半查找法

 int[] num = {15,85,35,155,247,84,694};
 int i = Arrays.binarySearch(num,694);
 System.out.println(i);

可變參數(shù)

 int sum = sum(1,5,8,3,7,57);
 System.out.println(sum);
 
 public static int sum(int... sum){
      int snum = 0;
      for (int i = 0; i < sum.length; i++) {
          snum += sum[i];
      }
      return snum;

可變參數(shù)必須放在最后,一個方法只有一個可變參數(shù)

單核排序和多核排序

單核

int[] num = {15,85,35,155,247,84,694};
Arrays.Sort(num);
    for (int unm: num) {
        System.out.println(unm);
    }

多核

int[] num = {15,85,35,155,247,84,694};
//paraller是多核
Arrays.parallelSort(num);
    for (int unm: num) {
        System.out.println(unm);
    }

擴容數(shù)組

int[] aa = Arrays.copyOf(num,100);
for (int unm:aa) {
   System.out.println(unm);
}

Math數(shù)學(xué)類

向上取整

@Test
   public void testMath(){
       System.out.println(Math.ceil(2.5));
   }

向下取整

 @Test
    public void testMath(){
        System.out.println(Math.floor(2.5));
    }

Data

public Date():分配Data對象并初始化此對象。以表示分配它的時間。

public Data(Long data):分配Data對象并初始化此對象,以表示自從基準時間,即1970年1月1日00:00:00 以來的指定毫秒數(shù)

 Date data = new Date();
 long time = data.getTime();
 System.out.println(time);
 SimpleDateFormat simpleTimeZone = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
 String forame = simpleTimeZone.format(data);
 System.out.println(forame);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容