两数之和
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] res = new int[2];
if(nums == null || nums.length == 0){
return res;
}
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++){
int temp = target - nums[i];
if(map.containsKey(temp)){
res[1] = i;
res[0] = map.get(temp);
}
map.put(nums[i], i);
}
return res;
}
}
反转字符串
没啥好说的,又是双指针
class Solution {
public void reverseString(char[] s) {
int l = 0, r = s.length - 1;
while(l < r) {
char t = s[l];
s[l++] = s[r];
s[r--] = t;
}
}
}
反转字符串 II
class Solution {
public String reverseStr(String s, int k) {
char[] cs = s.toCharArray();
int n = s.length();
for (int l = 0; l < n; l = l + 2 * k) {
int r = l + k - 1;
reverse(cs, l, Math.min(r, n - 1));
}
return String.valueOf(cs);
}
void reverse(char[] cs, int l, int r) {
while (l < r) {
char c = cs[l];
cs[l] = cs[r];
cs[r] = c;
l++; r--;
}
}
}
这篇博客探讨了如何使用双指针技术解决两个数值相加的问题以及字符串的反转。第一个例子展示了如何在O(n)的时间复杂度内找到数组中两个数的索引,使得它们相加等于目标值。第二个例子是直接翻转字符串,通过设置两个指针从两端向中间遍历实现。第三个例子是翻转字符串的子串,每次翻转k个字符,同样利用了双指针来定位翻转范围。

790

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



