题目21:反转链表
题目描述:
反转一个单链表。
解决思路:
我们可以用迭代的方法来反转链表。我们用两个指针 prev 和 curr 分别指向链表中相邻的两个节点,然后将 curr 的 next 指向 prev,然后将 prev 和 curr 分别向后移动一个节点。直到 curr 为空,此时 prev 指向的节点就是反转后的头节点。
代码实现:
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
题目22:两数之和
题目描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回它们的数组下标。
解决思路:
我们可以用哈希表来解决这个问题。我们用一个哈希表来存储数组中每个元素的值和它的下标,然后遍历数组,对于每个元素,我们在哈希表中查找是否存在 target - nums[i] 的元素,如果存在,就返回这两个元素的下标。
代码实现:
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] {map.get(complement), i};
}
map.put(nums[i], i);
}
return new int[] {};
}
题目23:三数之和
题目描述:
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c,使得 a + b + c = 0?找出所有满足条件且不重复的三元组。
解决思路:
我们可以用双指针的方法来解决这个问题。首先,我们将数组排序。然后,我们固定一个数 nums[i],将问题转化为在 nums[i+1:n-1] 中找到两个数之和等于 -nums[i]。我们用两个指针 left 和 right 分别指向 nums[i+1] 和 nums[n-1],然后将它们的和与 -nums[i] 进行比较。如果和小于 -nums[i],就将 left 向右移动一个位置;如果和大于 -nums[i],就将 right 向左移动一个位置。如果和等于 -nums[i],就将这三个数加入结果集中,并分别将 left 和 right 向中间移动一个位置,直到 left 和 right 相遇为止。
代码实现:
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
int n =nums.length;
if (n < 3)
{
return res;
}
Arrays.sort(nums);
for (int i = 0; i < n - 2; i++) {
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
int target = -nums[i];
int left = i + 1;
int right = n - 1;
while (left < right) {
int sum = nums[left] + nums[right];
if (sum == target) {
res.add(Arrays.asList(nums[i], nums[left], nums[right]));
while (left < right && nums[left] == nums[left + 1]) {
left++;
}
left++;
while (left < right && nums[right] == nums[right - 1]) {
right--;
}
right--;
} else if (sum < target) {
left++;
} else {
right--;
}
}
}
return res;
}
文章提供了三种常见的编程题目的解决方案:1)使用迭代方法反转链表;2)通过哈希表寻找数组中和为目标值的两个数的下标;3)使用双指针在排序数组中找三数之和为零的组合。这些方法展示了数据结构和算法在解决编程问题中的应用。
254

被折叠的 条评论
为什么被折叠?



