jz57.和为s的两个数字 发表于 2020-08-20 | 分类于 算法 字数统计: 156 | 阅读时长 ≈ 1 题目描述 题解双指针因为组数是增序的,所以首先想到使用双指针来实现. 计算收尾两个指针所指数字的和, 如果大于目标值, 就左移右指针, 如果小于目标值, 就右移左指针, 如果相等, 直接返回左右指针当前所指的数字组成的数组. 123456789101112131415161718public int ... 阅读全文 »
jz56_2.数组中数字出现的次数Ⅱ 发表于 2020-08-20 | 分类于 算法 字数统计: 374 | 阅读时长 ≈ 1 题目描述 题解位运算这道题因为相同的数字会出现三次, 而三次异或的结果还是该数字, 所以不能沿用上一道题的方法. 但是依然可以围绕位运算去思考. 对于二进制形式下的每个数字, 在某一位上, 如果是1的话, 那么出现3次的话频数就是3. 如果是0的话, 那么出现3次的频数还是0.共同点就是三个相同的数 ... 阅读全文 »
jz56_1.数组中数字出现的次数 发表于 2020-08-20 | 分类于 算法 字数统计: 370 | 阅读时长 ≈ 1 题目描述 题解分组位运算在做了leetcode136题后(数组中只有一个出现一次的数), 很容易想到使用异或的方法求出只出现一次的数. 但是这道题难在有两个只出现一次的数. 如果想办法将给定的数组划分成两个子数组, 并满足以下条件: 两个只出现一次的数分别位于两个子数组中 两个子数组中除了只出现一 ... 阅读全文 »
136.只出现一次的数字 发表于 2020-08-20 | 分类于 算法 字数统计: 220 | 阅读时长 ≈ 1 题目描述 题解哈希表略 异或运算异或运算满足交换律,a^b^a=a^a^b=b,因此ans相当于nums[0]^nums[1]^nums[2]^nums[3]^nums[4]….. 然后再根据交换律把相等的合并到一块儿进行异或(结果为0),然后再与只出现过一次的元素进行异或,这样最后的结果就是,只出 ... 阅读全文 »
jz51.数组中的逆序对 发表于 2020-08-20 | 分类于 算法 字数统计: 530 | 阅读时长 ≈ 2 题目描述 题解暴力方法(超时)就是使用一个双循环结构计算出全部的逆序对, 结果超时: 12345678910111213141516171819class Solution { public int reversePairs(int[] nums) { if ... 阅读全文 »
JVM学习笔记 发表于 2020-08-19 | 分类于 Java 字数统计: 156 | 阅读时长 ≈ 1 对象的创建对象的创建是非常频繁的行为, 因此不同线程在创建对象, 并给对象分配内存空间时是线程不安全的, 因为他们都是在Java堆内存中分配的. 有两种方法可以解决这个问题: 采用CAS配上失败重试的方式保证更新操作的原子性 TALB: 每个线程预先在Java堆中分配一小块内存, 称为本地线程分配 ... 阅读全文 »
jz49.丑数 发表于 2020-08-18 | 分类于 算法 字数统计: 265 | 阅读时长 ≈ 1 题目描述 题解动态规划首先想到的就是用动态规划来做, 因为有一个确定的规律: 某一个丑数, 一定是由之前的某个丑数乘以2,或者乘以3, 或者乘以5求得的. 有了这个关系, 直接往动态规划上想. 接下来只需要考虑如何从之前的丑数得出所求的丑数.根据刚才提出的思路, 可知: 已知n个丑数x1, x2, ... 阅读全文 »
jz46.把数字翻译成字符串 发表于 2020-08-18 | 分类于 算法 字数统计: 377 | 阅读时长 ≈ 1 题目描述 题解动态规划一开始想通过寻找规律或者回溯法来遍历所有可能的情况, 但是都很复杂. 然后发现每增加一位数, 所得出的结果与之前的状态有着固定的转换关系, 所以果断使用动态规划来做!*状态定义: *dp[i]表示使用所给整数的从左数1到i个数字有多少种不同的翻译. *状态转移: * 很容易找出 ... 阅读全文 »
jz45.把数组排成最小的数 发表于 2020-08-17 | 分类于 算法 字数统计: 646 | 阅读时长 ≈ 3 题目描述 题解这道题我首先是想通过回溯法进行全排列, 然后过程中更新最小值, 最后将该值输出. 但是使用这种方法超出了时间限制, 失败 重新调整思路, 这道题得通过排序来做, 如何排序, 也就是排序规则的制定就变成了解题的关键. 如果两个字符串x 和y , 若 x+y < y+x 则定义x&l ... 阅读全文 »
jz44.数字序列中某一位的数字 发表于 2020-08-17 | 分类于 算法 字数统计: 53 | 阅读时长 ≈ 1 题目描述 题解 12345678910111213141516public int findNthDigit(int n) { int digit = 1; long start = 1; long count = 9; while (n > count) ... 阅读全文 »