VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • 剑指offer计划13(双指针简单)---java

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(); } }

本文作者:叫我阿康就好

本文链接:https://www.cnblogs.com/urmkhaos/p/15261590.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。



相关教程