思维
九幽孤翎
蜉蝣只有认清自己的渺小,才能有化茧成蝶的一天
展开
-
Leetcode_729_我的日程安排表1_线段树/思维
很经典的线段树模版题,但也可以用二分的方法去解维护一个有序数组,如果新的日程安排的头尾插入有序数组的位置相同,并且头的下标是0/2/4等偶数,尾的下标为1/3/5等奇数,则插入成功,否则插入失败。...原创 2022-07-05 10:53:02 · 155 阅读 · 0 评论 -
Leetcode_1109_航班预订统计_差分数组
看一眼线段树,差点吓死,再看一眼medium,差分乱杀class Solution { public int[] corpFlightBookings(int[][] bookings, int n) { int[] cha = new int[n]; for (int[] booking : bookings) { cha[booking[0] - 1] += booking[2]; if(booking[1] !=原创 2021-08-31 08:43:15 · 119 阅读 · 0 评论 -
Leetcode_41_缺失的第一个正整数_思维
原地哈希,置换元素【还是标程写的简洁QAQ】class Solution { boolean judge(int num, int len, int index) { if (num >= 1 && num <= len && num != index) { return true; } return false; } public int firstMissing原创 2021-08-29 20:21:40 · 84 阅读 · 0 评论 -
Leetcode_1588_模拟奇数长度子数组的和_排列组合
遍历每个元素,计算每个元素出现的次数;该元素左侧的元素个数和右侧的元素个数要么全为奇数,要么全为偶数,相乘,并累加,得到该元素出现次数。class Solution { public int sumOddLengthSubarrays(int[] arr) { int len = arr.length; int ans = 0; for (int i = 0; i < len; i++) { int l = i;原创 2021-08-29 19:44:29 · 74 阅读 · 0 评论 -
Leetcode_42_接雨水_思维
我们得先观察到,下标为i的位置,储水量为:i左侧的最大值与i右侧的最大值中小的那个再减去i的高度。我们先预处理获取每个i左侧的最大值与最小值即可// 冲刺010class Solution { public int trap(int[] height) { int len = height.length; int ans = 0; int[] leftMax = new int[len]; int[] rightMax = new原创 2021-08-22 17:45:34 · 74 阅读 · 0 评论 -
Leetcode_789_逃脱阻碍着_思维
猜不难猜,这想明白为啥是真难class Solution { public boolean escapeGhosts(int[][] ghosts, int[] target) { int len = Math.abs(target[0]) + Math.abs(target[1]); for (int[] ghost : ghosts) { if(Math.abs(ghost[0] - target[0]) + Math.abs(gho原创 2021-08-22 00:20:19 · 76 阅读 · 0 评论 -
Leetcode_477_汉明距离总和_思维
换个角度看世界,才能领略世界的美。class Solution { public int totalHammingDistance(int[] nums) { int ans = 0; int len = nums.length; int[] cnt = new int[32]; for (int i = 0; i < len; i++) { int st = 0; while(n原创 2021-08-18 13:12:59 · 50 阅读 · 0 评论 -
Leetcode_413_等差数列划分_思维
很简单的一道题,从头到尾遍历,初始差值设为前两个元素的差值,从第三个开始检查每一个元素和前一个元素的差是否等于初始差值,如果相等,则继续往后找,并把答案累加;如果不一样,将前面的元素全部截断,从零开始找。算法唯二要思考的点就是如果不一样,是否还要考虑之前的元素,显而易见,既然不一样,那么前后两个数之差必然不一样,那么就不需要再考虑了,可以直接截断。另外就是,如果有一个长度为n(n>=3)的连续数组,总共的连续子数组数量为(n-2)*(n-1)/2。这道题如果改成不需要连续的子序列,难度会大大增加。原创 2021-08-10 20:27:08 · 97 阅读 · 0 评论 -
Leetcode_137_只出现一次的数字Ⅱ_位运算
暴力class Solution { public int singleNumber(int[] nums) { Map<Integer, Integer> map = new HashMap<>(); for (int num : nums) { map.put(num, map.getOrDefault(num, 0) + 1); } for(Map.Entry<Integer原创 2021-04-30 00:20:43 · 91 阅读 · 0 评论 -
Leetcode_31_下一个排列_思维
首先从后往前找一个数a比它后面一个数要小这个数a我们把它往后面放,必然可以让整个nums变小我们用这个数a与这个数a之后一个正好大于它的数b(我们可以直接从后开始遍历找,甚至可以用二分查找来加速【我懒得这么写】,因为后面的数组一定是单调的)找到这第二个数b以后,我们交换ab二者的位置,这就使得整个数变大了,为了让b后面的数尽可能小,再排个序就完事了。class Solution { public void nextPermutation(int[] nums) { in原创 2021-04-29 14:54:35 · 76 阅读 · 0 评论 -
Leetcode_134_加油站_思维+贪心
11/18思路画个折线图,假设以0为起点,记录一下从起点到每个点为止的净收入容易发现,更换起点只是让这个折线图上下平移。题目要求每个时间点的总和大于0;就是要求折线图的最底点大于0class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { int all = 0; int minn = Integer.MAX_VALUE; int ans = -1;原创 2020-11-18 20:20:12 · 339 阅读 · 0 评论