T O P

[资源分享]     剑指offer计划13(双指针简单)---java

  • By - 楼主

  • 2021-09-13 12:00:17
  • 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();
        }
    }
    

    本帖子中包含资源

    您需要 登录 才可以下载,没有帐号?立即注册