本篇文章你将了解到如下:
- Algorithm Leetcode 39 组合数组 ,难度为中等
- Review 未来5 - 10年的用户界面开发
- Tip 数据Mysql锁与事物隔离级别
- Share 个人想法
Algorithm Leetcode 39 组合数组
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
所有数字(包括 target)都是正整数。
解集不能包含重复的组合。
示例 1:
输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[
[7],
[2,2,3]
]
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> list =new ArrayList<List<Integer>>();
//判断数组长度是否为空或者为0
if(candidates == null || candidates.length ==0) {
return list;
}
//排序后,剪枝
Arrays.sort(candidates);
combinationSum(candidates,target,list,new ArrayList<>(0),0);
return list;
}
public void combinationSum(int[] candidates,int target, List<List<Integer>> list,
List<Integer> temp,int start) {
if(target<0) {
return ;
}else if(target == 0) {
list.add(temp);
return ;
}
//i=start开始防止出现(2 2 3)后出现2 3 2重复
for(int i = start;i<candidates.length;i++) {
if(target>=candidates[i]) {
//new ArrayList<>(temp)构造一个相同的内容,不同的对象的,开始一直用 List<Integer> t =temp;
List<Integer> t =new ArrayList<>(temp);
t.add(candidates[i]);
combinationSum(candidates,target-candidates[i],list,t,i);
}
}
}
解法很简单,也很容易想到的。递归调用combinationSum()方法,直到target<=0终止,等于0时需要将temp加入到List中。这里需要注意的就是start变量的使用,保证从大于等于的数开始查找。比如:Target=3; num={2,3,5};不用start会出现2,3,2和2,2,3重复,这也是要先排序的原因。个人问题: List<Integer> t =temp;
这样只是引用了对象地址,为同一个对象; List<Integer> t =new ArrayList<>(temp);这才是创建一个新的对象,存储相同的不同对象;
Review 未来5 - 10年的用户界面开发
目前阶段对于我来说,完全理解一篇英文博客还是有不小的困难的。大多数时候都会采用Google浏览器的自动翻译功能,这样对英文的提高没有很大帮助。希望后续自己加强(真后悔以前目光短浅,没好好学习英语)
UI将更安全地处理私人数据。
UI将提供“验证真实性”机制,该机制将指示UI是否是真实的并且可以被信任(或者如果它已被黑客入侵)。
市场营销和心理学将继续成为人们信任不同用户界面的主要手段; 这项技术与营销一样好。
用户界面将包含虚拟助理,以便更好地了解其使用环境并支持对话交互。
UI将开始是多模式的,但单模式仍将是最常见的UI(例如2D界面)。
工具将逐渐改进,以便更容易地创建空间UI。一个关键的挑战是如何比现有的用户界面更好地实现易用性和任务效率。
参考: 未来5 - 10年的用户界面开发 请 “科学上网” 打开
Tip Mysql锁与事物隔离级别
这里是自己通过学习写的一篇博客,主要对脏读、不可复读、幻读问题的重现,这也是初入职场面试所需要的
Share
前期缺少了太多的Arts,也没有养成写博客的习惯。现在初步开始写一点东西收获还是挺大的
来到了皓哥的读友群,就不应该有急于求成的速成心,要慢慢雕刻
目前正在做的校招面试准备,感觉还是要自己有个整理,形成自己的知识图谱,这样才会收获很大。
网友评论