牛客编程tips(数组、列表、字符串)
一、输入输出一般技巧
1、解决多行的输入输出
描述
Java代码
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[][] arr = new int[n][m];
for(int i=0;i<n;i++){
for(int j = 0;j<m;j++){
arr[i][j] = sc.nextInt();
}
}
//System.out.println(minPathSum(arr));
二、数组/集合一般技巧
2、获取数组任意子串
//2 获取数组任意子串
//2.1 任意指定位置
int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8};
int[] subarr = Arrays.copyOfRange(arr1,0,3); //[0,3)
System.out.println(Arrays.toString(subarr)); //[1,2,3]
//2.2 指定从头获取出n个元素
int[] subarr2 = Arrays.copyOf(arr1,4);
System.out.println(Arrays.toString(subarr2)); //[1,2,3,4] 从数组头复制出4个元素
3、String数组转List
String[] strings = {"1", "2", "3"};
List<String> strings1 = Arrays.asList(strings);
4、int数组转List
//方法1:
int[] arr4 = {1, 2, 3, 4, 5, 6, 7};
List<Integer> collect = Arrays.stream(arr4).boxed().collect(Collectors.toList());
//方法2:
List<int[]> ints = Arrays.asList(arr4); //此方法不适应于int[]
List<String> strings2 = Arrays.asList(strings); //此方法适应于String[]
5、List转int /Long数组
//5 List转int /Long数组
//5.1 List(内部是Int型)转int[]
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);
//方式1:intValue
int[] ints1 = arrayList.stream().mapToInt(Integer::intValue).toArray();
//方式2:valueOf
int[] ints2 = arrayList.stream().mapToInt(Integer::valueOf).toArray();
System.out.println(Arrays.toString(ints1)); //[1, 2, 3, 4]
System.out.println(Arrays.toString(ints2)); //[1, 2, 3, 4]
//5.2 List是内部是String元素 如下
ArrayList<String> arrayList2 = new ArrayList<>();
arrayList2.add("1");arrayList2.add("2");arrayList2.add("3");arrayList2.add("4");
int[] ints3 = arrayList2.stream().mapToInt(Integer::valueOf).toArray(); //此时无法使用Integer::intValue
System.out.println(Arrays.toString(ints3)); //[1, 2, 3, 4]
//5.3 List转Long数组
long[] longs = arrayList.stream().mapToLong(Integer::longValue).toArray(); //[1,2,3,4] ---->> [1, 2, 3, 4]
long[] longs2 = arrayList2.stream().mapToLong(Integer::valueOf).toArray(); //["1","2","3","4"] ---->> [1, 2, 3, 4]
System.out.println(Arrays.toString(longs)); //---->> [1, 2, 3, 4]
System.out.println(Arrays.toString(longs2)); //---->> [1, 2, 3, 4]
6、List的求和
//方法1:list求和
Integer integer = sumList.stream().reduce(Integer::sum).orElse(0);
System.out.println(integer); //10
//方法2:转换为数组求和
int sum = sumList.stream().mapToInt(Integer::intValue).sum();
System.out.println(sum); //10
7、数组的直接求和
//7、数组的求和
int sum1 = Arrays.stream(arr4).sum();
System.out.println(+sum1); //[1,2,3,4,5,6,7] ---->> 28
三、字符串相关技巧
8、截取任意长度字符串
String s1 = "我是中国人";
String subStr = s1.substring(0,2);
System.out.println(subStr); //我是
9、字符串转char数组
char[] chars = s1.toCharArray();
System.out.println(chars);
10、char数组转字符串
//10.1 全部转
String s2 = String.valueOf(chars);
System.out.println(s2);
//10.2 部分转
String s3 = String.valueOf(chars,1,2); //第二参数是个数,第一参数是偏移量
System.out.println(s3);