给定由一些正数(代表长度)组成的数组 A
,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0
。
示例 1:
输入:[2,1,2]
输出:5
class Solution {
public int largestPerimeter(int[] nums) {
Arrays.sort(nums);
for (int i = nums.length - 1; i >= 2; i--) {
if (nums[i - 2] + nums[i - 1] > nums[i]) {
return nums[i - 2] + nums[i - 1] + nums[i];
}
}
return 0;
}
}
给你一个 无重叠的 *,*按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 1:
输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
int left = newInterval[0];
int right = newInterval[1];
boolean placed = false;
List<int[]> ans = new ArrayList<>();
for (int[] interval : intervals) {
if (interval[0] > right ) {
if (placed == false) {
ans.add(new int[]{left, right});
placed = true;
}
ans.add(interval);
}
else if (interval[1] < left) {
ans.add(interval);
}
else {
left = Math.min(interval[0], left);
right = Math.max(interval[1], right);
}
}
if (placed == false) {
ans.add(new int[]{left, right});
}
return (int[][])ans.toArray(new int[0][]);
}
}
给你一个链表的头节点 head
,旋转链表,将链表每个节点向右移动 k
个位置。
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (k == 0 || head == null || head.next == null) {
return head;
}
int n = 1;
ListNode temp = head;
while (temp.next != null) {
temp = temp.next;
n++;
}
int index = n - k % n;
if (index == n) {
return head;
}
temp.next = head;
while (index > 0) {
temp = temp.next;
index--;
}
ListNode ans = temp.next;
temp.next = null;
return ans;
}
}