Under my umbrella.

SKII

Less is more.

摘要: 7th 整数反转 模拟法 利用%运算和/运算,模拟两数反转的过程。难点在于溢出条件的判断(溢出发生于ans = ans * 10 + a阶段),在ans * 10 + a运算完成之前: 对于正数: 当ans大于max_value/10,说明当ans*10后一定溢出。 当ans小于max_value/ 阅读全文
posted @ 2020-07-05 10:49 NLYang 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 344th 反转字符串 双指针法 双指针法是非常常用的算法,也很容易理解。 class Solution { public void reverseString(char[] s) { int i = 0, j = s.length - 1; while(i <= j) { char t = s[i 阅读全文
posted @ 2020-07-04 21:06 NLYang 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 48th 旋转图像 找到变换规则 找到变换前的和变换后的矩阵的转移方程:before[i][j] == after[j][n-i-1] class Solution { public void rotate(int[][] matrix) { int n = matrix.length; int[] 阅读全文
posted @ 2020-07-04 20:59 NLYang 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 36th 有效的数独 哈希表思想与二维数组区块(section)的划分 首先,采用哈希表思想保证数字1-9只出现一次。 其次,对于条件1和条件2我们很容易写出对应的hash table并填充好数据,但是对于条件3我们需要将二位数组进行区块拆封。 区块拆封方法: 分析过程:已知原数组容量为9x9,则以 阅读全文
posted @ 2020-07-04 16:50 NLYang 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 1th 两数之和 暴力枚举法 直接两重循环暴力枚举,很慢。 class Solution { public int[] twoSum(int[] nums, int target) { int[] ans = new int[2]; for(int i = 0; i < nums.length; i 阅读全文
posted @ 2020-07-04 14:35 NLYang 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 283th 移动零 位置指示器法 我们将cnt看作位置指示器,易于发现规律:某个不为0的元素前面有几个0(cnt),他就会向前移动cnt个位置。 class Solution { public void moveZeroes(int[] nums) { int cnt = 0; for(int i 阅读全文
posted @ 2020-07-03 20:27 NLYang 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 66th 加一 模拟运算法 根据题目要求做一个模拟即可,需要注意的是最后的数组长度不一定为原数组长度,还可能会增加一位,因为类似于999会进位到1000。因此最后需要做一个判断。 class Solution { public int[] plusOne(int[] digits) { int[] 阅读全文
posted @ 2020-07-03 19:53 NLYang 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 350th 两个数组的交集 II 利用指针思想 针对有序的数组,利用指针思想,分别为nums1, nums2数组指定指针i与j。因为数组是有序的,所以在两个指针同时便利两个数组时只会出现三种情况,分别解决它们即可。 这里因为不知道最后它们的交集合长度是多少故易联想到使用List动态添加元素,最后将其 阅读全文
posted @ 2020-07-03 19:31 NLYang 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 136th 只出现一次的数字 先排序后处理数据 class Solution { public int singleNumber(int[] nums) { Arrays.sort(nums); boolean flag = false; int ans = 0; for(int i = 0; i 阅读全文
posted @ 2020-07-03 09:10 NLYang 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 189th 旋转数组 利用空间特性解题 例如 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 我们会发现,答案数组前端的k个元素,恰好是原数组末端的k个元素。因此我们只需要把原数组拆分为两个数组:head(包含原数组的前nums.length k个元素 阅读全文
posted @ 2020-05-10 13:36 NLYang 阅读(166) 评论(0) 推荐(0) 编辑