1.Algorithm
https://leetcode-cn.com/problems/merge-two-sorted-lists/
方法 1:递归
想法
我们可以如下递归地定义在两个链表里的 merge
操作(忽略边界情况,比如空链表等):
\left\{ \begin{array}{ll} list1[0] + merge(list1[1:], list2) & list1[0] < list2[0] \\ list2[0] + merge(list1, list2[1:]) & otherwise \end{array} \right.{list1[0]+merge(list1[1:],list2)list2[0]+merge(list1,list2[1:])list1[0]<list2[0]otherwise
也就是说,两个链表头部较小的一个与剩下元素的 merge
操作结果合并。
算法 我们直接将以上递归过程建模,首先考虑边界情况。 特殊的,如果 l1
或者 l2
一开始就是 null
,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1
和 l2
哪一个的头元素更小,然后递归地决定下一个添加到结果里的值。如果两个链表都是空的,那么过程终止,所以递归过程最终一定会终止。
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
}
else if (l2 == null) {
return l1;
}
else if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
}
else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
}
2.Review
https://link.medium.com/qNt4XAqc0W
3.Tips
@PostMapping("/multiUpload")
@ResponseBody
public String multiUpload(HttpServletRequest request) {
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
String filePath = "/Users/itinypocket/workspace/temp/";
for (int i = 0; i < files.size(); i++) {
MultipartFile file = files.get(i);
if (file.isEmpty()) {
return "上传第" + (i++) + "个文件失败";
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
try {
file.transferTo(dest);
LOGGER.info("第" + (i + 1) + "个文件上传成功");
} catch (IOException e) {
LOGGER.error(e.toString(), e);
return "上传第" + (i++) + "个文件失败";
}
}
return "上传成功";
}
4.Share
https://www.cnblogs.com/tanshaoshenghao/p/10924205.html
javah常量池 把经常使用的数据放到内存中,避免重复的创建和销毁,实现数据共享,提高系统性能。
从jdk1.7后,字符串常量池被实现在Java堆内存中
String s1 = "hello"; String s2 = new String("hello");
s1 是先去常量池中找,如果没有在new 放回常量池,s2 直接new 不经过常量池。
String s1 = new String("hello ") + new String("world");
现在堆中创建2个对象,在使用 stringBuilder进行拼接,然后产生新的对象 这时变量s1指向新对象"hello world".
s1.intern();
这个是去常量池中查询有无该字符串 如果有直接返回 没有,在常量池中注册该变量,然后再返回。
String s1 = "hello "; String s2 = "world"; String s3 = s1 + s2; String s4 = "hello world"; System.out.println(s3 == s4);
s3 是用stringbuilder进行拼接 new 出对象 所以s3 != s4