算法笔记
noobmantest
这个作者很懒,什么都没留下…
展开
-
LeetCode41缺失的第一个正数,空间复杂度为1的算法,将数组本身当做哈希空间
空间复杂度为1的算法,将数组本身当做哈希空间将出现过的正数位置标记出来两种方法:1、用正负标记。2、将合法数字交换到对应的位置,不对应的即为第一个缺失的数字。class Solution41 { // 1、将为负数的位置变为正数,可以用n+1 // 2、nums[i]<=n 情况下 将num[i]-1位置数字变为负数,标记位该位置数字已经出现过了 // 3、遍历数组 第一个非负数字位置+1 即是未出现过的最小正数 public int firstMissingP原创 2021-10-22 21:45:13 · 219 阅读 · 0 评论 -
只出现一次的数字
方法一:记录所有数字出现次数 使用Map方法二:移位,二进制 可被3整除的位置只出现一次数字在该为0 反之为1class Solution137 { public int singleNumber(int[] nums) { Map<Integer, Integer> map = new HashMap<>(); for (int num : nums) { int i = map.getOrDefault(num.原创 2021-10-11 10:12:58 · 71 阅读 · 0 评论 -
全排列算法
全排列算法(递归方式): public void fullArrangement(List<String> list, int index, int[] nums) { for (int i = index; i < nums.length; i++) { swapArray(nums, index, i); fullArrangement(list, index + 1, nums); swapA原创 2021-10-11 10:09:06 · 72 阅读 · 0 评论 -
积水问题几种解决方案
积水问题几种解决方案暴力法,按列计算,计算某列左侧最大高度和右侧最大高度,判断该列是否可以积水。按行计算,注意循环条件是最大高度,计算某行若有大于等于行高的则开始计算 将区域积水量加入总数,并且将区域积水量置零。动态规划:根据按列计算得知每次都要计算左侧、右侧最大高度,可将其存入数组中,不需要每次遍历寻找最大值。优化动态规划:双指针法,分别记录左侧右侧最大值和指针指向,如果左侧最大值较小则判断height[left] 处积水量,否则判断右侧height[right]积水量递减栈:保持栈内递减,栈内原创 2021-09-15 11:05:13 · 1225 阅读 · 0 评论 -
1250: [蓝桥杯2015初赛]方程整数解java
1250: [蓝桥杯2015初赛]方程整数解java1. 题目描述方程: a^2 + b^2 + c^2 = 1000这个方程有正整数解吗?有:a,b,c=6,8,30 就是一组解。求出 a^2 + b^2 + c^2 = n(1<=n<=10000)的所有解,解要保证c>=b>=a>=1。2. 输入输出输入存在多组测试数据,每组测试数据一行包含一个正整...原创 2020-01-30 18:14:18 · 529 阅读 · 0 评论