当前位置: 首页 > news >正文

外贸工艺品网站建设英雄联盟韩国

外贸工艺品网站建设,英雄联盟韩国,滁州网站建设公司,国内做钢铁的网站目录 1. 按要求排序数组 ★ 2. Z 字形变换 ★★ 3. 下一个排列 ★★ 1. 按要求排序数组 给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中,数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小…

目录

1. 按要求排序数组  ★

2. Z 字形变换  ★★

3. 下一个排列  ★★


1. 按要求排序数组

给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中,数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。

代码:

#include<stdio.h>
#include<stdlib.h>
int oneNum(int x)
{int cnt = 0;while(x){cnt++;x = x & (x - 1);}return cnt;
}
int cmp(const void *a,const void*b)
{int al,bl;int ret;al = *(int*)a;bl = *(int*)b;ret =  oneNum(al) - oneNum(bl);return  ret ? ret : al - bl;
}
int main()
{int s[]={1,2,3,5,6,7,8},i;int len = sizeof(s)/sizeof(*s);qsort(s,len,4,cmp);for(i = 0 ; i < len ; i++){printf("%d\n",s[i]);}
}

2. Z 字形变换

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P   A   H   N
A P L S I I G
Y   I   R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"

示例 2:

输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P     I    N
A   L S  I G
Y A   H R
P     I

示例 3:

输入:s = "A", numRows = 1
输出:"A"

提示:

  • 1 <= s.length <= 1000
  • s 由英文字母(小写和大写)、',' 和 '.' 组成
  • 1 <= numRows <= 1000

代码: 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:string convert(string s, int numRows){if (numRows == 1)return s;int len = s.size();if (len <= numRows)return s;int cycle_len = 2 * numRows - 2;int full_cycles = len / cycle_len;int left = len % cycle_len;string r;int i;for (i = 0; i < full_cycles; ++i){r += s[i * cycle_len];}if (left)r += s[i * cycle_len];for (i = 0; i < numRows - 2; ++i){int j;for (j = 0; j < full_cycles; ++j){r += s[j * cycle_len + i + 1];r += s[j * cycle_len + i + 1 + cycle_len - 2 * (i + 1)];}if (left){if (j * cycle_len + i + 1 < len)r += s[j * cycle_len + i + 1];if (j * cycle_len + i + 1 + cycle_len - 2 * (i + 1) < len)r += s[j * cycle_len + i + 1 + cycle_len - 2 * (i + 1)];}}for (i = 0; i < full_cycles; ++i)r += s[i * cycle_len + numRows - 1];if (left >= numRows)r += s[i * cycle_len + numRows - 1];return r;}
};int main()
{Solution sol;string s = "PAYPALISHIRING";int numRows = 3;cout << sol.convert(s, numRows) << endl;numRows = 4;cout << sol.convert(s, numRows) << endl;s = "A", numRows = 1;cout << sol.convert(s, numRows) << endl;return 0;
} 

输出:

PAHNAPLSIIGYIR
PINALSIGYAHRPI
A


3. 下一个排列

实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

必须原地修改,只允许使用额外常数空间。

示例 1:

输入:nums = [1,2,3]
输出:[1,3,2]

示例 2:

输入:nums = [3,2,1]
输出:[1,2,3]

示例 3:

输入:nums = [1,1,5]
输出:[1,5,1]

示例 4:

输入:nums = [1]
输出:[1]

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 100

代码:

#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;class Solution {
public:void nextPermutation(vector<int> &nums) {int n = nums.size();if (n < 2) return;for (int j, i = n - 2; i >= 0; --i) {if (nums[i + 1] > nums[i]) {for (j = n - 1; j > i; --j) {if (nums[j] > nums[i]) break;}swap(nums[i], nums[j]);reverse(nums.begin() + i + 1, nums.end());return;}}reverse(nums.begin(), nums.end());}
};int main()
{Solution s;vector<int> nums = {1,2,3};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;cout << endl;nums = {3,2,1};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;cout << endl;nums = {1,1,5};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;cout << endl;nums = {1};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;return 0;
} 
#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;class Solution {
public:void nextPermutation(vector<int>& nums) {int n = nums.size(), i = n - 2, j = n - 1;while (i >= 0 && nums[i] >= nums[i + 1]) --i;if (i >= 0) {while (nums[j] <= nums[i]) --j;swap(nums[i], nums[j]);}reverse(nums.begin() + i + 1, nums.end());}
};int main()
{Solution s;vector<int> nums = {1,2,3};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;cout << endl;nums = {3,2,1};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;cout << endl;nums = {1,1,5};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;cout << endl;nums = {1};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;return 0;
} 
#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;class Solution {
public:void nextPermutation(vector<int>& nums) {int n = nums.size();int i = n - 1;for (; i > 0; i--) {if (nums[i] > nums[i - 1]) {for (int j = n - 1; j >= i; j--) {if (nums[j] > nums[i - 1]) {swap(nums[j], nums[i - 1]);break;}}break;}}for (int j = i, k = 1; j < (n + i) / 2; j++, k++) {swap(nums[n - k], nums[j]);}}
};int main()
{Solution s;vector<int> nums = {1,2,3};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;cout << endl;nums = {3,2,1};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;cout << endl;nums = {1,1,5};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;cout << endl;nums = {1};s.nextPermutation(nums);copy(nums.begin(), nums.end(), ostream_iterator<int>(cout," "));;return 0;
} 

输出:

1 3 2
1 2 3
1 5 1
1


附录

排列与组合

是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。

相关阅读:

https://hannyang.blog.csdn.net/article/details/125238660icon-default.png?t=N176https://hannyang.blog.csdn.net/article/details/125238660

http://www.tj-hxxt.cn/news/51175.html

相关文章:

  • 国际实时新闻最新消息seo的内容主要有哪些方面
  • 专业全网推广建站公司河南整站关键词排名优化软件
  • 群辉怎么做网站刚刚发生了一件大事
  • 用.net做的网站吗线上营销的方式
  • 企业融资难的原因及对策seo研究学院
  • 沪佳装饰门店地址广州优化营商环境条例
  • 河北衡水建设网站公司营口建网站的公司
  • 做网站ie10缓存网站建设的六个步骤
  • 上海门户网站建设方案seo综合查询怎么用
  • 网站风格要求青岛网站建设维护
  • 做兼职的网站贴吧seo是什么意思呢
  • 美丽寮步网站建设高性能seo搜索引擎入门教程
  • 高端网站建设股票发行ipo和seo是什么意思
  • 商城网站主要功能获取排名
  • 南昌建网站做优化公司百度小程序优化排名
  • 用自己的电脑建设网站网上推销产品去什么平台
  • 本溪做网站的公司培训心得简短50字
  • 多用户商城网站建设网站制作价格
  • wordpress主题google东莞快速优化排名
  • sem显微镜廊坊关键词排名优化
  • 赣州网站建设优化服务广州百度竞价外包
  • 广州网站建设哪家公司好百度推广400电话
  • 阿里云国际站官网推广赚钱项目
  • 盐城网站建设费用西安网站到首页排名
  • 香港免费云服务器南通seo网站优化软件
  • 仿站插件 wordpress金华百度seo
  • 90设计网站怎么绑定手机号南宁seo排名外包
  • 深圳团购网站设计哪家好近三天重大新闻摘抄
  • php网站后台验证码不显示排名优化seo公司
  • 昭通做网站公司网站建设费