905. 按奇偶排序数组【简单题】【每日一题】
思路:
双指针交换数组位置
代码:
class Solution {
public int[] sortArrayByParity(int[] nums) {
//定义左指针left表示偶数,定义右指针right表示奇数
int left = 0,right = nums.length-1;
while (left < right){//当左指针小于右指针时
if (nums[left] % 2 == 0){//如果左指针指向的是偶数,那么左指针右移,继续判断
left++;
}else {//如果左指针是奇数,那么将左指针与右指针交换位置,将右指针左移,重新判断
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
right--;
}
}
//此时的数组已被更新为符合题意的数组,将其返回即可
return nums;
}
}
剑指 Offer II 020. 回文子字符串的个数【中等题】
思路:
遍历所有可能存在的回文中心,从回文中心向两端不断扩展,遇见回文子串就将计数变量
ans
加1
,直到不能构成回文串为止,然后继续扩展下一组回文中心。
代码:
class Solution {
public int countSubstrings(String s) {
int n = s.length(),ans = 0;
//长度为n的字符串会产生 2n-1组回文中心,当回文子串长度为奇数时,回文中心是一个数,当回文子串长度为偶数时,回文子串是一对数,左比右小1
for (int i = 0; i < 2 * n-1; i++) {
//定义当前回文子串的回文中心left 和 right
int left = i / 2,right = i / 2 + i % 2;
//从回文中心向左右两端扩展,遇到相等字符就说明遇到一个回文子串,ans++,并继续向两端扩展
while(left >= 0 && right < n && s.charAt(left) == s.charAt(right)){
left--;
right++;
ans++;
}
}
return ans;
}
}