环形链表
思路:
哈希表
public class Solution {
public boolean hasCycle(ListNode head) {
if (head == null) {
return false;
}
HashSet<ListNode> set = new HashSet<ListNode>();
while (head != null) {
if (!set.add(head)) {
return true;
}
head = head.next;
}
return false;
}
}
两数之和II
思路:
之前的两数之和使用hash表的算法,不过这种算法适合无序数组,对于有序数组,可以使用双指针或者二分查找。
对于有序数组,推荐使用双指针,A指针从前向后,B指针从后向前,如果两数之和比目标值大,B指针前移,如果两数之和比目标值小,A指针向后。
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left = 0;
int right = numbers.length - 1;
while (left < right) {
if (numbers[left] + numbers[right] < target) {
left++;
} else if (numbers[left] + numbers[right] > target) {
right--;
} else {
return new int[]{left + 1, right + 1};
}
}
return new int[]{-1, -1};
}
}
Excle表列名
思路:
可以认为是26进制,但是,对于普通的二进制、八进制、十六进制等计算方式,低位是右0的,在这道题中,没有0,如果使用%计算出来是0,结果则为‘Z’,上一位也需要减去1。
class Solution {
public String convertToTitle(int n) {
StringBuffer sb = new StringBuffer();
while (n > 0) {
if (n % 26 == 0) {
sb.append('Z');
n -= 1;
} else {
sb.append((char) ((n % 26) + 'A' - 1));
}
n = n / 26;
}
return sb.reverse().toString();
}
}
今天到这里吧~~~