C++数据结构学习(顺序表)
创始人
2024-11-14 17:33:54
0

文章目录

  • 顺序表
    • 杭州电子科技大学在线评测
      • 2008 数值统计
        • 使用顺序表实现
      • 2014 青年歌手大奖赛_评委会打分
    • Leetcode题目
      • [LCP 01. 猜数字](https://leetcode.cn/problems/guess-numbers/description/)
      • [LCP 06. 拿硬币](https://leetcode.cn/problems/na-ying-bi/description/)
      • [2057. 值相等的最小索引](https://leetcode.cn/problems/smallest-index-with-equal-value/description/)
      • [485. 最大连续 1 的个数](https://leetcode.cn/problems/max-consecutive-ones/description/)
      • 2006.差的绝对值为K的数对题目
      • [1464. 数组中两元素的最大乘积](https://leetcode.cn/problems/maximum-product-of-two-elements-in-an-array/description/)
      • [2535. 数组元素和与数字和的绝对差](https://leetcode.cn/problems/difference-between-element-sum-and-digit-sum-of-an-array/description/)
      • [2656. K 个元素的最大和](https://leetcode.cn/problems/maximum-sum-with-exactly-k-elements/description/)
      • [2367. 算术三元组的数目](https://leetcode.cn/problems/number-of-arithmetic-triplets/description/)
      • [27. 移除元素](https://leetcode.cn/problems/remove-element/description/)
      • [1920. 基于排列构建数组](https://leetcode.cn/problems/build-array-from-permutation/description/)
      • [1929. 数组串联](https://leetcode.cn/problems/concatenation-of-array/description/)
      • [1431. 拥有最多糖果的孩子](https://leetcode.cn/problems/kids-with-the-greatest-number-of-candies/description/)
      • [1991. 找到数组的中间位置](https://leetcode.cn/problems/find-the-middle-index-in-array/description/)
      • [540. 有序数组中的单一元素](https://leetcode.cn/problems/single-element-in-a-sorted-array/description/)
      • [119. 杨辉三角 II](https://leetcode.cn/problems/pascals-triangle-ii/description/)
      • [3065. 超过阈值的最少操作数 I](https://leetcode.cn/problems/minimum-operations-to-exceed-threshold-value-i/description/)
      • [2951. 找出峰值](https://leetcode.cn/problems/find-the-peaks/description/)
      • [2960. 统计已测试设备](https://leetcode.cn/problems/count-tested-devices-after-test-operations/description/)
      • [2824. 统计和小于目标的下标对数目](https://leetcode.cn/problems/count-pairs-whose-sum-is-less-than-target/description/)
      • [2859. 计算 K 置位下标对应元素的和](https://leetcode.cn/problems/sum-of-values-at-indices-with-k-set-bits/description/)
      • [2341. 数组能形成多少数对](https://leetcode.cn/problems/maximum-number-of-pairs-in-array/description/)
      • [3158. 求出出现两次数字的 XOR 值](https://leetcode.cn/problems/find-the-xor-of-numbers-which-appear-twice/description/)

顺序表

杭州电子科技大学在线评测

杭州电子科技大学在线评测官网

2008 数值统计

#include  using namespace std;  int main() { 	int n; 	while (cin >> n) { 		if (n == 0) { 			break; 		} 		int negative = 0; 		int zero = 0; 		int positive = 0; 		for (int i = 1; i <= n; i++) { 			double num; 			cin >> num; 			if (num < 0) { 				negative++; 			} 			if (num == 0) { 				zero++; 			} 			if (num > 0) { 				positive++; 			} 		} 		cout << negative << ' ' << zero << ' ' << positive << endl; 	} } 
使用顺序表实现
#include  using namespace std;  // 顺序表模板 #define eleType double  struct SequentialList { 	eleType *elements; 	int size; 	int capacity; };  // 初始化顺序表 void initializeList(SequentialList* list, int capacity) { 	list->elements = new eleType[capacity]; 	list->size = 0; 	list->capacity = capacity; }  // 销毁顺序表 void destroyList(SequentialList* list) { 	delete[] list->elements; }  // 获取顺序表的大小 eleType size(SequentialList* list) { 	return list->size; }  // 判断顺序表是否为空 eleType isEmpty(SequentialList* list) { 	return list->size == 0; }  // 顺序表的元素插入 eleType insert(SequentialList* list, int index, eleType element) { 	if (index < 0 || index > list->size) { 		throw std::invalid_argument("Invalid index"); 	} 	if (list->size == list->capacity) { 		int newCapacity = list->capacity * 2; 		eleType* newElements = new eleType[newCapacity]; 		for (int i = 0; i < list->size; ++i) { 			newElements[i] = list->elements[i]; 		} 		delete[] list->elements; 		list->elements = newElements; 		list->capacity = newCapacity; 	} 	for (int i = list->size; i > index; i--) { 		list->elements[i] = list->elements[i - 1]; 	} 	list->elements[index] = element; 	list->size++; }  // 顺序表的元素删除 void deleteElement(SequentialList* list, int index) { 	if (index < 0 || index >= list->size) { 		throw std::invalid_argument("Invalid index"); 	} 	for (int i = index; i < list->size - 1; ++i) { 		list->elements[i] = list->elements[i + 1]; 	} 	list->size--; }  // 顺序表寻找元素是否存在 eleType findElement(SequentialList* list, eleType element) { 	for (int i = 0; i < list->size; ++i) { 		if (list->elements[i] == element) { 			return i; 		} 	} 	return -1; }  // 获取元素 eleType getElement(SequentialList* list, int index) { 	if (index < 0 || index >= list->size) { 		throw std::invalid_argument("Invalid index"); 	} 	return list->elements[index]; }  // 修改元素 void updateElement(SequentialList* list, int index, eleType value) { 	if (index < 0 || index >= list->size) { 		throw std::invalid_argument("Invalid index"); 	} 	list->elements[index] = value; }  int main() { 	int n; 	while (cin >> n && n) { 		SequentialList s; 		initializeList(&s, 1); 		for (int i = 0; i < n; i++) { 			eleType x; 			cin >> x; 			insert(&s, i, x); 		} 		int pcnt = 0, zcnt = 0, ncnt = 0; 		for (int i = 0; i < size(&s); i++) { 			eleType element = getElement(&s, i); 			if (element > 1e-8) { 				pcnt++; 			} 			else if (element < -1e-8) { 				ncnt++; 			} 			else { 				zcnt++; 			} 		} 		cout << ncnt << ' ' << zcnt << ' ' << pcnt << endl; 	} } 

2014 青年歌手大奖赛_评委会打分

#include  using namespace std;  // 顺序表模板 #define eleType double  struct SequentialList { 	eleType* elements; 	int size; 	int capacity; };  // 初始化顺序表 void initializeList(SequentialList* list, int capacity) { 	list->elements = new eleType[capacity]; 	list->size = 0; 	list->capacity = capacity; }  // 销毁顺序表 void destroyList(SequentialList* list) { 	delete[] list->elements; }  // 获取顺序表的大小 int size(SequentialList* list) { 	return list->size; }  // 判断顺序表是否为空 eleType isEmpty(SequentialList* list) { 	return list->size == 0; }  // 顺序表的元素插入 void insert(SequentialList* list, int index, eleType element) { 	if (index < 0 || index > list->size) { 		throw std::invalid_argument("Invalid index"); 	} 	if (list->size == list->capacity) { 		int newCapacity = list->capacity * 2; 		eleType* newElements = new eleType[newCapacity]; 		for (int i = 0; i < list->size; ++i) { 			newElements[i] = list->elements[i]; 		} 		delete[] list->elements; 		list->elements = newElements; 		list->capacity = newCapacity; 	} 	for (int i = list->size; i > index; i--) { 		list->elements[i] = list->elements[i - 1]; 	} 	list->elements[index] = element; 	list->size++; }  // 顺序表的元素删除 void deleteElement(SequentialList* list, int index) { 	if (index < 0 || index >= list->size) { 		throw std::invalid_argument("Invalid index"); 	} 	for (int i = index; i < list->size - 1; ++i) { 		list->elements[i] = list->elements[i + 1]; 	} 	list->size--; }  // 顺序表寻找元素是否存在 eleType findElement(SequentialList* list, eleType element) { 	for (int i = 0; i < list->size; ++i) { 		if (list->elements[i] == element) { 			return i; 		} 	} 	return -1; }  // 获取元素 eleType getElement(SequentialList* list, int index) { 	if (index < 0 || index >= list->size) { 		throw std::invalid_argument("Invalid index"); 	} 	return list->elements[index]; }  // 修改元素 void updateElement(SequentialList* list, int index, eleType value) { 	if (index < 0 || index >= list->size) { 		throw std::invalid_argument("Invalid index"); 	} 	list->elements[index] = value; }  int main() { 	int n; 	while (cin >> n) { 		SequentialList s; 		initializeList(&s, n); 		eleType max_score = -100000000; 		eleType min_score = 100000000; 		eleType sum = 0; 		for (int i = 0; i < n; i++) { 			eleType num; 			cin >> num; 			insert(&s, i, num); 		} 		for (int i = 0; i < size(&s); i++) { 			if (getElement(&s, i) > max_score) { 				max_score = getElement(&s, i); 			} 			if (getElement(&s, i) < min_score) { 				min_score = getElement(&s, i); 			} 			sum += getElement(&s, i); 		} 		sum -= max_score; 		sum -= min_score; 		printf("%.2f\n", sum / (n - 2)); 	} } 

Leetcode题目

LCP 01. 猜数字

class Solution { public:     int game(vector& guess, vector& answer) {         int count = 0;         for(int i = 0; i < 3; i++) {             if(guess[i] == answer[i]) {                 count++;             }         }         return count;     } }; 

LCP 06. 拿硬币

class Solution { public:     int minCount(vector& coins) {         int count = 0;         for(int i = 0; i < coins.size(); i++) {             count += (coins[i] + 1)/2;         }         return count;     } }; 

2057. 值相等的最小索引

class Solution { public:     int smallestEqual(vector& nums) {         for(int i = 0; i < nums.size(); i++) {             if(i % 10 == nums[i]) {                 return i;             }         }         return -1;     } }; 

485. 最大连续 1 的个数

class Solution { public:     int findMaxConsecutiveOnes(vector& nums) {         int count = 0;         int end = 0;         for(int i = 0; i < nums.size(); i++) {             if(nums[i] == 1) {                 count = count + 1;                 if(count > end) {                     end = count;                 }             } else {                 count = 0;             }         }         return end;     } }; 

2006.差的绝对值为K的数对题目

class Solution { public:     int countKDifference(vector& nums, int k) {         int count = 0;         for(int i = 0; i < nums.size(); i++) {             for(int j = i + 1; j < nums.size(); j++) {                 if(abs(nums[i] - nums[j]) == k) {                     count++;                 }             }         }         return count;     } }; 

1464. 数组中两元素的最大乘积

class Solution { public:     int maxProduct(vector& nums) {         int maxIndex = 0;         for(int i = 0; i < nums.size(); i++) {             if(nums[i] > nums[maxIndex]) {                 maxIndex = i;             }         }         int secMaxIndex = -1;         for(int i = 0; i < nums.size(); i++) {             if(i != maxIndex) {                 if(secMaxIndex == -1 || nums[i] > nums[secMaxIndex]) {                     secMaxIndex = i;                 }             }         }         return (nums[maxIndex] - 1) * (nums[secMaxIndex] - 1);     } }; 

2535. 数组元素和与数字和的绝对差

class Solution { public:     int differenceOfSum(vector& nums) {         int x = 0, y = 0;         for(int i = 0; i < nums.size(); i++) {             x += nums[i];             while(nums[i]) {                 y += nums[i] % 10;                 nums[i] = nums[i] / 10;             }         }         return abs(x - y);     } }; 

2656. K 个元素的最大和

class Solution { public:     int maximizeSum(vector& nums, int k) {         int count = 0;         while(k--) {             int maxIndex = 0;             for(int i = 0; i < nums.size(); i++) {                 if(nums[i] > nums[maxIndex]) {                     maxIndex = i;                 }             }             count += nums[maxIndex];             nums[maxIndex] += 1;         }         return count;     } }; 

2367. 算术三元组的数目

class Solution { public:     int arithmeticTriplets(vector& nums, int diff) {         int count = 0;         for(int i = 0; i < nums.size(); i++) {             for(int j = i + 1; j < nums.size(); j++) {                 if(nums[j] - nums[i] == diff) {                     for(int k = j + 1; k < nums.size(); k++) {                         if(nums[k] - nums[j] == diff) {                             count++;                         }                     }                 }             }         }         return count;     } }; 

27. 移除元素

class Solution { public:     int removeElement(vector& nums, int val) {         int l = 0;         int r = nums.size() - 1;         while(l <= r) {             if (nums[l] == val) {                 int temp = nums[l];                 nums[l] = nums[r];                 nums[r] = temp;                 r--;             } else {                 l++;             }         }         return r + 1;     } }; 

1920. 基于排列构建数组

class Solution { public:     vector buildArray(vector& nums) {         vector result;         for(int i = 0; i < nums.size(); i++) {             int ans = nums[nums[i]];             result.push_back(ans);         }         return result;     } }; 

1929. 数组串联

class Solution { public:     vector getConcatenation(vector& nums) {         vector result;         for(int i = 0; i < nums.size(); i++) {             result.push_back(nums[i]);         }         for(int i = 0; i < nums.size(); i++) {             result.push_back(nums[i]);         }         return result;     } }; 

1431. 拥有最多糖果的孩子

class Solution { public:     vector kidsWithCandies(vector& candies, int extraCandies) {         vector result;         for(int i = 0; i < candies.size(); i++) {             int maxIndex = 0;             candies[i] += extraCandies;             for(int j = 0; j < candies.size(); j++) {                 if(candies[j] > candies[maxIndex]) {                     maxIndex = j;                 }             }             if(candies[i] == candies[maxIndex]) {                 result.push_back(true);             } else {                 result.push_back(false);             }             candies[i] -= extraCandies;         }         return result;     } }; 

1991. 找到数组的中间位置

class Solution { public:     int findMiddleIndex(vector& nums) {         for(int i = 0; i < nums.size(); i++) {             int l = 0;             int r = 0;             for(int j = 0; j < i; j++) {                 l += nums[j];             }             for(int j = i + 1; j < nums.size(); j++) {                 r += nums[j];             }             if (l == r) {                 return i;             }         }         return -1;     } }; 

540. 有序数组中的单一元素

class Solution { public:     int singleNonDuplicate(vector& nums) {         for(int i = 0; i < nums.size(); i++) {             if(i == 0) {                 if(nums.size() == 1 || nums[i] != nums[i + 1]) {                     return nums[i];                 }             } else if(i == nums.size() - 1) {                 if(nums[i] != nums[i - 1]) {                     return nums[i];                 }             } else {                 if(nums[i - 1] != nums[i] && nums[i] != nums[i + 1]) {                     return nums[i];                 }             }         }         return 0;     } }; 

119. 杨辉三角 II

class Solution { public:     vector getRow(int rowIndex) {         int nums[34][34];         for(int i = 0; i <= rowIndex; i++) {             for(int j = 0; j <= i; j++) {                 if(j == 0 || i == j) {                     nums[i][j] = 1;                 } else {                     nums[i][j] = nums[i-1][j] + nums[i-1][j-1];                 }             }         }         vector result;         for(int j = 0; j <= rowIndex; j++) {             result.push_back(nums[rowIndex][j]);         }         return result;     } }; 

3065. 超过阈值的最少操作数 I

class Solution { public:     int minOperations(vector& nums, int k) {         int count = 0;         for(int i = 0; i < nums.size(); i++) {             if(nums[i] < k) {                 count++;             }         }         return count;     } }; 

2951. 找出峰值

class Solution { public:     vector findPeaks(vector& mountain) {         vector result;         for(int i = 1; i < mountain.size() - 1; i++) {             if((mountain[i] > mountain[i - 1]) && (mountain[i] > mountain[i + 1])) {                 result.push_back(i);             }         }         return result;     } }; 

2960. 统计已测试设备

class Solution { public:     int countTestedDevices(vector& batteryPercentages) {         int count = 0;         for(int i = 0; i < batteryPercentages.size(); i++) {             if(batteryPercentages[i] > 0) {                 count++;                 for(int j = i + 1; j < batteryPercentages.size(); j++) {                     batteryPercentages[j] = max(0, batteryPercentages[j] - 1);                 }             }         }         return count;     } }; 

2824. 统计和小于目标的下标对数目

class Solution { public:     int countPairs(vector& nums, int target) {         int count = 0;         for(int i = 0; i < nums.size(); i++) {             for(int j = i + 1; j < nums.size(); j++) {                 if(nums[i] + nums[j] < target) {                     count++;                 }             }         }         return count;     } }; 

2859. 计算 K 置位下标对应元素的和

class Solution { public:     int sumIndicesWithKSetBits(vector& nums, int k) {         int sum = 0;         for(int i = 0; i < nums.size(); i++) {             int num = i;             int count = 0;             while(num) {                 if(num & 1) {                     count++;                 }                 num >>= 1;             }             if(count == k) {                 sum += nums[i];             }         }         return sum;     } }; 

2341. 数组能形成多少数对

class Solution { public:     vector numberOfPairs(vector& nums) {         int count = 0;         bool judge[100] = {0};         for(int i = 0; i < nums.size(); i++) {             for(int j = 0; j < i; j++) {                 if(judge[j] == true) {                     continue;                 }                 if(nums[i] == nums[j]) {                     judge[i] = judge[j] = true;                     count++;                     break;                 }             }         }         return {count, (int)nums.size() - 2 * count};     } }; 

3158. 求出出现两次数字的 XOR 值

class Solution { public:     int duplicateNumbersXOR(vector& nums) {         int count = 0;         long visited = 0;         for(int i = 0; i < nums.size(); i++) {             int x = nums[i];             if(visited & ((long)1<                 count ^= x;             } else {                 visited |= ((long)1<

相关内容

热门资讯

德扑之星有猫腻(pokerrr... 德扑之星有猫腻(pokerrrr2俱乐部)云扑克辅助(软件透明挂)一般真的有挂(有挂靠谱)-小红书;...
透视辅助(pokermaste... 透视辅助(pokermastersteam)外挂透明辅助APP(辅助挂)的确真的有挂(2022已更新...
三分钟掌握(轰趴大菠萝十三水辅... 三分钟掌握(轰趴大菠萝十三水辅助)wepoke app系统规律(2025已更新)(小红书);1、下载...
普及教程(impoker)wp... 普及教程(impoker)wpk可以玩胜率高(辅助挂)果真真的有挂(2024已更新)(今日头条)1、...
黑科技辅助(we-poker)... 黑科技辅助(we-poker)外挂透明辅助插件(透明挂)就是真的有挂(2024已更新)(小红书)1、...
wpk有透视辅助(线上德州)w... wpk有透视辅助(线上德州)wepoke用模拟器(软件透明挂)果然真的有挂(有挂插件)-抖音1、打开...
九分钟晓得(德州线上扑克辅助)... 九分钟晓得(德州线上扑克辅助)wpk显示有(2025已更新)(小红书);1)德州线上扑克辅助辅助挂:...
必胜教程(来玩app)德州ai... 必胜教程(来玩app)德州ai辅助工具(软件透明挂)好像真的有挂(2023已更新)(头条)德州ai辅...
黑科技辅助(wEPoke)外挂... 黑科技辅助(wEPoke)外挂透明辅助神器(辅助挂)原来真的有挂(2020已更新)(微博客户端)1、...
wpk有辅助挂(德州之星)菠萝... wpk有辅助挂(德州之星)菠萝德州app有挂吗(黑科技)的确是有挂的(有挂插件)-今日头条;1、全新...