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