// 1, 2, 3, 4 | 2, 3, 6, 9
// input [1, 2, 3, 4], [2, 3, 9, 6] output [2, 3]
// input [1, 2, 2, 4], [2, 9] output [2]
// syntax 語法
// characteristic / feature 特徵
// Arrays.sort(num1) -> O(NLogN)
// Set<Integer> -> 2, 3
```
public int[] intersection(int[] nums1, int[] nums2) {
if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) {
return new int[]{};
}
Arrays.sort(nums1); // 1 2 2 4
// Arrays.sort(nums2); // 2 9
Set<Integer> resultSet = new HashSet<>();
for (int num2 : nums2) {
if (binarySearch(nums1, num2)) {
resultSet.add(num2);
}
}
int i = 0;
int[] result = new int[resultSet.size()];
for (int num : resultSet) {
result[i] = num;
i++;
}
return result;
}
public boolean binarySearch(int[] nums, int target) {
int l = 0;
int r = nums.length - 1;
while (l <= r) {
int mid = (l + r) >>> 1;
if (nums[mid] == target) {
return true;
} else if (nums[mid] > target) {
r = mid - 1;
} else {
l = mid + 1;
}
}
return false;
}
```
// Input: nums1 = [1,2,2,1], nums2 = [2,2]
// Output: [2,2]
// Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
// Output: [4,9]
// Input: nums1 = [4,9,4,9,5], nums2 = [9,4,9,8,4]
// Output: [4,9,4,9]
```
public int[] intersect(int[] nums1, int[] nums2) {
if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) {
return new int[]{};
}
Arrays.asList();
List<Integer> nums1List = new ArrayList(nums1);
List<Integer> ansList = new ArrayList();
for (int n2: nums2) {
if (num1List.contains(n2)) {
ansList.add(n2);
}
}
return ansList.toArray();
}
```
https://www.programcreek.com/2013/03/arraylist-vs-linkedlist-vs-vector/#targetText=ArrayList%20has%20O(n)%20time,end%2Fbeginning%20of%20the%20List.
```
public int[] intersect(int[] nums1, int[] nums2) {
if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) {
return new int[]{};
}
List<Integer> nums1List = new ArrayList();
for (int num1: nums1) {
nums1List.add(num1);
}
List<Integer> ansList = new ArrayList();
for (int n2: nums2) {
if (nums1List.contains(n2)) {
ansList.add(n2);
nums1List.remove(nums1List.indexOf(n2));
}
}
int[] ansArray = new int[ansList.size()];
for (int i = 0; i < ansList.size(); i++) {
ansArray[i] = ansList.get(i);
}
return ansArray;
}
```
```
public class PriorityPool<T> {
private static final String TAG = PriorityPool.class.getSimpleName();
private LinkedList<T> mModelList;
private LinkedList<Integer> mPriorityList;
private int mLastPeakIndex = -1;
public PriorityPool() {
mModelList = new LinkedList<>();
mPriorityList = new LinkedList<>();
}
public synchronized void insert(int priority, T model) {
if (model == null) {
Logs.e(TAG, "insert", "model should not be null !!!");
return;
}
mPriorityList.add(priority);
mModelList.add(model);
}
@Nullable
public synchronized T peak() {
if (ArrayUtils.isEmpty(mModelList)) {
Logs.e(TAG, "peak", "mModelList should not be null !!!");
return null;
}
if (ArrayUtils.isEmpty(mPriorityList)) {
Logs.e(TAG, "peak", "mPriorityList should not be null !!!");
return null;
}
try {
int max = Collections.max(mPriorityList);
mLastPeakIndex = mPriorityList.indexOf(max);
T model = mModelList.get(mLastPeakIndex);
return model;
} catch (Exception e) {
e.printStackTrace();
Logs.logExceptionToCrashlytics(e);
return null;
}
}
@Nullable
public synchronized T poll() {
if (ArrayUtils.isEmpty(mModelList)) {
Logs.e(TAG, "poll", "mModelList should not be null !!!");
return null;
}
if (ArrayUtils.isEmpty(mPriorityList)) {
Logs.e(TAG, "poll", "mPriorityList should not be null !!!");
return null;
}
try {
int max = Collections.max(mPriorityList);
int index = mPriorityList.indexOf(max);
T model = mModelList.get(index);
mPriorityList.remove(index);
mModelList.remove(index);
return model;
} catch (Exception e) {
e.printStackTrace();
Logs.logExceptionToCrashlytics(e);
}
return null;
}
public synchronized void removeLastPeak() {
if (ArrayUtils.isEmpty(mModelList)) {
Logs.e(TAG, "remove", "mModelList should not be null !!!");
return;
}
if (ArrayUtils.isEmpty(mPriorityList)) {
Logs.e(TAG, "remove", "mPriorityList should not be null !!!");
return;
}
try {
if (mLastPeakIndex == -1) {
return;
}
mPriorityList.remove(mLastPeakIndex);
mModelList.remove(mLastPeakIndex);
} catch (Exception e) {
e.printStackTrace();
Logs.logExceptionToCrashlytics(e);
Logs.e(TAG, "remove", "failure to remove !!!");
}
}
@Nullable
public T get(int index) {
if (ArrayUtils.isEmpty(mModelList)) {
Logs.e(TAG, "get", "mModelList should not be null !!!");
return null;
}
try {
return mModelList.get(index);
} catch (Exception e) {
e.printStackTrace();
Logs.logExceptionToCrashlytics(e);
Logs.e(TAG, "get", "failure to get !!!");
}
return null;
}
public boolean isEmpty() {
return mModelList == null || mModelList.size() == 0;
}
public int size() {
return mModelList == null ? 0 : mModelList.size();
}
}
```