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
原文地址:https://www.cnblogs.com/panda777/p/10927130.html