当前位置:网站首页>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
边栏推荐
- Methods for JS object to obtain attributes (. And [] methods)
- Typescript function definition
- Sélectionnez toutes les lignes avec un symbole dans Word et changez - les en titre
- Thought map of data warehouse construction
- Uncaught TypeError: Cannot red propertites of undefined(reading ‘beforeEach‘)解决方案
- Wechat brain competition answer applet_ Support the flow main belt with the latest question bank file
- 杰理之开发板上电开机,就可以手机打开 NRF 的 APP【篇】
- Jerry needs to modify the profile definition of GATT [chapter]
- How MySQL merges data
- Excel的相关操作
猜你喜欢
变量的命名规则十二条
Set picture annotation in markdown
Raspberry pie 3B update VIM
Excel的相关操作
Idea console color log
When the Jericho development board is powered on, you can open the NRF app with your mobile phone [article]
1091: two or three things in childhood (multi instance test)
配置树莓派接入网络
Related operations of Excel
leetcode841. Keys and rooms (medium)
随机推荐
Jerry's general penetration test - do data transmission with app Communication [article]
chrome查看页面fps
Twelve rules for naming variables
多线程和并发编程(二)
Internal and external troubles of "boring ape" bayc
The differences and advantages and disadvantages between cookies, seeion and token
Solution to the problem of breakthrough in OWASP juice shop shooting range
Three treasures of leeks and Chinese men's football team
Uncaught typeerror: cannot red properties of undefined (reading 'beforeeach') solution
Is software testing outsourcing going or not? Three years' real outsourcing experience tells you
Do you really think binary search is easy
Path analysis model
Sélectionnez toutes les lignes avec un symbole dans Word et changez - les en titre
剪映的相关介绍
杰理之需要修改 gatt 的 profile 定义【篇】
杰理之AD 系列 MIDI 功能说明【篇】
TS Basics
软件测试界的三无简历,企业拿什么来招聘你,石沉大海的简历
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
[online problem processing] how to kill the corresponding process when the MySQL table deadlock is caused by the code