操作数组
将一个二维数组顺时针旋转90度
1 public void rotate(int[][] matrix){ 2 int n=matrix.length; 3 for(int i=0;i<n/2;i++){ 4 for(int j=i;j<n-1-i;j++){ 5 int temp=matrix[i][j]; 6 matrix[i][j]=matrix[n-1-j][i]; 7 matrix[n-1-j][i]=matrix[n-1-i][n-1-j]; 8 matrix[n-1-i][n-1-j]=matrix[j][n-1-i]; 9 matrix[j][n-1-i]=temp; 10 } 11 } 12 }
一个数组除一个元素外其他都是两两相等,求这个元素
1 class find1From2 2 { 3 public static void main(String[] args) 4 { 5 int array[]={2,3,3,5,5,6,6,8,8}; 6 int v=0; 7 for(int i=0;i<array.length;i++) 8 { 9 v^=array[i]; 10 } 11 System.out.println("不同的那个数是:"+v); 12 } 13 }
异或符真好用
找出数组中和为s的一对组合
1 public int[] twoSum(int[] nums,int target){ 2 HashMap<Integer,Integer>map=new HashMap<Integer,Integer>(); 3 int[] a=new int[2]; 4 map.put(nums[0],0); 5 for(int i=1;i<nums.length;i++){ 6 if(map.containsKey(target-nums[i])){ 7 a[0]=map.get(target-nums[i]); 8 a[1]=i; 9 return a; 10 }else{ 11 map.put(nums[i],i); 12 } 13 } 14 return a; 15 }
求一个数组中连续子向量的最大和
1 public int maxSubArray(int[] nums){ 2 int sum=0; 3 int maxSum=Integer.MIN_VALUE; 4 if(nums==null||nums.length==0){ 5 return sum; 6 } 7 for(int i=0;i<nums.length;i++){ 8 sum+=nums[i]; 9 maxSum=Math.max(maxSum,sum); 10 if(sum<0){ 11 sum=0; 12 } 13 } 14 return maxSum; 15 }
求一数组中前k个最大的数
1 public int findKthLargest(int[] nums,int k){ 2 if(k<1||nums==null){ 3 return 0; 4 } 5 return getKth(nums.length-k+1,nums,0,nums.length-1); 6 } 7 8 public int getKth(int k,int[] nums,int start,int end){ 9 int pivot=nums[end]; 10 int left=start; 11 int right=end; 12 while(true){ 13 while (nums[left]<pivot&&left<right) { 14 left++; 15 } 16 while(nums[right]>=pivot&&right>left){ 17 right--; 18 } 19 if (left==right) { 20 break; 21 } 22 swap(nums,left,end); 23 } 24 if(k==left+1){ 25 return pivot; 26 }else if (k<left+1) { 27 return getKth(k,nums,start,left-1); 28 }else{ 29 return getKth(k,nums,left+1,end); 30 } 31 } 32 33 34 public void swap(int[] nums,int n1,int n2){ 35 int tmp=nums[n1]; 36 nums[n1]=nums[n2]; 37 nums[n2]=tmp; 38 }

浙公网安备 33010602011771号