1、对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上。
public
class
Solution {
public
int
maxPoints(Point[] points) {
if
(points.length <
3
|| points ==
null
)
return
points.length;
int
output =
0
;
for
(
int
i=
0
;i<points.length-
1
;i++){
int
count =
0
;
long
a = points[i].x;
long
b = points[i].y;
long
dx = a - points[i+
1
].x;
long
dy = b - points[i+
1
].y;
if
(dx==
0
&& dy==
0
){
for
(
int
j=
0
;j<points.length;j++){
if
(points[j].x==a && points[j].y==b){
count++;
}
}
}
else
{
for
(
int
j=
0
;j<points.length;j++){
if
((points[j].x-a)*dy==(points[j].y-b)*dx){
count++;
}
}
}
output = Math.max(output,count);
}
return
output;
}
}
2、
在O(n log n)的时间内使用常数级空间复杂度对链表进行排序。
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode sortList(ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode mid = getMid(head);
ListNode midNext = mid.next;
mid.next = null;
return mergeSort(sortList(head), sortList(midNext));
}
private ListNode getMid(ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode slow = head, quick = head;
while(quick.next != null && quick.next.next != null) {
slow = slow.next;
quick = quick.next.next;
}
return slow;
}
private ListNode mergeSort(ListNode n1, ListNode n2) {
ListNode preHead = new ListNode(0);
ListNode cur1 = n1;
ListNode cur2 = n2;
ListNode cur = preHead;
while(cur1 != null && cur2 != null) {
if(cur1.val < cur2.val) {
cur.next = cur1;
cur1 = cur1.next;
} else {
cur.next = cur2;
cur2 = cur2.next;
}
cur = cur.next;
}
if(cur1 != null){
cur.next = cur1;
}
if(cur2 != null){
cur.next = cur2;
}
return preHead.next;
}
}