LeetCode#数组
看这个题真好看
机器学习+深度学习+leetcode+随时准备转行
展开
-
Leetcode832翻转图像
先逐行翻转,再全部0,1翻转,其实如果行翻转的时候,对应是不同的,经过下一步,就会恢复过来,不会改变,最后改变的只有在行翻转的时候对应位置是相同元素的时候,,所以只要找到行翻转时候,对应位置元素相同的进行0,1替换即可方法1:class Solution { public int[][] flipAndInvertImage(int[][] A) { int n=A.l...原创 2019-09-22 10:35:53 · 79 阅读 · 0 评论 -
Leetcode217存在重复元素
方法1:用set,因为add方法如果set里面有了会返回falseclass Solution { public boolean containsDuplicate(int[] nums) { Set<Integer> set=new HashSet(); for(int i=0;i<nums.length;i++){ ...原创 2019-09-26 20:01:50 · 68 阅读 · 0 评论 -
LeetCode167两数相加,有序数组
方法1:首先遍历整个数组,每次取值相等于确定一个数,然后用target减去他,就是另一个数,然后再遍历数组看是否有这个数,有就是breakclass Solution { public int[] twoSum(int[] numbers, int target) { int[] res=new int[2]; for(int i=0;i<numbe...原创 2019-09-26 21:03:33 · 67 阅读 · 0 评论 -
LeetCode 697数据的度
方法1:用两个map,都是以值作为key,第一个map存值和第一次出现的坐标,第二个map用来村值及对应的度,遍历整个数组,每一个数都进行判断:1如果他的度大于最大度,跟新最大度和对应的个数(通过下标和这个值第一次出现的下标相减得到),如果等于最大度,那么就要更新最大度的最小个数class Solution { public int findShortestSubArray(int[] ...原创 2019-09-27 15:42:17 · 132 阅读 · 0 评论 -
LeetCode896单调数列
方法1:先说下我想的那个最垃圾的方法。。就是从头遍历找到第一个做差不等于0的,然后标记一下他是大于0,还是小于0,然后再遍历数组,如果有不满足的就return falseclass Solution { public boolean isMonotonic(int[] A) { int flag=0; for(int i=0;i<A.length-1...原创 2019-09-27 16:19:02 · 102 阅读 · 0 评论 -
LeetCode169求众数
方法1:用一个map存放值对应出现的次数,遍历数组,没一次都用次数对比max次数,然后决定是否更新class Solution { public int majorityElement(int[] nums) { Map<Integer,Integer> map=new HashMap(); int maxci=0; int v...原创 2019-09-28 10:26:56 · 91 阅读 · 0 评论 -
Leetcode26删除重复元素
插入排序思想class Solution { public int removeDuplicates(int[] nums) { int j=0; for(int i=1;i<nums.length;i++){ while(i<nums.length&&nums[j]==nums[i]){ ...原创 2019-09-28 11:37:12 · 134 阅读 · 0 评论 -
LeetCode1两数之和
用mappublic int[] twoSum(int[] numbers, int target) { int[] result = new int[2]; Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int i = 0; i < numbers.len...原创 2019-09-28 13:52:31 · 50 阅读 · 0 评论 -
LeetCode88合并有序数组
注意一下这个从后面开始弄的,还有就是怎样把代码精简class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int len=m+n-1; int i=m-1; int j=n-1; while(i>=0&&j...原创 2019-09-28 15:15:53 · 51 阅读 · 0 评论 -
LeetCode 674最长连续递增序列
其实想法不难,只要是细节处理,真的是 有些人真的是到位 太强了class Solution { public int findLengthOfLCIS(int[] nums) { int count=0; int max=0; for(int i=0;i<nums.length;i++){ if(i==0||num...原创 2019-09-28 16:15:08 · 107 阅读 · 0 评论 -
LeetCode 989数组形式的整数加法
方法1:把k看作是一个载体,当做进位class Solution { public List<Integer> addToArrayForm(int[] A, int K) { LinkedList<Integer> l=new LinkedList(); for(int i=A.length-1;i>=0;i--){ ...原创 2019-09-29 09:45:20 · 102 阅读 · 0 评论 -
LeetCode66 加1
方法1:常规的那种class Solution { public int[] plusOne(int[] digits) { int[] res=new int[digits.length+1]; int jinwei=1; for(int i=digits.length-1;i>=0;i--){ res[i+...原创 2019-10-01 10:45:52 · 52 阅读 · 0 评论 -
LeetCode189旋转数组
方法1:模拟操作过程class Solution { public void rotate(int[] nums, int k) { int n=nums.length; k=k%n; for(int i=0;i<k;i++){ int temp=nums[n-1]; move(nums...原创 2019-10-01 14:29:46 · 107 阅读 · 0 评论 -
Leetcode164最大间隔
桶排序,n个数,n+1个桶,因为鸽巢原理,最大间隔在桶间有个问题,就是如果求索引那块代码,如果用int就报错,贼烦class Solution { public int maximumGap(int[] nums) { if(nums.length<=1){ return 0; } int len=nums....原创 2019-10-04 13:39:12 · 123 阅读 · 1 评论 -
Leetcode155最小栈
用两个栈实现的,最主要是,java中的Integer的==比较操作,只有在-127-127之间才会自动转换,如果超过这个范围,==就比较的是地址了,这个错我找了好久啊,包括在eclipse实验(用的1),我还以为是版本问题。。class MinStack { /** initialize your data structure here. */ Stack<Integer...原创 2019-10-04 16:30:42 · 47 阅读 · 0 评论 -
Leetcode414第三大的数
方法:可以去重排序,或者使用优先队列,方法很多,我用的是,先排序(未去重),然后个数小于3的直接返回最大值,否则从后开始遍历,看是否有第三个最大值,没有返回最大值class Solution { public int thirdMax(int[] nums) { Arrays.sort(nums); int len=1; if(nums.l...原创 2019-10-04 19:11:35 · 103 阅读 · 0 评论 -
Leetcode54螺旋打印矩阵
用左神一句话,就是要有宏观思想,不要去想怎么一步步走,扣边界,很多数组旋转或者什么形状打印,都宏观想一下,这个题是一圈一圈的往里打印。class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res=new LinkedList(); ...原创 2019-10-05 08:52:56 · 86 阅读 · 0 评论 -
Leetcode1013将数组分成和相等的三个部分
我就会一种方法,因为三个相等的部分,所以每一个部分就是三分之一的和,所以从头遍历,看有几个三分之一的和,如果有三个,且后面的其余部分和为0,那就是正确的class Solution { public boolean canThreePartsEqualSum(int[] A) { int sum=0; for(int i=0;i<A.length;i...原创 2019-09-26 19:43:33 · 92 阅读 · 0 评论 -
LeetCode 268缺失数字(最容易理解)
方法1:这个题,没有重复的,所以先求出总长度,然后计算1到总长度-1的累加和,然后再和sums的和做减法,就是最后的缺失值class Solution { public int missingNumber(int[] nums) { //算出和,减去。。 int n=nums.length+1; int sum=0; int...原创 2019-09-26 15:33:36 · 119 阅读 · 0 评论 -
LeetCode905按奇偶排序数组
方法1:额外空间复杂度=o(1),且只有一个for循环不使用额外空间,使用两个指针,i用来指向要换的元素,k用来遍历整个表,i到k之间一定都是奇数,因为偶数已经被换走,奇数也都过来了,特殊情况就是前面都是偶数的时候,这个时候i=k。每一个元素自己和自己交换,不影响。k遍历整个数组循环结束。class Solution { public int[] sortArrayByParity(i...原创 2019-09-22 12:59:39 · 113 阅读 · 0 评论 -
LeetCode977有序数组的平方
方法一:就是需要一个新的额外空间,从原数组的两边取数字,因为最大值不是在 左边就是在最右边,所以只需要对比两边的绝对值class Solution { public int[] sortedSquares(int[] A) { int [] a=new int[A.length]; int i=0; int j=A.length-1; ...原创 2019-09-22 15:43:16 · 59 阅读 · 0 评论 -
LeetCode561数组拆分 1
方法一:采用最笨的方法,先排序(从小到大),注意这个题不能用n方排序算法,也就是冒泡排序是用不了的,这个题可以用Arrays的sort函数(采用的是快速排序),也可以自己写一个快排或者归并排序,然后从第一个元素开始,隔一个加一下求和即可class Solution { public int arrayPairSum(int[] nums) { Arrays.sort(nu...原创 2019-09-22 16:40:35 · 104 阅读 · 1 评论 -
LeetCode1051高度检查器
方法一:采用笨法,进行排序,然后依次对比。class Solution { public int heightChecker(int[] heights) { int[] a=heights.clone();#clone方法 Arrays.sort(heights);//快速排序 int sum=0; for(int i=0...原创 2019-09-22 19:14:52 · 286 阅读 · 0 评论 -
LeetCode1160拼写单词
方法一:转成数字,然后把基准转换成计数数组(和前面的桶排序类似方法类型),然后每一次遍历单词的时候,都要用计数数组去匹配,看看是否能匹配上,匹配上就把单词中的char数量加到总sum中 public static int countCharacters(String[] words, String chars) { int count = 0; int[] jiz...原创 2019-09-22 20:16:37 · 187 阅读 · 0 评论 -
LeetCode922按奇偶排序数组 Ⅱ
方法1:使用额外空间,新建一个数组,使用两个指针分别标记偶数位和奇数位,遍历A数组,把元素分别放入新数组的对应位置,即可class Solution { public int[] sortArrayByParityII(int[] A) { int[] a=new int[A.length]; int i=0; int j=1; ...原创 2019-09-23 10:31:57 · 49 阅读 · 0 评论 -
Leetcode1200最小绝对值之差
note:找最小值,如何根据差值遍历一遍就能找到最小值,就是第一个for循,记住,初始min一定要取最大那个数,防止影想结果Integer类和List的相关类看下,属性和方法class Solution { public List<List<Integer>> minimumAbsDifference(int[] arr) { /** ...原创 2019-09-23 11:22:56 · 392 阅读 · 0 评论 -
LeetCode1122数组的相对排序
**方法一:把arr2的值当作map中的键,value对应赋值为0遍历arr1,如果存在与键值相等的元素,就value++对于不在map中的,放到另一个数组,进行排序。先按着arr2数组的顺序输出map中的元素,然后再输出另一个数组排好序的元素**class Solution { public int[] relativeSortArray(int[] arr1, int[...原创 2019-09-24 14:28:40 · 235 阅读 · 0 评论 -
LeetCode1002查找字符串
方法1:从a到z遍历每一个字符在字符串数组中每个string中的最小出现次数,这个次数就是最后结果中存在这个字符的个数。class Solution { public List<String> commonChars(String[] A) { List<String> list=new ArrayList(); for(char ...原创 2019-09-24 17:01:52 · 136 阅读 · 0 评论 -
LeetCode867转置矩阵
方法1:如果不了解矩阵的时候,不知道A[i][j]=A[j][i],可以这么做class Solution { public int[][] transpose(int[][] A) { //放在一维数组,然后再放入二维 if(A.length==0||A[0].length==0){ return A; } ...原创 2019-09-24 19:28:00 · 107 阅读 · 0 评论 -
LeetCode766托普利茨矩阵
方法1:class Solution { public boolean isToeplitzMatrix(int[][] matrix) { for(int i=0;i<matrix.length-1;i++){ for(int j=0;j<matrix[0].length-1;j++){ if(matr...原创 2019-09-25 08:31:22 · 82 阅读 · 0 评论 -
LeetCode985查询后的偶数和
方法1:直接法,遍历queries数组,每次遍历更新一次A,求出偶数和,放入answer中class Solution { public int[] sumEvenAfterQueries(int[] A, int[][] queries) { //1.遍历查询数组,每次查询都要更新A //2.结果输入到answer int[] answe...原创 2019-09-25 09:14:50 · 91 阅读 · 0 评论 -
LeetCode1170比较字符串最小字母出现频次
方法就是分别计算两个数组中每个元素最小字母出现频次,计算频次的函数我用的是桶排序的思想,然后遍历第一个数组的每一个频次,去第二个数组找比他大的第一个数的下标,用长度减去下标就是所求(根据查找的方法不同,可以顺序查找,也可以二分查找,所有两个代码块)class Solution { public int[] numSmallerByFrequency(String[] queries, S...原创 2019-09-25 11:52:20 · 158 阅读 · 0 评论 -
LeetCode283移动0
常规方法:遍历数组,遇到非0,就加到前边,最后补0class Solution { public void moveZeroes(int[] nums) { int pos=0; for(int i=0;i<nums.length;i++){ if(nums[i]!=0){ nums[pos++...原创 2019-09-25 12:31:56 · 85 阅读 · 0 评论 -
LeetCode1089复写零
方法一:1.计算0的个数,扩充数组(虚拟),从后开始遍历数组,依次判断是否为0,以及是否超过数组长度,放入虚拟数组。class Solution { public void duplicateZeros(int[] arr) { int count=0; for(int i=0;i<arr.length;i++){ if(ar...原创 2019-09-26 13:44:07 · 162 阅读 · 0 评论 -
LeetCode485最大连续1的个数
方法1:遍历数组,没遍历一次,都在max和maxNow比较,找最大值付给max,当遇到0,重置maxNow=0class Solution { public int findMaxConsecutiveOnes(int[] nums) { int max=0; int maxNow=0; for(int n:nums){ ...原创 2019-09-26 15:23:05 · 61 阅读 · 0 评论 -
Leetcode48旋转图像90°
从最外圈开始打印,对于每一个圈,每次交换四个元素的位置class Solution { public void rotate(int[][] matrix) { if(matrix.length==0||matrix[0].length==0){ return; } int startRow=0; i...原创 2019-10-05 09:24:17 · 71 阅读 · 0 评论