常见算法题

1、冒泡排序

复制代码
主要运用双层for循环嵌套,进行冒泡排序
public class BubbleSortTest {
  public static void main(String[] args) {

  int[] arr = new int[]{-12,3,2,34,5,8,1};
  //冒泡排序
  for(int i = 0;i < arr.length-1;i++){//外层循环控制排序趟数
    for(int j = 0;j <arr.length-1-i;j++){//内层循环控制每一趟排序多少次
      if(arr[j] >arr[j+1]){
      int temp = arr[j];
      arr[j] = arr[j+1];
      arr[j+1] = temp;
      }
    }
  }
  //遍历
  for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]+"\t");
  }

  }
}
复制代码

2、删除排序数组中的重复项

 

3、两数之和

题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
示例:给定 nums = [2, 7, 11, 15], target = 9,因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]
暴力方法:

复制代码
public int[] twoSum (int[] numbers, int target) {
       // write code here
       int [] twoindex = new int[2];
       for(int i = 0;i<numbers.length-1;i++){
           for(int j = i+1;j<numbers.length;j++){
               if((numbers[i]+numbers[j])==target){
                   twoindex[0]=i;
                   twoindex[1]=j;
                   return twoindex;
               }
           }
       }
 
 
       return null;
   }
复制代码
用Hash:

复制代码
public class Solution {
    public int[] twoSum (int[] numbers, int target) {
        int[] result = new int[2];
        Map<Integer, Integer> map = new HashMap();
        for(int i = 0; i < numbers.length; i++) {
            if(map.get(target - numbers[i]) != null) {
                result[0] = map.get(target - numbers[i]);
                result[1] = i;
                return result;
            }
            map.put(numbers[i], i);
        }
        return result;
    }
}
复制代码

4、最小的K个数

题目描述
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组

复制代码
import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> list= new ArrayList<>();
        if(input.length<k)
            return list;
        else{
            for(int i=0;i<input.length-1;i++)
                for(int j=0;j<input.length-1-i;j++)
                    if(input[j+1]<input[j]){
                        int temp=input[j+1];
                        input[j+1]=input[j];
                        input[j]=temp;
                    }
            for(int m=0;m<k;m++)
                list.add(input[m]);
        }
        return list;
        
    }
}
复制代码

5、二分查找

复制代码
 public static int binarySearch(int[] arr, int x) {
 8         int low = 0;   
 9         int high = arr.length-1;   
10         while(low <= high) {   
11             int middle = (low + high)/2;   
12             if(x == arr[middle]) {   
13                 return middle;   
14             }else if(x <arr[middle]) {   
15                 high = middle - 1;   
16             }else {   
17                 low = middle + 1;   
18             }  
19         }  
20         return -1;  
21     }
复制代码

 

posted @   李家新生代农民工  阅读(63)  评论(2编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示