zoukankan      html  css  js  c++  java
  • Java数组相关算法一

    一、数组反转 

      1、方法一:创建新数组
    1 int[] arr = {6,29,0,4,3};
    2 int[] arr2 = new int[arr.length];
    3 for (int i = 0; i < arr.length; i++) {
    4     arr2[i]=arr[arr.length-1-i];
    5 }
    6 System.out.println(Arrays.toString(arr2));
      2、方法二:交换
    1 int[] arr = {6,29,0,4,3};
    2 int mid = arr.length/2;
    3 for (int i = 0,j=arr.length-1; i < mid; i++,j--) {
    4     int a = arr[i];
    5     arr[i] = arr[j];
    6     arr[j] = a;
    7 }
    8 System.out.println(Arrays.toString(arr));

    二、查找数组中指定元素的索引位置

      1、方法一:遍历
      
     1 public class FindArraryValue {
     2     public static void main(String[] args) {
     3         int[] arr = { 6, 29, 1, 4, 3,100,80,1000,600 };
     4         System.out.println(find1(arr, 6));//1
     5     }
     6 
     7     public static int findValue(int[] a, int v) {
     8         for (int i = 0; i < a.length; i++) {
     9             if (a[i] == v) {
    10                 return i;
    11             }
    12         }
    13         return -1;
    14     }
    15  }
      2、方法二:二分查找法(必须先排序)
     1 public class FindArraryValue {
     2     public static void main(String[] args) {
     3         int[] arr = { 6, 29, 1, 4, 3,100,80,1000,600 };
     4         Arrays.sort(arr);
     5         System.out.println(Arrays.toString(arr));
     6         //[1, 3, 4, 6, 29, 80, 100, 600, 1000]
     7         System.out.println(binaryResearch(arr, 0, arr.length, 6));
     8         //[1, 3, 4, 6, 29, 80, 100, 600, 1000]
     9         System.out.println(Arrays.binarySearch(arr, 6));
    10     }
    11 
    12     public static int binaryResearch(int[] a, int fromIndex, int toIndex, int v) {
    13         if (a == null) {
    14             throw new RuntimeException("数组不能为空");
    15         }
    16         if (fromIndex < 0) {
    17             throw new RuntimeException("开始索引不能为负数");
    18         }
    19         if (fromIndex > toIndex) {
    20             throw new RuntimeException("开始索引不能小于结束索引");
    21         }
    22         if (fromIndex > a.length) {
    23             throw new RuntimeException("结束索引不能大于数组的长度");
    24         }
    25         int low = fromIndex;
    26         int high = toIndex - 1;
    27         while (low <= high) {
    28             //无符号右移一位,即除以2
    29             int mid = (high + low) >>> 1;
    30             if (a[mid] < v) {
    31                 low = mid + 1;
    32             } else if (a[mid] > v) {
    33                 high = mid - 1;
    34             } else {
    35                 return mid;
    36             }
    37         }
           //未找到
    38 return -1; 39 } 40 }

    三、杨辉三角

      1、方法一:直接创建二维数组

     1 public class Yang {
     2     public static void main(String[] args) {
     3         int yang[][] = new int[10][10];
     4 
     5         yang[0][0]=1;
     6         yang[1][0]=1;
     7         yang[1][1]=1;
     8         for (int i = 2; i <10 ; i++) {
     9             yang[i][0]=1;
    10             yang[i][i]=1;
    11             for (int j = 1; j < i; j++) {
    12                 yang[i][j]=yang[i-1][j-1]+yang[i-1][j];
    13             }
    14         }
    15 
    16         for (int i = 0; i <10 ; i++) {
    17             for (int j = 0; j <= i; j++) {
    18                 System.out.print(yang[i][j]+"  ");
    19             }
    20             System.out.println();
    21         }
    22     }
    23 }    

      2、方法二:在二层循环中创建一位数组(推荐)

     1 public class Yang {
     2     public static void main(String[] args) {
     3         int yang[][] = new int[10][];    
     4         for (int i = 0; i < yang.length; i++) {
     5             yang[i]=new int[i+1];
     6             yang[i][0]=1;
     7             yang[i][i]=1;
     8             //for (int j = 1; j < yang[i].length-1; j++) {
     9             for (int j = 1; j < i; j++) {
    10                 yang[i][j]=yang[i-1][j-1]+yang[i-1][j];
    11             }
    12         }
    13         
    14         for (int i = 0; i <10 ; i++) {
    15             for (int j = 0; j <= i; j++) {
    16                 System.out.print(yang[i][j]+"  ");
    17             }
    18             System.out.println();
    19         }
    20     }
    21 }

    四、九九乘法表 

     1 public class Jiujiu {
     2     public static void main(String[] args) {
     3         for (int i = 1; i < 10; i++) {
     4             for (int j = 1; j <= i; j++) {
     5                 System.out.printf("%d * %d = %d   ",j,i,i*j);
     6             }
     7             System.out.println();
     8         }
     9     }
    10 }
  • 相关阅读:
    【C++】对象模型
    【C++多线程】读写锁shared_lock/shared_mutex
    【C++多线程】共享数据的初始化保护
    【C++多线程】共享数据保护
    【C++多线程】lock_guard<T>类和unique_lock<T>类
    【C++多线程】转移线程所有权
    【C++ 】std::ref()和std::cref()
    【C++多线程】传递参数
    【C++多线程】detach()及注意
    linux 打开CHM文件
  • 原文地址:https://www.cnblogs.com/hyunbar/p/11278567.html
Copyright © 2011-2022 走看看