跳到主要内容

《实战Java高并发程序设计》读书笔记

· 阅读需 10 分钟

这两天快速看了下《实战Java高并发程序设计》这本书,对Java高并发程序有一个初步的认识。

这本书是在iPad上用MarginNotes 3看的,只是做了些笔记,还没进行代码实践,后续还需要细化。

拼多多2020实习笔试题题解

· 阅读需 6 分钟

题解是交卷后做的,不保证AC。

题目1

题目描述

给出长虔都为n的两个整数数组a[n]和b[n],特殊运算 S = a[0]*b[0] + ... + a[n-1]*b[n-1],你可以改变a数组的顺序使得运算S得到的值最小,给出最终的最小值。 数组长度n大于50,对于每个元素X,0<=X<=100

输入描述

输入一共三行。 第一行为n,表示两个数组的长度。 第二行包括n个数字,用空格隔开,是a数组的值。 第三行包括n个数字,用空格隔幵,是b数组的值。

输出描述

输出一行,包含一个数字,表示最小的S值。

示例1

输入

3
1 1 3
10 30 20

输出

80

N-sum问题通解

· 阅读需 4 分钟

N-sum 问题还是比较典型的,这里进行一下小结。

首先描述一下 N-sum 问题:有一个数组 nums,要求从数组中选择 n 个数,使得这些数的和恰好为 target ,输出所有不重复的可行组合。

如果采用暴力解法,显然时间复杂度为 O(Nn)O(N^n),这一般是不可取的。

下面是 N-sum 问题的LeeCode链接:

1. Two Sum

15. 3Sum

18. 4Sum

Two-Sum

先来解决Two-Sum问题,这是N-sum问题的基础。如果我们能把Two-Sum的时间复杂度降为 O(N)O(N) ,然后就能把N-sum的时间复杂度降为 O(Nn1)O(N^{n-1}) 了。

求单链表交点

· 阅读需 6 分钟

题目

今天面试时,面试官问了这样一个问题:两个单链表相交,怎么求交点。所谓相交,就是两个节点的next指针相同。

memset的一个坑

· 阅读需 2 分钟

为数组赋初值是很常见的操作,如果不赋初值,默认就是随机值:

int main() {
int a[5];
return 0;
}

如果想将a中的元素全部赋为0,第2行可以写为:

int a[5]{0};

这是C++ 11的写法,在此之前应写为:

int a[5] = {0};