首页 > 其他分享 >双指针法又一感悟

双指针法又一感悟

时间:2024-01-11 11:33:24浏览次数:23  
标签:感悟 sort right nums int -- 指针 left

最开始做的时候没想到双指针法,用了简单的冒泡排序结果超时了,题解中的sort函数用的是快排。

点击查看代码
void quick_sort(int a[], int l, int r)
{
    if (l < r)
    {
        int i,j,x;

        i = l;
        j = r;
        x = a[i];
        while (i < j)
        {
            while(i < j && a[j] > x)
                j--; // 从右向左找第一个小于x的数
            if(i < j)
                a[i++] = a[j];
            while(i < j && a[i] < x)
                i++; // 从左向右找第一个大于x的数
            if(i < j)
                a[j--] = a[i];
        }
        a[i] = x;
        quick_sort(a, l, i-1); /* 递归调用 */
        quick_sort(a, i+1, r); /* 递归调用 */
    }
}

得到快速排序的思路后,还是有问题,我没有新建一个数组,而是进行交换,这导致left就没动,并不是一趟选出最大的那个,所以应该要新建应该数组

点击查看代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
vector<int>v(nums.size(),0);int n=nums.size();
int left=0;int right=n-1;
for(int i=n-1;i>=0;i--){
    if(nums[left]*nums[left]>nums[right]*nums[right]){
        v[i]=nums[left]*nums[left];
        ++left;
    }
    else {
        v[i]=nums[right]*nums[right];
        --right;
    }
}
return v;
    }
};

标签:感悟,sort,right,nums,int,--,指针,left
From: https://www.cnblogs.com/yun-che/p/17958200

相关文章

  • 数组指针
    在数组指针中,*和[]的意义是相似的,都是优先降维数在降指针的级数比如p是一个指向n维数组的一级指针,那么p[][][]就是一个指向n-3维数组的指针,打了n个中括号之后就变成了指向一个点的指针,此时再*一下就变成了了值(或者再括号一下)如果p是一个指向n维数组的三级指针,那么打了n个中括号......
  • 《算法竞赛》---三指针
    ----双指针(尺取法)1.找出指定和的整数对----p37(书页)哈希表#include<bits/stdc++.h>usingnamespacestd;inta[100010];intmain(){ios::sync_with_stdio(false);cin.tie();cout.tie();unordered_map<int,bool>q;intn,m;cin>>n>>m;fo......
  • C++指针详解
    定义:指针是一个整数,一种存储内存地址的数字内存就像一条线性的线,在这条街上的每一个房子都有一个号码和地址类似比喻成电脑,这条街上每一个房子的地址是一个字节我们需要能够准确找到这些地址的方法,用来读写操作因此,指针就是这些地址。不要考虑类型,无论是什么类型的指针,都是用来保......
  • C 语言指针完全指南:创建、解除引用、指针与数组关系解析
    C语言中的指针创建指针我们可以使用引用运算符&获取变量的内存地址:intmyAge=43;//一个int变量printf("%d",myAge);//输出myAge的值(43)printf("%p",&myAge);//输出myAge的内存地址(0x7ffe5367e044)指针是一个将另一个变量的内存地址作为其值的变量。......
  • C 语言指针完全指南:创建、解除引用、指针与数组关系解析
    C语言中的指针创建指针我们可以使用引用运算符&获取变量的内存地址:intmyAge=43;//一个int变量printf("%d",myAge);//输出myAge的值(43)printf("%p",&myAge);//输出myAge的内存地址(0x7ffe5367e044)指针是一个将另一个变量的内存地址作为其值的变量......
  • 指针数组与数组指针的区别及相关知识
    区别:指针数组:定义int*p[n]可称为指针的数组,是数组,数组里的元素都是指针。也就是说数组存储的是指针,数组占多少字节由数组本身决定。指针数组+1不同类型的变化如下//eg:用指针parr指向一个一维数组intmain(){ int*parr[5]={0,1,2,3,4}; printf("%x\n",parr);//数组名代......
  • 数组指针的用法
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//参数是数组形式voidprint1(intarr[3][5],intx,inty)//用数组形式接收,再接收传来的参数{ inti=0; intj=0; for(i=0;i<x;i++) { for(j=0;j<y;j++) { printf("%d",arr[i][j]);......
  • 数组指针
    数组指针是指针 用来存放数组的地址#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ //eg: //int*P=NULL;//p是整形指针-指向整型的指针-可以存放整型的地址 //char*pc=NULL;//pc是字符指针-指向字符的指针-可以存放字符的地址 //数组指针-指......
  • 指针数组
    指针数组是数组是用来存放指针的eg:指针数组用法#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ //int*parr[4];//存放整型指针的数组--指针数组 //char*pch[5];//存放字符指针的数组--指针数组 intarr1[5]={1,2,3,4,5}; intarr2[5]={2,3,4,5,6......
  • 指针面试(避坑题)
    1.强转后类型+1 物理地址+强转后的类型大小个字节#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ intarr[]={1,2,3,4,5}; short*p=(short*)arr;//将arr强转为short*型,此时每+1, //跳过两个字节,累计四个字节才是一个元素 inti=0; for(i=0;......