> 文档中心 > 「Acwing算法合集」

「Acwing算法合集」


力扣算法系列文章


一、数的范围

题目如下:

给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。
对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。
如果数组中不存在该元素,则返回 -1 -1。

输入格式
第一行包含整数 n 和 q,表示数组长度和询问个数。
第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。
接下来 q 行,每行包含一个整数 k,表示一个询问元素。

输出格式
共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。
如果数组中不存在该元素,则返回 -1 -1。

数据范围
1≤n≤100000
1≤q≤10000
1≤k≤10000
输入样例
6 3
1 2 2 3 3 4
3
4
5
输出样例:
3 4
5 5
-1 -1

代码如下:

import java.util.*;public class Main{    public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[] arr = new int[n]; for(int i = 0; i < n; ++i){     arr[i] = sc.nextInt(); } while(k-- > 0){     int num = sc.nextInt();     int l = 0;     int r = n - 1;     while(l < r){  int mid = l + ((r -l) >> 1);  if(arr[mid] < num){      l = mid + 1;  }else{      r = mid;  }     }     if(arr[l] != num){  System.out.println("-1 -1");     }else{  System.out.print(l + " ");  l = 0;  r = n - 1;  while(l < r){      int mid = l +((r - l + 1) >> 1);      if(arr[mid] > num){   r = mid - 1;      }else{   l = mid;      }  }  System.out.println(l);     } }    }}

运行结果:

在这里插入图片描述


二、数的三次方根

题目如下:

给定一个浮点数 n,求它的三次方根。

输入格式
共一行,包含一个浮点数 n。

输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留 6 位小数。

数据范围
−10000≤n≤10000
输入样例:
1000.00
输出样例:
10.000000

代码如下:

import java.util.*;public class Main{    public static void main(String[] args){ Scanner sc = new Scanner(System.in); double n = sc.nextDouble(); double l = -100; double r = 100; while(r - l > 1e-8){     double mid = l + ((r - l) / 2);     if(mid * mid * mid < n){  l = mid;     }     if(mid * mid * mid > n){  r = mid;     } } System.out.println(String.format("%.6f", l));    }}

运行结果:

在这里插入图片描述


三、 高精度加法

题目如下:

给定两个正整数(不含前导 0),计算它们的和。

输入格式
共两行,每行包含一个整数。

输出格式
共一行,包含所求的和。

数据范围
1≤整数长度≤100000
输入样例:
12
23
输出样例:
35

代码如下:

import java.math.BigInteger;import java.util.*;public class Main{    public static void main(String[] args){ Scanner sc = new Scanner(System.in); String o1 = sc.next(); String o2 = sc.next(); BigInteger b1 = new BigInteger(o1); BigInteger b2 = new BigInteger(o2); System.out.println(b1.add(b2));    }}

运行结果:

在这里插入图片描述


四、 高精度减法

题目如下:

给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。

输入格式
共两行,每行包含一个整数。

输出格式
共一行,包含所求的差。

数据范围
1≤整数长度≤10^5
输入样例:
32
11
输出样例:
21

代码如下:

import java.math.BigInteger;import java.util.*;public class Main{    public static void main(String[] args){ Scanner sc = new Scanner(System.in); String o1 = sc.next(); String o2 = sc.next(); BigInteger b1 = new BigInteger(o1); BigInteger b2 = new BigInteger(o2); System.out.println(b1.subtract(b2));    }}

运行结果:

在这里插入图片描述