Loading

操作数组

将一个二维数组顺时针旋转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     }

 

posted @ 2019-07-20 14:56  glorybai  阅读(188)  评论(0)    收藏  举报