合并两个有序数组
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1=m-1,p2=n-1;
int p3=nums1.length-1;
while(p1>=0&&p2>=0){//放完一个数组
if(nums1[p1]>nums2[p2]){
nums1[p3--]=nums1[p1];
p1--;
}else{
nums1[p3--]=nums2[p2];
p2--;
}
}
while(p2>=0){//因为是往num1放,所以考虑num2即可
nums1[p3--]=nums2[p2--];
}
return;
}
}
有序数组的平方
双指针从两端往中间移动即可
class Solution {
public int[] sortedSquares(int[] nums) {
int p1=0,p2=nums.length-1;
int p3=nums.length-1;
int[] res=new int[nums.length];
while(p1<=p2){
if(nums[p1]*nums[p1]>nums[p2]*nums[p2]){
res[p3--]=nums[p1]*nums[p1];
p1++;
}else{
res[p3--]=nums[p2]*nums[p2];
p2--;
}
}
return res;
}
}
反转单词
先清空空格,前中后
Stringbuilder要先转为String,再转为char
class Solution {
public String reverseWords(String s) {
StringBuilder sb=new StringBuilder();
char[] cc=s.toCharArray();
for(int i=0;i<s.length();i++){//删除多余空格
if(cc[i]!=' '){//加字母
sb.append(cc[i]);
}else if(!sb.isEmpty()&&sb.charAt(sb.length()-1)!=' '){//考虑首和中,加一个空格
sb.append(cc[i]);
}
}
if(sb.charAt(sb.length()-1)==' '){//删除末尾空格
sb.deleteCharAt(sb.length()-1);
}
char[] res=sb.toString().toCharArray();
reverse(res,0,res.length-1);
for(int i=0,j=0;i<res.length;i++){
if(res[i]==' '){//遇到空格就反转
reverse(res,j,i-1);
j=i+1;
}
if(i==res.length-1){//最后一个单词也反转
reverse(res,j,i);
}
}
return String.valueOf(res);
}
void reverse(char[] c,int m,int n){
while(m<n){
char temp=c[m];
c[m]=c[n];
c[n]=temp;
m++;
n--;
}
}
}