初级算法(一)(数组篇)

移动零:

给定一个数组 nums, 编写一个函数将所有 0 移动到它的末尾,同时保持非零元素的相对顺序。
例如, 定义 nums = [0, 1, 0, 3, 12],调用函数之后, nums 应为 [1, 3, 12, 0, 0]。
注意事项:
1.必须在原数组上操作,不要为一个新数组分配额外空间。
2尽量减少操作总数。

class Solution {
    public void moveZeroes(int[] nums) {
         int a=0;
         for(int i=0;i

从排序数组中删除重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

注意事项:
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
例如:int[] nums={1,1,2} 返回2 原数组的前两个元素改为1,2

class Solution {
    public int removeDuplicates(int[] nums) {
        int a=1;
        
        for(int i=1;inums[a-1]){
                nums[a]=nums[i];
                a=a+1;
            }
        }
        return a;
    
    }
}

两数之和

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

class Solution {
    public int[] twoSum(int[] nums, int target) {
       int[] result = new int[2];
        for (int i = 0; i < nums.length; i++) {
            
                for (int j = i + 1; j < nums.length; j++) {
                    if (nums[i] + nums[j] == target) {
                        result[0] = i;
                        result[1] = j;
                        break;
                    }
                }
            
        }
        return result;
    }
}

旋转数组

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例 1:

输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]
示例 2:

输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]
说明:

尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
要求使用空间复杂度为 O(1) 的原地算法。

 public void rotate(int[] nums, int k) {
        
        if(nums.length==0||k<0){
            return;
        }
        
        if(nums.length<=k){
           k=k-nums.length;
        }
        
        
        int[] res=new int[nums.length];
        
        for(int i=0;i

存在重复

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

示例 1:

输入: [1,2,3,1]
输出: true
示例 2:

输入: [1,2,3,4]
输出: false
示例 3:

输入: [1,1,1,3,3,4,3,2,4,2]
输出: true

public boolean containsDuplicate(int[] nums) {
        
        if(nums.length<2){ 
            return false; 
        }
        Arrays.sort(nums);
        
        for(int i=1;i

只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1
示例 2:

输入: [4,1,2,1,2]
输出: 4

public int singleNumber(int[] nums) {
        
        Arrays.sort(nums);
        
        for(int i=0;i
  //冒泡排序
        Log.d("222初始", Arrays.toString(arr));
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    int valueBig = arr[i];
                    int valueSmall = arr[j];
                    arr[i] = valueSmall;
                    arr[j] = valueBig;
                }
                Log.d("222排序中", Arrays.toString(arr));
                num=num+1;
            }
        }
        Log.d("222排序的次数", num+"");
        Log.d("222排序后", Arrays.toString(arr));

        //二分法查找
        Arrays.sort(arr);
        int start = 0;
        int end = arr.length - 1;
        while (start <= end) {
            int middle = (start + end) / 2;
            if (arr[middle] > 9) {
                end = middle - 1;
            } else if (arr[middle] < 9) {
                start = middle + 1;
            } else {
                return;
            }
        }

以上题目均选自领扣网站!!

https://leetcode-cn.com

你可能感兴趣的:(初级算法(一)(数组篇))