双指针-15. 三数之和
文章目录1.题解2.机考代码3.知识点讲解1.res.add(Arrays.asList(nums[i], nums[l], nums[r]));2.Arrays常用方法大厂机考 / 算法题里 Arrays 只需要掌握这 5 个1. Arrays.sort(nums) —— 排序最常用2. Arrays.toString(nums) —— 打印数组3. Arrays.asList(...) —— 快速生成 List4. Arrays.binarySearch(nums, target) —— 二分查找5. Arrays.copyOf(nums, newLength) —— 数组复制极简总结背这个就行力扣地址 中等15. 三数之和1.题解classSolution{publicListListIntegerthreeSum(int[]nums){ListListIntegerresnewArrayList();Arrays.sort(nums);for(inti0;inums.length;i){if(i0nums[i]nums[i-1])continue;intli1,rnums.length-1;while(lr){intsumnums[i]nums[l]nums[r];if(sum0){res.add(Arrays.asList(nums[i],nums[l],nums[r]));// 去重while(lrnums[l]nums[l1])l;while(lrnums[r]nums[r-1])r--;l;r--;}elseif(sum0)l;elser--;}}returnres;}}2.机考代码importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.Scanner;publicclassMain{publicstaticListListIntegerthreeSum(int[]nums){ListListIntegerresnewArrayList();Arrays.sort(nums);for(inti0;inums.length;i){// 去重if(i0nums[i]nums[i-1])continue;intli1,rnums.length-1;while(lr){intsumnums[i]nums[l]nums[r];if(sum0){res.add(Arrays.asList(nums[i],nums[l],nums[r]));// 去重while(lrnums[l]nums[l1])l;while(lrnums[r]nums[r-1])r--;l;r--;}elseif(sum0)l;elser--;}}returnres;}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);// 输入格式第一行输入数组长度第二行输入数组元素intnsc.nextInt();int[]numsnewint[n];for(inti0;in;i){nums[i]sc.nextInt();}// 调用算法ListListIntegerresultthreeSum(nums);// 输出结果机考标准格式for(ListIntegerlist:result){System.out.println(list);}}}3.知识点讲解1.res.add(Arrays.asList(nums[i], nums[l], nums[r]));Arrays.asList(3,2,8)把这几个元素转成List2.Arrays常用方法大厂机考 / 算法题里 Arrays 只需要掌握这 5 个其他都不用记算法里几乎用不到。1. Arrays.sort(nums) —— 排序最常用作用对数组从小到大排序。场景两数之和、三数之和、四数之和贪心、双指针、去重int[]nums{-1,0,1,2};Arrays.sort(nums);// 结果[-1, 0, 1, 2]2. Arrays.toString(nums) —— 打印数组作用把数组变成好看的字符串方便调试/输出。直接打印数组名是地址必须用这个。int[]a{1,2,3};System.out.println(Arrays.toString(a));// 输出[1, 2, 3]3. Arrays.asList(…) —— 快速生成 List作用把几个元素 / 数组转成 List。你三数之和那题就在用。ListIntegerlistArrays.asList(1,2,3);// 你那题写法res.add(Arrays.asList(nums[i],nums[l],nums[r]));注意返回的 List不能 add/remove但算法题只用来存结果完全够用。4. Arrays.binarySearch(nums, target) —— 二分查找作用在已排序数组中找 target返回下标。找不到返回负数。intidxArrays.binarySearch(nums,5);5. Arrays.copyOf(nums, newLength) —— 数组复制作用复制一个新数组。场景不想修改原数组时。int[]newArrArrays.copyOf(nums,nums.length);极简总结背这个就行排序Arrays.sort(nums)打印Arrays.toString(nums)转ListArrays.asList(a,b,c)二分Arrays.binarySearch复制Arrays.copyOf机考/算法题 99% 只用这 5 个其他方法一律不用看。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2466529.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!