力扣解题分享

本文展示了几个与数组操作相关的算法问题,包括寻找目标值在有序数组中的插入位置,计算有序数组元素的平方并保持排序,以及如何旋转数组。这些算法涉及二分查找、排序和数组变换等技术。

35.探索插入的位置

JS

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
    var l=0,r=nums.length-1;
    while (l < r){
        var mid = Math.floor((l+r)/2);
        if (nums[mid] > target)
            r = mid-1;
        else if(nums[mid] < target)
            l = mid+1;
        else
            return mid;
    }  
    return nums[l] >= target ? l : l+1;
};

CPP

    int searchInsert(vector<int>& nums, int target) {
        int l = 0, r = nums.size();
        while(l < r){
            int mid = (r+l)/2;
            if(nums[mid] >= target) r = mid;
            else l = mid+1;
        }
        return r;
    }

Python

    def searchInsert(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        if target <= nums[0]:
            return 0
        if target>nums[len(nums)-1]:
            return len(nums)
        if target == nums[len(nums)-1]:
            return len(nums)-1
        i=0
        for idx,i in enumerate(nums):
            if target == i:
                return idx
        for i in range(0,len(nums)-1):
            if nums[i]<=target and nums[i+1]>=target:
                return i+1

C

int searchInsert(int* nums, int numsSize, int target){
    int i,read_i=-1;
    if(target>nums[numsSize-1])
        return numsSize;
    else if(target<nums[0])
        return 0;
    for(i=0;i<numsSize;i++)
        if(target==nums[i])
            read_i=i;
    if(read_i<0){
        for(i=0;i<numsSize-1;i++){
            if(target>nums[i]&&target<nums[i+1])
               read_i = i+1;
        }
    }
    return read_i;
}

977.有序数组的平方

C

int* sortedSquares(int* nums, int numsSize, int* returnSize){
    int i;
    int* ans = (int*)malloc( numsSize * 4 );
    if (ans){
        for (i=0;i<numsSize;i++)
            ans[i] = nums[i]*nums[i];
        for (i=1; i<numsSize; i++){
            int key = ans[i];
            int j = i-1;    
            while (j>=0 && ans[j] > key){
                ans[j+1] = ans[j];
                j--;
            }
            ans[j+1] = key;
        }
        for (i=0;i<numsSize;i++) printf("%d ", ans[i]);
        return ans;
    }
    else
        return NULL;
}

CPP

    vector<int> sortedSquares(vector<int>& nums) {
        vector<int> ans;
        for (int i=0;i<nums.size();i++){
            ans.push_back(nums[i]*nums[i]);
        }
        sort(ans.begin(), ans.end());
        return ans;
    }

JAVA

        int[] ans = new int[nums.length];
        for (int i=0;i<nums.length;i++){
            ans[i] = nums[i]*nums[i];
        }
        Arrays.sort(ans);
        return ans;
    }

Python

    def sortedSquares(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        ans = []
        for i in nums:
            ans.append(i ** 2)
        ans.sort()
        return ans

Python3

    def sortedSquares(self, nums: List[int]) -> List[int]:
        ans:List[int] = []
        for i in nums:
            ans.append(i ** 2)
        ans.sort()
        return ans

JS

var sortedSquares = function(nums) {
    let ans = new Array(nums.length);
    for (let i=0;i<nums.length;i++)
        ans[i] = nums[i] * nums[i]
    ans.sort(function(a, b){return a-b;});
    return ans;
};

198.转轮数组

C

void rotate(int* nums, int numsSize, int k){
    if (k == 0)
        return ;
    int i,help[k];
    int j=0;
    
    if (numsSize <= k){
        while (k--){
            int m;
            for (i=numsSize-1;i<numsSize;i++)
                m = nums[i];
            for (i=numsSize-1-1 ; i >= 0; i--)
                nums[i+1] = nums[i];
            nums[0] = m;
        }    
        return ;    
    }
    for (i=numsSize-k;i<numsSize;i++)
        help[j++] = nums[i];
    for (i=numsSize-k-1 ; i >= 0; i--)
        nums[i+k] = nums[i];
    for (i=0;i<k;i++)
        nums[i] = help[i];
}

283.移动零

CPP

    void moveZeroes(vector<int>& nums) {
            stack<int> pos;
    for (int i=0 ;i<nums.size(); i++)
        if(nums[i] == 0)
            pos.push(i);
    int cnt = pos.size();
    while (!pos.empty()) {
        nums.erase(nums.begin() + pos.top());
        pos.pop();
    }
    while (cnt--)
        nums.push_back(0);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值