Modifiez la recherche binaire pour activer la recherche par plage.

Modifiez la recherche binaire pour activer la recherche par plage. La soi-disant recherche par plage consiste à trouver tous les éléments entre une valeur donnée a et b (a <= b).

Idée:
le but ultime de la recherche en demi-boucle est de créer un <= arr [mid] <= b, puis de sortir la valeur qui remplit la condition via la boucle for.

public static void slove(int[] arr,int a,int b) {
    
    
		Arrays.sort(arr);
		System.out.println("排序后的数组:");
		for(int k : arr) {
    
    
			System.out.print(k+" ");
		}
		System.out.println();
		
		System.out.println("===========\n待查区间:["+a+","+b+"]");
		
		// 查找
		int mid = 0;
		int low = 0;
		int high = arr.length - 1;
		while(low <= high) {
    
    
			mid = (low+high)/2;
			if(arr[mid] < a) {
    
    				// arr[mid]不在[a,b]中,继续移动low指针
				low = mid + 1;			
			}else if(arr[mid] > b) {
    
    		// arr[mid]不在[a,b]中,继续移动high指针
				high = mid - 1;
			}else {
    
    							// arr[mid]在[a,b]中,通过遍历判断取[a,b]中的值
				System.out.println("===========\n最终结果:");
				for (int i = low; i<=mid; i++) {
    
    
					if (arr[i]>=a) {
    
    
						System.out.print(arr[i]+" ");
					}
				}
				for(int i=mid+1; arr[i]<=b; i++) {
    
    
					System.out.print(arr[i]+" ");
				}
				return ;					// 跳出
			}
		}
	}

Je suppose que tu aimes

Origine blog.csdn.net/qq_43341057/article/details/105983089
conseillé
Classement