Array
USC_ECE
这个作者很懒,什么都没留下…
展开
-
JZ29 最小的K个数
保持堆的大小为K,然后遍历数组中的数字,遍历的时候做如下判断:若目前堆的大小小于K,将当前数字放入堆中; 否则判断当前数字与大根堆堆顶元素的大小关系,如果当前数字比大根堆堆顶还大,这个数就直接跳过; 反之如果当前数字比大根堆堆顶小,先poll掉堆顶,再将该数字放入堆中。import java.util.*;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] in原创 2020-09-07 01:56:56 · 248 阅读 · 0 评论 -
JZ28 数组中出现次数超过一半的数字
这道题最简单的方法是摩尔投票法:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/solution/mian-shi-ti-39-shu-zu-zhong-chu-xian-ci-shu-chao-3/代码如下:public class Solution { public int MoreThanHalfNum_Solution(int [] arra.原创 2020-09-07 01:28:54 · 100 阅读 · 0 评论 -
JZ19 顺时针打印矩阵
https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/solution/mian-shi-ti-29-shun-shi-zhen-da-yin-ju-zhen-she-di/import java.util.ArrayList;public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) {原创 2020-08-28 18:10:08 · 214 阅读 · 0 评论 -
JZ13 调整数组顺序使奇数位于偶数前面
这道题如果用快慢指针的话会打乱顺序,因此我们选择新开一个数组,用空间换时间:public class Solution { public void reOrderArray(int [] array) { int[] evens = new int[array.length]; int oddIndex = 0, evenIndex = 0; for(int num: array){ if(num % 2 != 0){原创 2020-08-28 12:13:14 · 92 阅读 · 0 评论 -
LeetCode 55. Jump Game
这道题可以用贪心算法也可以用动态规划。老师说虽然动态规划的解法时间复杂度更高,但更具有普遍性。代码如下:class Solution { public boolean canJump(int[] nums) { int n = nums.length; if(n == 1){ return true; } boolean[] dp = new boolean[n]; dp[n - 1] =原创 2020-08-08 07:37:56 · 104 阅读 · 0 评论 -
LeetCode 118. Pascal‘s Triangle
这道题需要注意的是index越界问题。代码如下:class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> res = new ArrayList<>(); for(int row = 0; row < numRows; row++){ List<Int原创 2020-08-07 15:38:39 · 78 阅读 · 0 评论 -
LeetCode 119. Pascal‘s Triangle II
这道题需要注意的是每次循环在List头部插入1,其效果就是将上一次循环计算出来的List整体向后平移1位。然后使用set方法,将List的第 j 位设置成 List.get(j) + List.get(j + 1)的值,也就是在Pascal三角中自己上方的两个元素。因为之前的List已经整体平移过1个单位,所以是j & j + 1。代码如下:class Solution { public List<Integer> getRow(int rowIndex) {原创 2020-08-08 06:56:49 · 118 阅读 · 0 评论 -
LeetCode 442. Find All Duplicates in an Array
因为数组里所有的数大小都在1~n之间,所有我们可以建立一种映射:当我们访问到a[i]时,我们把index为 a[i] - 1(亦即第a[i]个)的数取反。因此当我们第二次遇到a[i]的时候,对应index的数已经是负数了。这时候我们就把 a[i] = index + 1加入到List当中。代码如下:class Solution { public List<Integer> findDuplicates(int[] nums) { List<Integer>原创 2020-08-07 15:01:35 · 112 阅读 · 0 评论 -
LeetCode 217. Contains Duplicate
class Solution { public boolean containsDuplicate(int[] nums) { if(nums == null || nums.length == 0){ return false; } Set<Integer> seen = new HashSet<>(); for(int num: nums){ // If th.原创 2020-07-25 08:48:38 · 159 阅读 · 0 评论 -
LeetCode 15. 3Sum
首先对数组进行排序,排序后固定一个数 nums[i],再使用左右指针指向 nums[i]后面的两端,数字分别为 nums[L] 和 nums[R],计算三个数的和 sum 判断是否满足为 0,满足则添加进结果集。如果 nums[i]大于 0,则三数之和必然无法等于 0,结束循环如果 nums[i] == nums[i-1],则说明该数字重复,会导致结果重复,所以应该跳过当 sum == 0 时,nums[L] == nums[L+1] 则会导致结果重复,应该跳过,L++当 sum == 0时,nu.原创 2020-07-12 08:43:44 · 103 阅读 · 0 评论 -
LeetCode 80. Remove Duplicates from Sorted Array II
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/solution/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-xiang-i-2/class Solution { public int removeDuplicates(int[] nums) { int slow = 0; for(int fast = 0; fast <原创 2020-07-07 07:35:30 · 84 阅读 · 0 评论 -
LeetCode 26. Remove Duplicates from Sorted Array
class Solution { public int removeDuplicates(int[] nums) { int slow = 0; for(int fast = 0; fast < nums.length; fast++){ if(slow == 0 || nums[fast] > nums[slow - 1]){ nums[slow++] = nums[fast]; .原创 2020-07-06 16:26:18 · 56 阅读 · 0 评论