1.1、題目1
劍指 Offer 21. 調整陣列順序使奇數位于偶數前面
1.2、解法
經典雙指標,通過判斷%2來分辨是否為偶數
這里有一個陷阱,注意里面的回圈需要增加判斷
1.3、代碼
class Solution {
public int[] exchange(int[] nums) {
int left=0,right=nums.length-1;
while(left<right){
while(left<right && nums[right]%2==0) right--;
while(left<right && nums[left]%2!=0) left++;
int temp=nums[right];
nums[right]=nums[left];
nums[left]=temp;
}
return nums;
}
}
2.1、題目2
劍指 Offer 57. 和為s的兩個數字
2.2、解法
跟兩數之和差不多,可以用哈希表,但這里是雙指標的單元,就用雙指標吧,
兩個數大時,就減少右邊,兩個數小時,就增大左邊
2.3、代碼
class Solution {
public int[] twoSum(int[] nums, int target) {
int left=0,right=nums.length-1;
while(left<right){
int sum=nums[left]+nums[right];
if(sum<target) left++;
else if(sum==target){
return new int[]{nums[left],nums[right]};
}else right--;
}
return new int[]{};
}
}
3.1、題目3
劍指 Offer 58 - I. 翻轉單詞順序
3.2、解法
經典雙指標,trim去掉前后的空格,加進緩沖區的時候顛倒+空格
注意,j要跟著變,規范一些,字符用'',字串用""
3.3、代碼
class Solution {
public String reverseWords(String s) {
s = s.trim();
if(s=="" || s==" ") return " ";
int j =s.length()-1,i=j;
StringBuffer str = new StringBuffer();
while(i>=0){
while(i>=0 && s.charAt(i)!=' ') i--;
str.append(s.substring(i+1,j+1)+" ");
while(i>=0 && s.charAt(i)==' ') i--;
j=i;
}
return str.toString().trim();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/299802.html
標籤:其他
