数组
力扣数组刷题
Loser@jing
这个作者很懒,什么都没留下…
展开
-
异或&&哈希——数组中数字出现的次数I
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。法一:HashSet解决HashSet中add()方法会添加不重复的数字或字符串,举例:本题可以使用此方法,但是我们的目的是输出不重复的数字,因此在将数字添加到HashSet中时,当遇到重复数字不添加,就将HashSet中已存在的元素也移除,最后遍历HashSet输出就可以了。法二:异或提到这道题的异或,首先应该先看一个类似的题。136. 只出现一次原创 2022-06-04 08:01:01 · 512 阅读 · 0 评论 -
3.用数组逆序打印链表
其实我最先想到的是用栈,因为栈是“先进后出”class Solution { public int[] reversePrint(ListNode head) { LinkedList<Integer> stack = new LinkedList<Integer>();//定义栈 while(head != null){ stack.addLast(head.val); head = head原创 2022-05-04 19:06:13 · 447 阅读 · 0 评论 -
4.调整数组顺序使奇数位于偶数前面
双指针 public int[] exchange(int[] nums) { int left = 0, right = nums.length - 1; while(left <= right){ while(left <= right && nums[left] % 2 == 1) left++; while(left <= right &&原创 2022-05-04 20:29:53 · 255 阅读 · 0 评论 -
7、二分法——寻找一组重复或者有序但是旋转的数组
题目描述:输入:numbers = [3,4,5,1,2]输出:1输入:numbers = [2,2,2,0,1]输出:0public int minArray(int[] numbers) { int low = 0, high = numbers.length-1; while(low < high){ int temp = (low + high) / 2; if(numbers[temp] >原创 2022-05-08 14:34:01 · 77 阅读 · 0 评论 -
6、双指针——递增数组两数之和与目标数相等
public int[] twoSum(int[] nums, int target) { int low = 0, high = nums.length-1; while(low < high){ int sum = nums[low] + nums[high]; if(sum < target) low++; else if(sum >target) high--; .原创 2022-05-07 20:17:56 · 77 阅读 · 0 评论 -
2. 输出数组中重复的数字之一
public int findRepeatNumber(int[] nums) { Set<Integer> dic = new HashSet<>(); for(int num : nums){ if(dic.contains(num)) return num; dic.add(num); } return -1; }for(int num : nums)原创 2022-05-03 20:47:28 · 314 阅读 · 0 评论 -
15、判断二维数组中是否存在目标值
public boolean findNumberIn2DArray(int[][] matrix, int target) { int i = matrix.length - 1, j = 0; while(i >= 0 && j < matrix[0].length) { if(matrix[i][j] > target) i--; else if(matrix[i][j] < ta.原创 2022-05-19 08:54:48 · 98 阅读 · 0 评论 -
动态规划——1、礼物的最大价值
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例:代码:分析:...原创 2022-06-03 10:34:11 · 107 阅读 · 0 评论