1.1、题目1
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
1.2、解法
经典双指针,通过判断%2来分辨是否为偶数
这里有一个陷阱,注意里面的循环需要增加判断
1.3、代码
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
JAVA
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、代码
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
JAVA
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、代码
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
JAVA
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(); } }