ARTS 2019 05 12 (30)

68 篇文章 0 订阅
49 篇文章 0 订阅

Algorithm:560. 和为K的子数组;525. 连续数组
Review:
Tip/Tech:
Share:

Algorithm

560. 和为K的子数组

在这里插入图片描述
把到每个位置的总和给记录下来,如果有两个位置的sum的差为K就表示,这两个位置之间的和为K。用个哈希表存储,key为sum,value是sum出现的次数,也就是每个起点的数量,我们先来看一下代码:

public static int subarraySumBetter(int[] nums, int k) {
	HashMap<Integer, Integer> map = new HashMap<>();
	int result = 0;
	int sum = 0;
	map.put(0, 1);
	for (int i = 0; i < nums.length; i++) {
		sum += nums[i];
		if(map.containsKey(sum-k))
			result += map.get(sum-k);
		// result += map.getOrDefault(sum - k, 0);
		int t = map.getOrDefault(sum, 0) + 1;
		map.put(sum, t);
	}
	return result;
}
public static void main(String[] args) {
	int[] test1  = {1,1,1,1,1,1,1,0,1,1};
	System.out.println(subarraySumBetter(test1, 3));
}

用下面的这个图来表示一下,看看各个变量的数据变化:
在这里插入图片描述

525. 连续数组

在这里插入图片描述
这里的主要的思想就是哈希思想,用一个sum来进行标识每个位置的值,sum遇到『0』 减一,遇到『1』加一;这样只要有两个位置的sum的值想通,就表示,两个位置之间的『0,1』的数量相同。

public int findMaxLength(int[] nums) {
	Map<Integer, Integer> map = new HashMap<>();
	int sum = 0;
	int res = 0;
	map.put(0, -1);
	for (int i = 0, len = nums.length; i < len; ++i) {
		if (nums[i] == 0) {
			sum--;
		} else {
			sum ++;
		}
		if (map.containsKey(sum)) {
			res = Math.max(res, i - map.get(sum));
		} else {
			map.put(sum, i);
		}
	}
	return res;
}

Review

https://97-things-every-x-should-know.gitbooks.io/97-things-every-programmer-should-know/content/en/thing_01

Act with Prudence 谨慎行事

我们的日常开发都要遇到两个问题,要么是『doing it right』,要么是 『doing it quick』,但是因为现在开发的时间紧张,所以我们都回自然而然的选择后者,做得快,那么就会不免的留下了『Technical debt 』技术债务,
啥是技术债务?就相当于贷款,你可以靠着这个贷款解决手头紧的问题,但是在贷款后,你以后偿还就要还利息咯。那么映射到我们的技术上,就是如果我们因为选择了速度,而没有注重质量导致的日后的代码重构和添加新的功能变的很困难

事实上,通常只有当事情变得非常糟糕以至于你必须修复它时,你才真正回去修复它。

作者提出的做法就是,如果你不得不因为速度而放弃了质量,那么你就要把这些问题给记录下来,用于日后尽快的偿还。
你必须要尽快的偿还债务才算明智。

Tip/Tech

学习了一些位运算的操作,做了两道题。

在这里插入图片描述
常见的操作:

n & n - 1
//  位1的个数
int res = 0;
while(n != 0) {
 	res++;
 	n = n & (n - 1);
}
return res;

Share

https://www.weforum.org/agenda/2019/04/south-korea-recycling-food-waste/

韩国现在可回收95%的食物垃圾

韩国一度只能回收2%的食物垃圾,但是现在达到了95%。
在韩国,你扔掉食物的垃圾是需要支付费用的,也就是说你如果扔了食物越多,那么你需要支付的费用就越高昂。
这种需要支付费用邮寄的做法,就鼓励了每家每户各种用去了水分来减少费用。
政府正在计划用城市农场,这样每家每户就可以用食物垃圾的堆肥来帮助农场的作物生长。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值