当前位置:网站首页>Mise en œuvre du langage leecode - C - 15. Somme des trois chiffres - - - - - idées à améliorer
Mise en œuvre du langage leecode - C - 15. Somme des trois chiffres - - - - - idées à améliorer
2022-07-06 07:24:00 【Sunshine nine Leaf lxgzxj】
Un.、Titre
2.、Comment résoudre le problème
(1)Idées à améliorer
Par exemple, le tableau est:{
-1,0,1,0,3}
(1)Construire un-10^5À10^5Tableau de,Mettez les données un par un dans,Pour la commodité de l'écriture-5À5.
(2)Définir plusieurs variables lors de la mise en place enregistrer les indices Max et Min et les index.
Valeur numérique:-5 -4 -3 -2 -1 0 1 2 3 4 5
Nombre de fois: 0 0 0 0 1 1 1 0 1 0 0
Index: 0 1 2 3 4 5 6 7 8 9 10
min max
temp
Longueur du tableau:11
MinIndex = 4
MaxIndex = 6
TempIndex = 4
MaxValue = 3
MinValue = -1
(3)Si la valeur minimale est supérieure à zéro,Indique que la façon dont le tableau est additionné ne peut pas être0,Renvoie une valeur nulle.
(4)Si la valeur maximale est inférieure à zéro,Indique que la façon dont le tableau est additionné ne peut pas être0,Renvoie une valeur nulle.
(5)Si le double du minimum plus le maximum est toujours supérieur à0,Expliquez que ce maximum n'est certainement pas dans la dernière réponse.
-1 * 2 + 3 > 0
MaxIndexMoins un
MaxIndex = 6
(5).Si le double du maximum plus le minimum est toujours inférieur à0, .Expliquez que ce minimum n'est certainement pas dans la réponse finale .
(6)Logique de jugement:MaxValue + MinValue + TempValue = 0,Notez - le.TempIndexPour5 .
-1 + 1 + 0 = 0
(7)Encore une fois. TempIndex=5La valeur correspondante est1, Description il n'y a qu'un seul dans le tableau 0, Et ne coïncide pas avec les valeurs maximales et minimales ,Conformité aux exigences.
MaxIndexMoins un
MaxIndex = 6
Tableau 2D final ajouter un tableau :{
{
-1 0 1 } }
(8)Encore une fois.:
MinValue : -1 , MaxValue : 0 , TempValue : 1
DécouverteTempValue : 1 Plus queMaxValue : 0, Pour les éléments répétitifs ,Sortez!.
(9)Encore une fois.:
MinValue : 0 , MaxValue : 1 , TempValue : -1
DécouverteTempValue : 1 Plus queMinValue : 0, Pour les éléments répétitifs ,Sortez!.
(10)Encore une fois.:
MinValue : 0 , MaxValue : 0 , TempValue : 0
Découverte0Il n'y a que deux valeurs, C'est ici qu'on l'a pris trois fois ,Sortez!.
Trois、VSCode d'essai
(1) Idées à améliorer
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ELEMENTSIZE 3
#define INITARRAYSIZE 10000
#define RECORDARRAYSIZE 10
void PrintfArr(void *arr, int size, int elementsize);
void PrintfHeadVal();
void Printf2DimensionArray(int** Array, int num1, int num2);
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes);
int main()
{
int nums[] = {
-1,0,1,0,3 };
int numsSize = sizeof(nums) / sizeof(int);
int returnSize = 0;
int** returnColumnSizes = (int**)malloc(sizeof(int*));
PrintfArr(nums, numsSize, sizeof(int));
threeSum(nums, numsSize, &returnSize, returnColumnSizes);
return 0;
}
/* Par exemple, le tableau est: Valeur numérique:-5 -4 -3 -2 -1 0 1 2 3 4 5 Nombre de fois: 0 1 2 1 3 1 0 2 4 5 1 Index: 0 1 2 3 4 5 6 7 0 9 10 min max temp Longueur du tableau:11 (1)Construire un-10^5À10^5Tableau de,Mettez les données un par un dans. (2) Définir deux variables lors de la mise en place enregistrer les indices Max et Min . (3)Si la valeur minimale est supérieure à zéro,Indique que la façon dont le tableau est additionné ne peut pas être0,Renvoie une valeur nulle. (4)Si la valeur maximale est inférieure à zéro,Indique que la façon dont le tableau est additionné ne peut pas être0,Renvoie une valeur nulle. (5) Ce qui signifie qu'il y a trois variables ,MaxIndex,MinIndex,TempIndex. (6)Logique de jugement:maxValeur + minValeur + tempValeur = 0,Notez - le.. maxValeur + minValeur + tempValeur != 0,Non enregistré. (7)min <= 0, max >= 0, tempValeur = 0 - minValeur - maxValeur,Pour jugertemp Index bits for . (8)temp Le BIT d'index correspondant est 0,Si Pour0,Non enregistré. Pour1 Pour déterminer si et max、minCoïncidence, Sortie coïncidente , Ne pas chevaucher les enregistrements .Plus grand que2,Enregistrement. */
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
*returnSize = 0;
if (numsSize < ELEMENTSIZE)
{
return NULL;
}
int** ResArray = (int**)malloc(sizeof(int*) * INITARRAYSIZE);
int* RecordArray = (int*)malloc(sizeof(int) * (RECORDARRAYSIZE * 2 + 1));
*returnColumnSizes = (int*)malloc(sizeof(int) * INITARRAYSIZE);
int MaxIndex = RECORDARRAYSIZE + nums[0];
int MinIndex = RECORDARRAYSIZE + nums[0];
int TempValue = 0;
int MaxValue = MaxIndex - RECORDARRAYSIZE;
int MinValue = MinIndex - RECORDARRAYSIZE;
int TempIndex = 0;
int i = 0;
int j = 0;
int Flag = 0;
//Initialiser le tableauRecordArray
for ( i = 0; i < RECORDARRAYSIZE * 2 + 1; i++)
{
RecordArray[i] = 0;
}
//Oui.nums Les valeurs du tableau sont enregistrées dans le tableau RecordArrayMoyenne
// Enregistrer la valeur minimale maximale et l'index
for ( i = 0; i < numsSize; i++)
{
MaxValue = MaxIndex - RECORDARRAYSIZE;
if (nums[i] > MaxValue)
{
MaxIndex = RECORDARRAYSIZE + nums[i];
}
MinValue = MinIndex - RECORDARRAYSIZE;
if(nums[i] < MinValue)
{
MinIndex = RECORDARRAYSIZE + nums[i];
}
RecordArray[RECORDARRAYSIZE + nums[i]]++;
}
MaxValue = MaxIndex - RECORDARRAYSIZE;
MinValue = MinIndex - RECORDARRAYSIZE;
PrintfHeadVal();
printf("Valeur numérique:");
PrintfArr(RecordArray, RECORDARRAYSIZE * 2 + 1, sizeof(int));
printf("MaxIndex : %d , MaxValue : %d , MinIndex : %d , MinValue : %d\n", MaxIndex, MaxValue, MinIndex, MinValue);
//Si la valeur minimale est supérieure à zéro,Indique que la façon dont le tableau est additionné ne peut pas être0,Renvoie une valeur nulle.
//Si la valeur maximale est inférieure à zéro,Indique que la façon dont le tableau est additionné ne peut pas être0,Renvoie une valeur nulle.
if (MaxValue < 0)
{
return NULL;
}
if (MinValue > 0)
{
return NULL;
}
// Ces deux cycles ci - dessous peuvent réduire l'arrière forNombre de cycles, Accélérer l'efficacité du programme .
//Non, ça ira., Pas très efficace .
while ((MinValue * 2 + MaxValue > 0) && (RecordArray[MaxIndex] != 0))
{
MaxIndex--;
MaxValue = MaxIndex - RECORDARRAYSIZE;
}
while ((MinValue + MaxValue * 2 < 0) && (RecordArray[MinIndex] != 0))
{
MinIndex++;
MinValue = MinIndex - RECORDARRAYSIZE;
}
for (i = MinIndex; i <= RECORDARRAYSIZE; i++)
{
if (RecordArray[i] == 0)
{
continue;
}
MinValue = i - RECORDARRAYSIZE;
while ((MinValue * 2 + MaxValue > 0) && (RecordArray[MaxIndex] != 0))
{
MaxIndex--;
MaxValue = MaxIndex - RECORDARRAYSIZE;
}
for ( j = MaxIndex; j >= RECORDARRAYSIZE; j--)
{
if (RecordArray[j] == 0)
{
continue;
}
MaxValue = j - RECORDARRAYSIZE;
TempValue = 0 - MinValue - MaxValue;
TempIndex = TempValue + RECORDARRAYSIZE;
printf(" i : %2d , MinValue : %2d ,j : %2d , MaxValue : %2d , TempIndex : %2d , TempValue : %2d , RecordArray[TempIndex] : %2d\n",
i, MinValue, j, MaxValue, TempIndex, TempValue, RecordArray[TempIndex]);
if (RecordArray[TempIndex] > 0)
{
if ((RecordArray[TempIndex] == 1) && (j > TempIndex) && (i < TempIndex))
{
Flag = 1;
}
else if ((RecordArray[TempIndex] == 2) && (j > TempIndex) && (i <= TempIndex))
{
Flag = 1;
}
else if ((RecordArray[TempIndex] == 2) && (j >= TempIndex) && (i < TempIndex))
{
Flag = 1;
}
else if ((RecordArray[TempIndex] > 2) && (j >= TempIndex) && (i <= TempIndex))
{
Flag = 1;
}
if (Flag)
{
printf("*returnSize : %d\n", *returnSize);
(*returnColumnSizes)[*returnSize] = ELEMENTSIZE;//*returnColumnSizesEntre parenthèses
ResArray[*returnSize] = (int*)malloc(sizeof(int) * ELEMENTSIZE);
ResArray[*returnSize][0] = MinValue;
ResArray[*returnSize][2] = MaxValue;
ResArray[*returnSize][1] = TempValue;
//printf("data : (%d , %d , %d)\n", ResArray[*returnSize][0], ResArray[*returnSize][2], ResArray[*returnSize][1]);
(*returnSize)++;
Printf2DimensionArray(ResArray, *returnSize, ELEMENTSIZE);
printf("+++++++++++++++++++++++++++++\n");
Flag = 0;
}
}
}
}
Printf2DimensionArray(ResArray, *returnSize, ELEMENTSIZE);
Printf2DimensionArray(returnColumnSizes, 1, *returnSize);
return ResArray;
}
void Printf2DimensionArray(int** Array, int num1, int num2)
{
int i, j;
printf("{");
for ( i = 0; i < num1; i++)
{
printf("{");
for ( j = 0; j < num2; j++)
{
printf("%2d ", Array[i][j]);
}
printf("} ");
}
printf("} \n");
}
void PrintfHeadVal()
{
int i;
printf("En - tête:");
for (i = -RECORDARRAYSIZE; i <= RECORDARRAYSIZE; i++)
{
printf("%3d ", i);
}
printf("\n");
printf("Index:");
for (i = 0; i <= RECORDARRAYSIZE * 2 ; i++)
{
printf("%3d ", i);
}
printf("\n");
}
void PrintfArr(void *arr, int size, int elementsize)
{
if (elementsize == sizeof(int))
{
int *tmparr = (int*)arr;
int i;
for (i = 0; i < size; i++)
{
printf("%3d ", tmparr[i]);
}
}
else if (elementsize == sizeof(char))
{
char *tmparr = (char*)arr;
int i;
for (i = 0; i < size; i++)
{
printf("%c ", tmparr[i]);
}
}
printf("\n========================\n");
}
Quatre、VSRésultats des opérations
Cinq、leecodeCode de soumission
#define ELEMENTSIZE 3
#define INITARRAYSIZE 20000
#define RECORDARRAYSIZE 100000
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
*returnSize = 0;
if (numsSize < ELEMENTSIZE)
{
return NULL;
}
int** ResArray = (int**)malloc(sizeof(int*) * INITARRAYSIZE);
int* RecordArray = (int*)malloc(sizeof(int) * (RECORDARRAYSIZE * 2 + 1));
*returnColumnSizes = (int*)malloc(sizeof(int) * INITARRAYSIZE);
int MaxIndex = RECORDARRAYSIZE + nums[0];
int MinIndex = RECORDARRAYSIZE + nums[0];
int TempValue = 0;
int MaxValue = MaxIndex - RECORDARRAYSIZE;
int MinValue = MinIndex - RECORDARRAYSIZE;
int TempIndex = 0;
int i = 0;
int j = 0;
int Flag = 0;
for ( i = 0; i < RECORDARRAYSIZE * 2 + 1; i++)
{
RecordArray[i] = 0;
}
for ( i = 0; i < numsSize; i++)
{
MaxValue = MaxIndex - RECORDARRAYSIZE;
if (nums[i] > MaxValue)
{
MaxIndex = RECORDARRAYSIZE + nums[i];
}
MinValue = MinIndex - RECORDARRAYSIZE;
if(nums[i] < MinValue)
{
MinIndex = RECORDARRAYSIZE + nums[i];
}
RecordArray[RECORDARRAYSIZE + nums[i]]++;
}
MaxValue = MaxIndex - RECORDARRAYSIZE;
MinValue = MinIndex - RECORDARRAYSIZE;
if (MaxValue < 0)
{
return NULL;
}
if (MinValue > 0)
{
return NULL;
}
while ((MinValue * 2 + MaxValue > 0) && (RecordArray[MaxIndex] != 0))
{
MaxIndex--;
MaxValue = MaxIndex - RECORDARRAYSIZE;
}
while ((MinValue + MaxValue * 2 < 0) && (RecordArray[MinIndex] != 0))
{
MinIndex++;
MinValue = MinIndex - RECORDARRAYSIZE;
}
for (i = MinIndex; i <= RECORDARRAYSIZE; i++)
{
if (RecordArray[i] == 0)
{
continue;
}
MinValue = i - RECORDARRAYSIZE;
while ((MinValue * 2 + MaxValue > 0) && (RecordArray[MaxIndex] != 0))
{
MaxIndex--;
MaxValue = MaxIndex - RECORDARRAYSIZE;
}
for ( j = MaxIndex; j >= RECORDARRAYSIZE; j--)
{
if (RecordArray[j] == 0)
{
continue;
}
MaxValue = j - RECORDARRAYSIZE;
TempValue = 0 - MinValue - MaxValue;
TempIndex = TempValue + RECORDARRAYSIZE;
if (RecordArray[TempIndex] > 0)
{
if ((RecordArray[TempIndex] == 1) && (j > TempIndex) && (i < TempIndex))
{
Flag = 1;
}
else if ((RecordArray[TempIndex] == 2) && (j > TempIndex) && (i <= TempIndex))
{
Flag = 1;
}
else if ((RecordArray[TempIndex] == 2) && (j >= TempIndex) && (i < TempIndex))
{
Flag = 1;
}
else if ((RecordArray[TempIndex] > 2) && (j >= TempIndex) && (i <= TempIndex))
{
Flag = 1;
}
if (Flag)
{
(*returnColumnSizes)[*returnSize] = ELEMENTSIZE;
ResArray[*returnSize] = (int*)malloc(sizeof(int) * ELEMENTSIZE);
ResArray[*returnSize][0] = MinValue;
ResArray[*returnSize][2] = MaxValue;
ResArray[*returnSize][1] = TempValue;
(*returnSize)++;
Flag = 0;
}
}
}
}
return ResArray;
}
Six、Résultats des opérations
边栏推荐
- Set picture annotation in markdown
- First knowledge of OpenGL es learning (1)
- C - Inheritance - polymorphism - virtual function member (lower)
- Week6 weekly report
- js对象获取属性的方法(.和[]方式)
- If Jerry's Bluetooth device wants to send data to the mobile phone, the mobile phone needs to open the notify channel first [article]
- Go learning -- implementing generics based on reflection and empty interfaces
- #systemverilog# 可综合模型的结构总结
- On the world of NDK (2)
- 可变参数重载时的内存错误
猜你喜欢
Path analysis model
Fundamentals of C language 9: Functions
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
word中如何删除某符号前面或后面所有的文字
SEO学习的最好方式:搜索引擎
How Navicat imports MySQL scripts
Jerry's ad series MIDI function description [chapter]
You deserve this high-value open-source third-party Netease cloud music player
杰理之BLE【篇】
Bugku CTF daily question: do you want seeds? Blackmailed
随机推荐
Methods for JS object to obtain attributes (. And [] methods)
Excel的相关操作
OpenJudge NOI 2.1 1661:Bomb Game
Ble of Jerry [chapter]
C语言 简单易懂的高精度加法
Typescript indexable type
Typescript interface properties
学go之路(二)基本类型及变量、常量
可变参数重载时的内存错误
Crawling exercise: Notice of crawling Henan Agricultural University
杰理之需要修改 gatt 的 profile 定义【篇】
CDN acceleration and cracking anti-theft chain function
Do you really think binary search is easy
word怎么只删除英语保留汉语或删除汉语保留英文
TS基础篇
Get/post/put/patch/delete meaning
Structure summary of SystemVerilog integrable model
How Navicat imports MySQL scripts
Thought map of data warehouse construction
数字IC设计笔试题汇总(一)