LeetCode习题

66.

package com.openlab.leetcode;

public class LeetCode66 {
    public static void main(String[] args) {
        Solution li = new Solution();
        int[] digits= {3,4,5,6};
        li.plusOne(digits);
        for (int i = 0; i < digits.length; i++) {
            System.out.println(digits[i]);
        }
    }
}

class Solution {
    public int[] plusOne(int[] digits) {

                int num =0;
                int carry = 1;
                //进位
                for(int i=digits.length-1;i>=0;i--){
                    num = digits[i]+carry;
                    digits[i] = num%10;
                    carry =num/10;
                    if(carry==0){
                        break;
                    }
                }
                if(carry==0){
                    return digits;
                }
                int[] newarr = new int[digits.length+1];
                newarr[0] = 1;
                return newarr;
    }
}

136.

package com.openlab.leetcode;

import java.util.Arrays;

public class LeetCode136 {
    public static void main(String[] args) {
        Solution2 li = new Solution2();
        int[] nums = new int[]{3,3,2,2,1};
        System.out.println( li.singleNumber(nums));
    }
}

class Solution2 {
    public int singleNumber(int[] nums) {
        //1,1,2,2,3
        //1,1,2,3,3
        //1,2,2,3,3
        Arrays.sort(nums);
        int i =0;
        while (i<nums.length-1){
            if (nums[i]==nums[i+1]){
                i+=2;
            }else {
                return nums[i];
            }
        }
        return nums[nums.length-1];

    }
}

167.

class LC167{
    public int[] twoSum(int[] numbers, int target) {
        for(int i=0;i<numbers.length;i++){
            //binarySearch使用二分搜索算法搜索指定值的指定数组的范围
            int index=binarySearch(numbers,i+1,numbers.length-1,target-numbers[i]);
            //如果index不等于-1便是找到了,将结果返回
            if(index!=-1){
                return new int[]{i+1,index+1};
            }
        }
        return null;
        /* 
        int i = 0, j = numbers.length - 1;
          while (i < j) {
            int sum = numbers[i] + numbers[j];
            if (sum == target) {
              return new int[]{i + 1, j + 1};
           } else if (sum < target) {
              i++;
           } else {
              j--;
           }
         }
        return null;
        */
    }
    public int binarySearch(int[] arr,int min,int max,int key){
        int mid=(min+max)/2;
        while(true){
            if(arr[mid]>key){
                max=mid-1;
            }else if(arr[mid]<key){
                min=mid+1;
            }else{
                return mid;
            }
            mid=(min+max)/2;
            if(max<min){
                return -1;
            }
        }
    }
}

169.

package com.openlab.leetcode;

public class LeetCode169 {
    public static void main(String[] args) {
        Solution6 li = new Solution6();
        int[] A = new int[]{1,1,1,1,1,3,3,2,3};
        li.majorityElement(A);
        System.out.println(li.majorityElement(A));
        for (int i = 0; i < A.length; i++) {
            System.out.print(A[i]+" ");
        }
    }
}
class Solution6{
//对重复出现的数进行计数,相同加,不同减
    public int majorityElement(int[] nums) {
        int result = nums[0];
        int count = 1;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i]==result){
                count++;
            }else {
                count--;
                if (count==0){
                    result = nums[i];
                    count = 1;
                }
            }
        }
        return result;
    }
}

268.

package com.openlab.leetcode;

import java.util.Arrays;
//对数组进行排序,大体思路:前一位数+1不等于后一位数,就返回前一位数+1
public class LeetCode268 {
    public static void main(String[] args) {
        Solution3 li = new Solution3();
        int[] nums = new int[]{1,2};
        System.out.println( li.missingNumber(nums));
    }
}
class Solution3{
    public int missingNumber(int[] nums) {
        Arrays.sort(nums);
        //0
        //1
        if (nums.length==1&&nums[0]==0){
            return 1;
        }else if (nums.length==1){
            return nums[nums.length-1]-1;
        }
        //0 1

        for (int i = 0; i < nums.length-1; i++) {
            if (nums[i]+1!=nums[i+1]){
                //0 2
                return nums[i]+1;
            }
        }

        return nums[0]-1;
    }
}

 

724.

package com.openlab.leetcode;

public class LeetCode724 {
    public static void main(String[] args) {
        Solution1 li = new Solution1();
        int[] nums = new int[]{1,3,4,5,2,1,3,2,8};
        li.pivotIndex(nums);
    }
}

class Solution1 {
    public int pivotIndex(int[] nums) {
        if (nums.length<=1){
            return -1;
        }
        int sum = 0;
        for (int i =0; i< nums.length;i++){
            sum+=nums[i];
        }
        int leftSum = 0;
        int rightSum = 0;
        for (int i = 0; i < nums.length; i++) {
            if (i == 0) {
                leftSum=0;
            }else {
                leftSum+=nums[i-1];
            }
            rightSum = sum-leftSum-nums[i];
            if (leftSum == rightSum) {
                return i;
            }
        }
        return -1;
    }
}

 


905.

 

package com.openlab.leetcode;

public class LeetCode905 {
    public static void main(String[] args) {
        Solution5 li = new Solution5();
        int[] A = new int[]{1,2,3,4,5,6,7,8,9};
        A = li.sortArrayByParity2(A);
        for (int i = 0; i < A.length; i++) {
            System.out.print(A[i]+" ");
        }
    }

}
class Solution5{
    //排序后各元素相对位置不变
    public int[] sortArrayByParity2(int[] A){
        for (int i = 1; i < A.length; i++) {
            if (A[i]%2==1){
                continue;
            }
            int e = A[i];
            int j;
            for (j = i; j >0&&A[j-1]%2==1 ; j--) {
                A[j] = A[j-1];
            }
            A[j] = e;
        }
        return A;
    }
    public int[] sortArrayByParity(int[] A) {
        int[] newNum = new int[A.length];
        int j =0;
        int k =A.length-1;
        for (int i = 0; i < A.length; i++) {
            if (A[i]%2==0){
                newNum[j]=A[i];
                j++;
            }else {
                newNum[k]=A[i];
                k--;
            }

        }
        return newNum;
    }
    public int[] sortArrayByParity1(int[] A) {
        //时间低
        int L =0;
        int R = A.length-1;
        while (L<R){
            //左偶右奇
            if (A[L]%2==0&&A[R]%2==1){
                L++;
                R--;
            //左奇右奇
            }else if(A[L]%2==1&&A[R]%2==1){
                R--;
                //左奇,右偶
            }else if (A[L]%2==1&&A[R]%2==0){
                //交换数值
                A[L] = A[L]+A[R];
                A[R] = A[L]-A[R];
                A[L] = A[L]-A[R];
                L++;
                R--;
                //左偶右偶
            }else {
                L++;
            }
        }
        return A;
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值