力扣刷题记录(2)
剑指 Offer 39. 数组中出现次数超过一半的数字
class Solution {
public int majorityElement(int[] nums) {
//先排序,需要的数字必定在中间
Arrays.sort(nums);
return nums[nums.length/2];
}
}
剑指 Offer 40. 最小的k个数
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
//先排序
Arrays.sort(arr);
int [] nums=new int[k];
for(int i=0;i<k;i++){
nums[i]=arr[i];
}
return nums;
}
}
剑指 Offer 42. 连续子数组的最大和
class Solution {
public int maxSubArray(int[] nums) {
int sum=nums[0];
int max=nums[0];
for(int i=1;i<nums.length;i++){
if(sum>0){
sum+=nums[i];
}else{
sum=nums[i];
}
if(sum>max){
max=sum;
}
}
return max;
}
}
剑指 Offer 52. 两个链表的第一个公共节点
设交集链表长c,链表1除交集的长度为a,链表2除交集的长度为b,有
a + c + b = b + c + a
若无交集,则a + b = b + a
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA == null || headB == null) return null;
ListNode n1 = headA;
ListNode n2 = headB;
while(n1 != n2){
n1 = n1 == null ? headB : n1.next;
n2 = n2 == null ? headA : n2.next;
}
return n1;
}
}