数组
隐0士
这个作者很懒,什么都没留下…
展开
-
NC27 集合的所有子集算法 java实现
题目描述现在有一个没有重复元素的整数集合S,求S的所有子集注意:你给出的子集中的元素必须按升序排列给出的解集中不能出现重复的元素示例1输入:[1,2,3]返回值:[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]解题思路所有子集的排列组合,就意味着要用dfs回溯了,这里只是简单的列举组合,因此还没涉及到剪枝操作,反而比较容易些。代码实现import java.util.*;public class Solution { public Arr原创 2021-07-11 17:22:00 · 382 阅读 · 0 评论 -
NC83 子数组最大乘积 算法 java实现
题目描述给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。示例1输入:[-2.5,4,0,3,0.5,8,-1]返回值:12.00000解题思路[0.5,4,0.6,3,0.5,8]题目中是子数组累乘,一定要是连续的子数组,我们向右遍历:对于0.5来说,此时最大乘积只能是0.5自己;下一位4 对于4来说,它与0.5的乘积是2,反而变小了,于是它还不如放弃前面的乘积,直接使用它自己作为当前最大的乘积,也就是从自己开始的最大乘积是4下一位数字是0.6原创 2021-07-11 16:28:43 · 167 阅读 · 0 评论 -
NC29 二维数组中的查找2算法 java实现
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。示例1输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]原创 2021-07-11 14:45:05 · 413 阅读 · 0 评论 -
NC46 加起来和为目标值的组合 算法java实现
题目描述给出一组候选数\ C C 和一个目标数\ T T,找出候选数中起来和等于\ T T 的所有组合。\ C C 中的每个数字在一个组合中只能使用一次。注意:给出一组候选数C 和一个目标数T,找出候选数中起来和等于T的所有组合。C中的每个数字在一个组合中只能使用一次。注意:题目中所有的数字(包括目标数\ T T )都是正整数组合中的数字 (a_1, a_2, … , a_ka)要按非递增排序 (a_1<=a_2<= …<=a_ka )结果中不能包含重复的组合组合之间的排原创 2021-07-10 23:16:10 · 326 阅读 · 0 评论 -
NC29 矩阵查找1 算法java实现
题目描述请写出一个高效的在m*n矩阵中判断目标值是否存在的算法,矩阵具有如下特征:每一行的数字都从左到右排序每一行的第一个数字都比上一行最后一个数字大例如:对于下面的矩阵:[[1, 3, 5, 9],[10, 11, 12, 30],[230, 300, 350, 500]]要搜索的目标值为3,返回true;示例1输入:[[1,3,5,9],[10,11,12,30],[230, 300, 350, 500]],3返回值:true解题思路代码实现import jav原创 2021-07-06 20:31:24 · 112 阅读 · 0 评论 -
NC77 调整数组顺序使奇数位于偶数前面 算法java实现
题目描述描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。示例1输入:[1,2,3,4]返回值:[1,3,2,4]示例2输入:[2,4,6,5,7]返回值:[5,7,2,4,6]解题思路可以使用插入排序法,将遇到的奇数跟左边的交换位置,直到最左边为奇数为止,这里也可以将上次移动的奇数位置记下来,重复排序直到列尾,但这样的时间复杂度为O(n*n),于是想想题目的最终结果原创 2021-07-05 21:45:20 · 198 阅读 · 0 评论 -
NC37 合并区间 算法java实现
题目描述给出一组区间,请合并所有重叠的区间。请保证合并后的区间按区间起点升序排列。示例1输入:[[10,30],[20,60],[80,100],[150,180]]返回值:[[10,60],[80,100],[150,180]]解题思路判断两个区间是否重叠,就是看一个区间的开始是不是小于另外一个区间的结束,也就是a.end>b.begin,然后由于本题的区间没有顺序,这对我们依次合并会产生干扰,因此我们需要排序,因此需先对其排序,在这里使用区间的begin进行排序,排完序后使用两个指原创 2021-07-03 23:03:27 · 480 阅读 · 0 评论 -
NC106 三个数的最大乘积 算法java实现
题目描述给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)。示例1输入:[3,4,1,2]返回值:24解题思路该题的测试用例:[2,5,3,1] , [-8,-2,-5,-1], [-5,-1,6,3],[-3,-1,5,0,2],[-1,5,0,2],还有要注意当乘积超过int的时候应该用long来存结果,通过分析可得知,这些组合中智存在两种计算方法最大乘积:1:最小次小最大 2:最大次大次次大,所以题目就编程要找出这原创 2021-06-30 08:27:56 · 162 阅读 · 0 评论 -
NC101 缺失数字 算法-java实现
题目描述从0,1,2,…,n这n+1个数中选择n个数,找出这n个数中缺失的那个数,要求O(n)尽可能小。示例1输入:[0,1,2,3,4,5,7]返回值:6示例2输入:[0,2,3]返回值:1解题思路题目中要求O(n)尽可能小,因此遍历整个数据找出下标和数字值不等于的做法就有待商榷了,为了尽可能缩短时间,可以抽象为二分法找某个数字,找出某个数字不等于他下标,当然这里不等于下标还有可能是缺失那个数字的后面的数字,因为我们先存起来这个不等于的数字后还得继续找,直到找完为止,这里还有两种情况是要原创 2021-06-29 07:49:29 · 439 阅读 · 1 评论 -
NC73 数组中出现次数超过一半的数字 算法java实现
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000示例1输入:[1,2,3,2,2,2,5,4,2]返回值:2示例2输入:[3,3,3,3,2,2,2]返回值:3示例3输入:[1]返回值:1算法思路一开始我想的是先对数组排序,然后因为多的那个数原创 2021-06-29 07:09:30 · 107 阅读 · 0 评论 -
矩阵的最小路径和算法-java实现
题目描述给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。示例1输入:[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]返回值:12解题思路先把矩阵数组列出来,方便好理解:[1,3,5,9][8,1,3,4][5,0,6,1][8,8,4,0]题目中说从最左上的元素到达最右下的元素只能通过右走或者往下走,一开始我以为可以通过贪心算法,从最左上元素出原创 2021-06-20 15:37:59 · 1090 阅读 · 0 评论