题一:【数字在排序数组中出现的次数】
1 public class Solution { 2 public int GetNumberOfK(int [] array , int k) { 3 int count = 0; 4 for(int i=0;i<array.length;i++){ 5 if(array[i]==k){ 6 count++; 7 } 8 if(i<array.length-1&&array[i]==k&&array[i+1]!=k){ 9 return count; 10 } 11 } 12 return count; 13 } 14 }
1 public class Solution { 2 public int GetNumberOfK(int [] array , int k) { 3 if(array.length==0) return 0; 4 int firstIndex = GetFirst(array, 0, array.length-1, k); 5 int lastIndex = GetLast(array, 0, array.length-1, k); 6 if(firstIndex!=-1&&lastIndex!=-1){ 7 return lastIndex-firstIndex+1; 8 } 9 return 0; 10 } 11 public int GetFirst(int[] array, int left, int right, int k){ 12 if(left>right) return -1; 13 int mid = (left+right)/2; 14 if(array[mid]>k){ 15 return GetFirst(array,0,mid-1,k); 16 }else if(array[mid]<k){ 17 return GetFirst(array,mid+1,right,k); 18 }else{ 19 if(mid==left||array[mid-1]!=k){ 20 return mid; 21 }else{ 22 return GetFirst(array,0,mid-1,k); 23 } 24 } 25 } 26 public int GetLast(int[] array, int left, int right, int k){ 27 if(left>right) return -1; 28 int mid = (left+right)/2; 29 if(array[mid]>k){ 30 return GetLast(array,0,mid-1,k); 31 }else if(array[mid]<k){ 32 return GetLast(array,mid+1,right,k); 33 }else{ 34 if(mid==right||array[mid+1]!=k){ 35 return mid; 36 }else{ 37 return GetLast(array,mid+1,right,k); 38 } 39 } 40 } 41 }
1 /** 2 public class TreeNode { 3 int val = 0; 4 TreeNode left = null; 5 TreeNode right = null; 6 public TreeNode(int val) { 7 this.val = val; 8 } 9 } 10 */ 11 public class Solution { 12 public int TreeDepth(TreeNode root) { 13 if(root==null) return 0; 14 int leftHeight = TreeDepth(root.left); 15 int rightHeight = TreeDepth(root.right); 16 return (leftHeight>rightHeight)?(leftHeight+1):(rightHeight+1); 17 } 18 }
1 public class Solution { 2 public boolean IsBalanced_Solution(TreeNode root) { 3 if(root==null) return true; 4 int leftDepth = TreeDepth(root.left); 5 int rightDepth = TreeDepth(root.right); 6 int diff = leftDepth-rightDepth; 7 if(diff>1||diff<-1){ 8 return false; 9 } 10 return IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right); 11 } 12 public int TreeDepth(TreeNode root) { 13 if(root==null) return 0; 14 int leftHeight = TreeDepth(root.left); 15 int rightHeight = TreeDepth(root.right); 16 return (leftHeight>rightHeight)?(leftHeight+1):(rightHeight+1); 17 } 18 }
1 public class Solution { 2 public boolean IsBalanced_Solution(TreeNode root) { 3 return getDepth(root)!=-1; 4 } 5 public int getDepth(TreeNode root){ 6 if(root==null) return 0; 7 int left = getDepth(root.left); 8 //当前节点左子树不平衡的,则整个也不是平衡的 9 if(left==-1) return -1; 10 int right = getDepth(root.right); 11 if(right==-1) return -1; 12 int diff = left-right; 13 if(diff>1||diff<-1){ 14 return -1; 15 }else{//如果当前节点时平衡的,则深度为较深的子树深度加上1 16 return diff>0?left+1:right+1; 17 } 18 } 19 }
1 //num1,num2分别为长度为1的数组。传出参数 2 //将num1[0],num2[0]设置为返回结果 3 public class Solution { 4 public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { 5 int xor = 0; 6 //大数组的异或 7 for(int i=0;i<array.length;i++){ 8 xor = xor^array[i]; 9 } 10 //从左往右找出xor第一个1的位置 11 int index = 1; 12 while((xor&index)==0){//1&1=1,1&0=0,0&0=0 13 index = index<<1;//如果xor该位不为1,则index左移一位仅需判断 14 } 15 int res1=0; 16 int res2=0; 17 for(int i=0;i<array.length;i++){ 18 if((array[i]&index)!=0){//分组,将该位是1的分为一组,该位是0的分为一组 19 res1 = res1^array[i]; 20 }else{ 21 res2 = res2^array[i]; 22 } 23 } 24 num1[0] = res1; 25 num2[0] = res2; 26 } 27 }
1 import java.util.ArrayList; 2 public class Solution { 3 public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { 4 ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); 5 ArrayList<Integer> list; 6 for(int i=1;i<=sum/2+1;i++){ 7 list = new ArrayList<Integer>(); 8 int sumary = 0; 9 int j = i; 10 while(sumary<=sum){ 11 if(sumary==sum&&j!=(i+1)) 12 { 13 res.add(list); 14 break; 15 } 16 list.add(j); 17 sumary = sumary+j; 18 j=j+1; 19 } 20 } 21 return res; 22 } 23 }
1 import java.util.ArrayList; 2 public class Solution { 3 public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { 4 ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >(); 5 if(sum<2) return res; 6 int start = 1, end = 2; 7 while(start<end&&end<=(sum/2+1)){ 8 int sumary = (start+end)*(end-start+1)/2;//求和公式 9 if(sumary<sum){ 10 end++; 11 }else if(sumary>sum){ 12 start++; 13 }else{ 14 ArrayList<Integer> list = new ArrayList<Integer>(); 15 for(int i=start;i<=end;i++){ 16 list.add(i); 17 } 18 res.add(list); 19 start++; 20 } 21 } 22 return res; 23 } 24 }
1 import java.util.ArrayList; 2 public class Solution { 3 public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { 4 ArrayList<Integer> res = new ArrayList<Integer>(); 5 int start = 0; 6 int end = array.length-1; 7 while(start<end){ 8 int sumary = array[start]+array[end]; 9 if(sumary<sum){ 10 start++; 11 }else if(sumary>sum){ 12 end--; 13 }else{ 14 res.add(array[start]); 15 res.add(array[end]); 16 return res; 17 } 18 } 19 return res; 20 } 21 }
1 public class Solution { 2 public String ReverseSentence(String str) { 3 if(str.trim().equals("")) return str; 4 String[] stringArr = str.split(" "); 5 String res = ""; 6 for(int i=stringArr.length-1;i>=0;i--){ 7 if(i==stringArr.length-1){ 8 res=res+stringArr[i]; 9 }else{ 10 res=res+" "+stringArr[i]; 11 } 12 } 13 return res; 14 } 15 }
1 public class Solution { 2 public String LeftRotateString(String str,int n) { 3 if(n>str.length()) return ""; 4 char[] chArr = str.toCharArray(); 5 char[] res = new char[chArr.length]; 6 int index=0; 7 for(int i=n;i<chArr.length;i++){ 8 res[index++] = chArr[i]; 9 } 10 for(int i=0;i<n;i++){ 11 res[index++] = chArr[i]; 12 } 13 return String.valueOf(res); 14 } 15 }
原文:https://www.cnblogs.com/qmillet/p/12066826.html