快速排序,在线调试
#include <iostream>
using namespace std;
void mysort(int nums[], int n);
void sort_(int nums[], int start, int end);int main() {int nums[] = {2,1,4,3,5};int n = sizeof(nums)/sizeof(int);cout<<n<<endl;mysort(nums, n-1);cout<<"-------"<<endl;for(int i=0;i<n;i++){cout<<nums[i]<<" ";}}void mysort(int nums[], int n){sort_(nums,0,n);}void sort_(int nums[], int start, int end){if(start>end) return;int left = start, right = end;while(left<right){while(left<right&&nums[left]<nums[right]) left++;swap(nums[left],nums[right]);while(left<right&&nums[right]>nums[left]) right--;swap(nums[left],nums[right]);}sort_(nums,start,left-1);sort_(nums,left+1,end);
}
最长回文字串
根据中心点推出start,end的过程要注意下
class Solution {
public:string longestPalindrome(string str) {int n = str.size();if(n==0) return "";int len = 0;int start, end;for(int i=0;i<n;i++){int len1 = maxStr(str, i,i);int len2 = maxStr(str, i,i+1);int maxlen = max(len1,len2);if(maxlen>len){len = maxlen;start = i-(maxlen-1)/2;end = i+(maxlen)/2;}}return str.substr(start,end-start+1);}int maxStr(string str,int i1, int i2){int left = i1, right = i2;while(left>=0&&right<str.size()&&str[left]==str[right]){left--, right++;}return right-left-1;}
};